談談Python實戰資料視覺效果之pygal模組(基礎篇)

來源:互聯網
上載者:User

標籤:dice   之間   roc   圖表   存在   blog   fir   基本   app   

前沿

對於需要在尺寸不同的螢幕上顯示的圖表,請考慮使用Pygal來產生它們,因為它們將自動縮放,以適合觀看者的螢幕,這樣它們在任何裝置上顯示時都會很美觀。接下來我會談談pygal模組產生線、長條圖的基本用法,用書本骰子的案例來更深入瞭解pygal模組的使用,對於pygal其他圖形的建立其實方法差不多,實際運用時需要製作哪種圖形就去官網查詢,官網有很多圖形建立的範例程式碼,pygal畫廊官網連結:http://www.pygal.org/
如下方圖(有圖有代碼,自己打一遍其實懂得也差不多了):

pygal繪製線圖

繪製線圖很簡單,需要注意的是最後我們使用render_to_file將這個圖表渲染為一個SVG檔案,使用瀏覽器開啟SVG檔案方可查看產生的圖表。
代碼如下:

# 匯入pygal可視化模組import pygalline_chart = pygal.Line()  # 建立一個線圖的執行個體化對象line_chart.title = ‘Browser usage evolution (in %)‘  # 設定標題line_chart.x_labels = map(str, range(2002, 2013))  # 設定X軸標籤,從2002年到2013年# 下面是添加四條由11個點連成的線line_chart.add(‘Firefox‘, [None, None, 0, 16.6, 25, 31, 36.4, 45.5, 46.3, 42.8, 37.1])line_chart.add(‘Chrome‘, [None, None, None, None, None, None, 0, 3.9, 10.8, 23.8, 35.3])line_chart.add(‘IE‘, [85.8, 84.6, 84.7, 74.5, 66, 58.6, 54.7, 44.8, 36.2, 26.6, 20.1])line_chart.add(‘Others‘, [14.2, 15.4, 15.3, 8.9, 9, 10.4, 8.9, 5.8, 6.7, 6.8, 7.5])line_chart.render_to_file(‘bar_chart.svg‘)  # 將映像儲存為SVG檔案,可通過瀏覽器查看

運行結果如下:

pygal繪製水平線圖

基本用法跟繪製線圖類似,代碼如下:

# 匯入pygal可視化模組import pygalline_chart = pygal.HorizontalLine()  # 建立一個水平線圖的執行個體化對象line_chart.title = ‘Browser usage evolution (in %)‘  # 設定標題line_chart.x_labels = map(str, range(2002, 2013))  # 注意,這裡的是水平線圖,那麼X軸就變為Y軸,Y軸變為X軸,所以這裡map返回的值應用於Y軸# 下面是添加四條由11個點連成的線line_chart.add(‘Firefox‘, [None, None, 0, 16.6, 25, 31, 36.4, 45.5, 46.3, 42.8, 37.1])line_chart.add(‘Chrome‘, [None, None, None, None, None, None, 0, 3.9, 10.8, 23.8, 35.3])line_chart.add(‘IE‘, [85.8, 84.6, 84.7, 74.5, 66, 58.6, 54.7, 44.8, 36.2, 26.6, 20.1])line_chart.add(‘Others‘, [14.2, 15.4, 15.3, 8.9, 9, 10.4, 8.9, 5.8, 6.7, 6.8, 7.5])line_chart.range = [0, 100]  # 設定X軸的範圍line_chart.render_to_file(‘bar_chart.svg‘)  # 將映像儲存為SVG檔案,可通過瀏覽器查看

運行結果如下:

pygal繪製長條圖

基本用法跟上面類似,代碼如下:

# 匯入pygal可視化模組import pygalfrequency = [10, 20, 30, 40, 50, 60]bar = pygal.Bar()  # 建立一個長條圖的執行個體化對象bar.title = ‘test‘  # 設定標題bar.x_labels = [‘1‘, ‘2‘, ‘3‘, ‘4‘, ‘5‘, ‘6‘]bar.x_title = "Result"bar.y_title = "Frequency of Result"bar.add(‘D‘, frequency)bar.render_to_file(‘bar_chart.svg‘)  # 將映像儲存為SVG檔案,可通過瀏覽器查看

運行結果如下:

使用Pygal類比擲一個骰子

完成這個擲骰子項目需要以下幾步:
1.建立Die骰子類來類比人類擲骰子的過程
2.將每次擲骰子後的點數,還有點數對應出現的次數分別儲存在results和frequencies列表中
3.根據第二步擷取的資料results和frequencies列表來繪製長條圖
代碼如下:
(1)建立Die骰子類來類比人類擲骰子的過程
在工程目錄下建立一個die.py檔案,檔案代碼如下:

