談?wù)凱ython實(shí)戰(zhàn)數(shù)據(jù)可視化之pygal模塊(基礎(chǔ)篇)-創(chuàng)新互聯(lián)

前沿

對(duì)于需要在尺寸不同的屏幕上顯示的圖表,請(qǐng)考慮使用Pygal來生成它們,因?yàn)樗鼈儗⒆詣?dòng)縮放,以適合觀看者的屏幕,這樣它們?cè)谌魏卧O(shè)備上顯示時(shí)都會(huì)很美觀。接下來我會(huì)談?wù)刾ygal模塊生成線、直方圖的基本用法,用書本骰子的案例來更深入了解pygal模塊的使用,對(duì)于pygal其他圖形的創(chuàng)建其實(shí)方法差不多,實(shí)際運(yùn)用時(shí)需要制作哪種圖形就去官網(wǎng)查詢,官網(wǎng)有很多圖形創(chuàng)建的示例代碼,pygal畫廊官網(wǎng)鏈接:http://www.pygal.org/
如下方圖(有圖有代碼,自己打一遍其實(shí)懂得也差不多了):
談?wù)凱ython實(shí)戰(zhàn)數(shù)據(jù)可視化之pygal模塊(基礎(chǔ)篇)

創(chuàng)新互聯(lián)建站-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比興城網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式興城網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋興城地區(qū)。費(fèi)用合理售后完善,10年實(shí)體公司更值得信賴。

pygal繪制線圖

繪制線圖很簡(jiǎn)單,需要注意的是最后我們使用render_to_file將這個(gè)圖表渲染為一個(gè)SVG文件,使用瀏覽器打開SVG文件方可查看生成的圖表。
代碼如下:

# 導(dǎo)入pygal可視化模塊
import pygal

line_chart = pygal.Line()  # 創(chuàng)建一個(gè)線圖的實(shí)例化對(duì)象
line_chart.title = 'Browser usage evolution (in %)'  # 設(shè)置標(biāo)題
line_chart.x_labels = map(str, range(2002, 2013))  # 設(shè)置X軸標(biāo)簽,從2002年到2013年
# 下面是添加四條由11個(gè)點(diǎn)連成的線
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文件,可通過瀏覽器查看

運(yùn)行結(jié)果如下:
談?wù)凱ython實(shí)戰(zhàn)數(shù)據(jù)可視化之pygal模塊(基礎(chǔ)篇)

pygal繪制水平線圖

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

# 導(dǎo)入pygal可視化模塊
import pygal

line_chart = pygal.HorizontalLine()  # 創(chuàng)建一個(gè)水平線圖的實(shí)例化對(duì)象
line_chart.title = 'Browser usage evolution (in %)'  # 設(shè)置標(biāo)題
line_chart.x_labels = map(str, range(2002, 2013))  # 注意,這里的是水平線圖,那么X軸就變?yōu)閅軸,Y軸變?yōu)閄軸,所以這里map返回的值應(yīng)用于Y軸
# 下面是添加四條由11個(gè)點(diǎn)連成的線
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]  # 設(shè)置X軸的范圍
line_chart.render_to_file('bar_chart.svg')  # 將圖像保存為SVG文件,可通過瀏覽器查看

運(yùn)行結(jié)果如下:
談?wù)凱ython實(shí)戰(zhàn)數(shù)據(jù)可視化之pygal模塊(基礎(chǔ)篇)

pygal繪制直方圖

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

# 導(dǎo)入pygal可視化模塊
import pygal

frequency = [10, 20, 30, 40, 50, 60]
bar = pygal.Bar()  # 創(chuàng)建一個(gè)直方圖的實(shí)例化對(duì)象
bar.title = 'test'  # 設(shè)置標(biāo)題
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文件,可通過瀏覽器查看

運(yùn)行結(jié)果如下:
談?wù)凱ython實(shí)戰(zhàn)數(shù)據(jù)可視化之pygal模塊(基礎(chǔ)篇)

使用Pygal模擬擲一個(gè)骰子

完成這個(gè)擲骰子項(xiàng)目需要以下幾步:
1.創(chuàng)建Die骰子類來模擬人類擲骰子的過程
2.將每次擲骰子后的點(diǎn)數(shù),還有點(diǎn)數(shù)對(duì)應(yīng)出現(xiàn)的次數(shù)分別保存在results和frequencies列表中
3.根據(jù)第二步獲取的數(shù)據(jù)results和frequencies列表來繪制直方圖
代碼如下:
(1)創(chuàng)建Die骰子類來模擬人類擲骰子的過程
在工程目錄下創(chuàng)建一個(gè)die.py文件,文件代碼如下:

from random import randint

class Die:
    def __init__(self, num_sides=6):
        """骰子默認(rèn)為6面,也可以自定義面數(shù)"""
        self.num_sides = num_sides

    def roll(self):
        """返回一個(gè)1到骰子面數(shù)之間的隨機(jī)值來模擬人擲骰子的結(jié)果值"""
        return randint(1, self.num_sides)

(2)將數(shù)據(jù)保存到results和frequencies列表中,并根據(jù)數(shù)據(jù)使用Pygal來繪制直方圖
在工程目錄下創(chuàng)建一個(gè)dice_visual.py文件,代碼如下:

# 下面是擲一個(gè)六面骰子的案例
from die import Die
import pygal

# 實(shí)例化一個(gè)Die類對(duì)象
die = Die()

results = []
for roll_num in range(1000):
    result = die.roll()  # 調(diào)用實(shí)例化對(duì)象的roll方法隨機(jī)生成一個(gè)數(shù)字,在1-6之間的數(shù)字模擬擲骰子
    results.append(result)  # 將結(jié)果放入results列表
frequencies = []
# 將實(shí)驗(yàn)的結(jié)果數(shù)據(jù)統(tǒng)計(jì)出每個(gè)數(shù)字出現(xiàn)的次數(shù)
for value in range(1, die.num_sides + 1):
    frequency = results.count(value)
    frequencies.append(frequency)

# 繪制直方圖
# 實(shí)例化一個(gè)bar對(duì)象,對(duì)該對(duì)象的title、x_labels、x_title、y_title屬性設(shè)置相當(dāng)于在直方圖設(shè)置。
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')

運(yùn)行結(jié)果如下:
談?wù)凱ython實(shí)戰(zhàn)數(shù)據(jù)可視化之pygal模塊(基礎(chǔ)篇)
從上面的圖表可以看出,擲一個(gè)D6骰子,每個(gè)點(diǎn)數(shù)出現(xiàn)的可能性接近相等,若擲骰子的次數(shù)更大, 那么每個(gè)點(diǎn)數(shù)出現(xiàn)的概率就越接近于6分之1.

使用Pygal模擬擲兩個(gè)骰子

前面的案例是擲一個(gè)骰子,較為簡(jiǎn)單。這次案例是擲兩個(gè)骰子,獲取的點(diǎn)數(shù)更多,結(jié)果分布情況也不同。我們創(chuàng)建兩個(gè)骰子,以模擬同時(shí)擲兩個(gè)骰子的情況,每次擲兩個(gè)骰子時(shí),我們都將兩個(gè)骰子的點(diǎn)數(shù)相加,并將結(jié)果存儲(chǔ)在results中。最后,利用Pygal模塊繪制直方圖。
修改dice_visual.py文件代碼如下:

# 下面是擲兩個(gè)六面骰子的案例
from die import Die
import pygal

# 實(shí)例化兩個(gè)個(gè)Die類對(duì)象
die_1 = Die()
die_2 = Die()

results = []
for roll_num in range(1000):
    result = die_1.roll() + die_2.roll()  # 將兩次模擬擲骰子的值相加
    results.append(result)  # 將結(jié)果放入results列表
frequencies = []
max_result = die_1.num_sides + die_2.num_sides
# 將實(shí)驗(yàn)的結(jié)果數(shù)據(jù)統(tǒng)計(jì)出每個(gè)數(shù)字出現(xiàn)的次數(shù)
for value in range(2, max_result + 1):  # 兩個(gè)骰子相加最小也是2
    frequency = results.count(value)
    frequencies.append(frequency)

# 繪制直方圖
# 實(shí)例化一個(gè)bar對(duì)象,對(duì)該對(duì)象的title、x_labels、x_title、y_title屬性設(shè)置相當(dāng)于在直方圖設(shè)置。
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')

運(yùn)行結(jié)果如下:
談?wù)凱ython實(shí)戰(zhàn)數(shù)據(jù)可視化之pygal模塊(基礎(chǔ)篇)
從上面的圖表可以看出擲兩個(gè)D6骰子,總點(diǎn)數(shù)為2或12的可能性最小,而總點(diǎn)數(shù)為7的可能性大,這是因?yàn)樵?種情況(1和6,2和5,3和4,4和3,5和2,6和1)下得到的總點(diǎn)數(shù)都為7。

使用Pygal模擬擲兩個(gè)面數(shù)不同的骰子

下面創(chuàng)建一個(gè)6面骰子和10面骰子,然后同時(shí)擲兩個(gè)骰子50000次。
再次修改dice_visual.py文件代碼如下:

# 下面是擲兩個(gè)面數(shù)不同的骰子案例
from die import Die
import pygal

# 實(shí)例化兩個(gè)Die類對(duì)象
die_1 = Die()
die_2 = Die(10)  # 注意這里傳入10

results = []
for roll_num in range(50000):
    result = die_1.roll() + die_2.roll()
    results.append(result)  # 將結(jié)果放入results列表
frequencies = []
max_result = die_1.num_sides + die_2.num_sides
# 將實(shí)驗(yàn)的結(jié)果數(shù)據(jù)統(tǒng)計(jì)出每個(gè)數(shù)字出現(xiàn)的次數(shù)
for value in range(2, max_result + 1):
    frequency = results.count(value)
    frequencies.append(frequency)

# 繪制直方圖
# 實(shí)例化一個(gè)bar對(duì)象,對(duì)該對(duì)象的title、x_labels、x_title、y_title屬性設(shè)置相當(dāng)于在直方圖設(shè)置。
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')

運(yùn)行結(jié)果如下:
談?wù)凱ython實(shí)戰(zhàn)數(shù)據(jù)可視化之pygal模塊(基礎(chǔ)篇)

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

網(wǎng)站標(biāo)題:談?wù)凱ython實(shí)戰(zhàn)數(shù)據(jù)可視化之pygal模塊(基礎(chǔ)篇)-創(chuàng)新互聯(lián)
轉(zhuǎn)載源于:http://www.muchs.cn/article32/peepc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制網(wǎng)站、標(biāo)簽優(yōu)化App設(shè)計(jì)、網(wǎng)站排名、網(wǎng)站收錄、網(wǎng)站導(dǎo)航

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁設(shè)計(jì)公司