from random import randintclass Die:    def __init__(self, num_sides=6):        """骰子預設為6面,也可以自訂面數"""        self.num_sides = num_sides    def roll(self):        """返回一個1到骰子面數之間的隨機值來類比人擲骰子的結果值"""        return randint(1, self.num_sides)

(2)將資料儲存到results和frequencies列表中,並根據資料使用Pygal來繪製長條圖
在工程目錄下建立一個dice_visual.py檔案,代碼如下:

# 下面是擲一個六面骰子的案例from die import Dieimport pygal# 執行個體化一個Die類對象die = Die()results = []for roll_num in range(1000):    result = die.roll()  # 調用執行個體化對象的roll方法隨機產生一個數字,在1-6之間的數字類比擲骰子    results.append(result)  # 將結果放入results列表frequencies = []# 將實驗的結果資料統計出每個數字出現的次數for value in range(1, die.num_sides + 1):    frequency = results.count(value)    frequencies.append(frequency)# 繪製長條圖# 執行個體化一個bar對象,對該對象的title、x_labels、x_title、y_title屬性設定相當於在長條圖設定。hist = pygal.Bar()hist.title = "Results of rolling one D6 1000 times"hist.x_labels = [‘1‘, ‘2‘, ‘3‘, ‘4‘, ‘5‘, ‘6‘]hist.x_title = "Result"hist.y_title = "Frequencies of result"hist.add(‘D6‘, frequencies)hist.render_to_file(‘die_visual.svg‘)

運行結果如下:

從上面的圖表可以看出,擲一個D6骰子,每個點數出現的可能性接近相等,若擲骰子的次數更大, 那麼每個點數出現的機率就越接近於6分之1.

使用Pygal類比擲兩個骰子

前面的案例是擲一個骰子,較為簡單。這次案例是擲兩個骰子,擷取的點數更多,結果分布情況也不同。我們建立兩個骰子,以類比同時擲兩個骰子的情況,每次擲兩個骰子時,我們都將兩個骰子的點數相加,並將結果儲存在results中。最後,利用Pygal模組繪製長條圖。
修改dice_visual.py檔案代碼如下:

# 下面是擲兩個六面骰子的案例from die import Dieimport pygal# 執行個體化兩個個Die類對象die_1 = Die()die_2 = Die()results = []for roll_num in range(1000):    result = die_1.roll() + die_2.roll()  # 將兩次類比擲骰子的值相加    results.append(result)  # 將結果放入results列表frequencies = []max_result = die_1.num_sides + die_2.num_sides# 將實驗的結果資料統計出每個數字出現的次數for value in range(2, max_result + 1):  # 兩個骰子相加最小也是2    frequency = results.count(value)    frequencies.append(frequency)# 繪製長條圖# 執行個體化一個bar對象,對該對象的title、x_labels、x_title、y_title屬性設定相當於在長條圖設定。hist = pygal.Bar()hist.title = "Results of rolling two D6 dice 1000 times"hist.x_labels = list(range(2, max_result + 1))hist.x_title = "Result"hist.y_title = "Frequencies of result"hist.add(‘D6 + D6‘, frequencies)hist.render_to_file(‘dice_visual1.svg‘)

運行結果如下:

從上面的圖表可以看出擲兩個D6骰子,總點數為2或12的可能性最小,而總點數為7的可能性最大,這是因為在6種情況(1和6,2和5,3和4,4和3,5和2,6和1)下得到的總點數都為7。

使用Pygal類比擲兩個面數不同的骰子

下面建立一個6面骰子和10面骰子,然後同時擲兩個骰子50000次。
再次修改dice_visual.py檔案代碼如下:

# 下面是擲兩個面數不同的骰子案例from die import Dieimport pygal# 執行個體化兩個Die類對象die_1 = Die()die_2 = Die(10)  # 注意這裡傳入10results = []for roll_num in range(50000):    result = die_1.roll() + die_2.roll()    results.append(result)  # 將結果放入results列表frequencies = []max_result = die_1.num_sides + die_2.num_sides# 將實驗的結果資料統計出每個數字出現的次數for value in range(2, max_result + 1):    frequency = results.count(value)    frequencies.append(frequency)# 繪製長條圖# 執行個體化一個bar對象,對該對象的title、x_labels、x_title、y_title屬性設定相當於在長條圖設定。hist = pygal.Bar()hist.title = "Results of rolling a D6 and a D10 50,000 times"hist.x_labels = list(range(2, max_result + 1))hist.x_title = "Result"hist.y_title = "Frequencies of result"hist.add(‘D6 + D10‘, frequencies)hist.render_to_file(‘dice_visual2.svg‘)

運行結果如下:

談談Python實戰資料視覺效果之pygal模組(基礎篇)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.