談談Python實戰數據可視化之pygal模塊(基礎篇)

前沿

對於須要在尺寸不一樣的屏幕上顯示的圖表,請考慮使用Pygal來生成它們,由於它們將自動縮放,以適合觀看者的屏幕,這樣它們在任何設備上顯示時都會很美觀。接下來我會談談pygal模塊生成線、直方圖的基本用法,用書本骰子的案例來更深刻了解pygal模塊的使用,對於pygal其餘圖形的建立其實方法差很少,實際運用時須要製做哪一種圖形就去官網查詢,官網有不少圖形建立的示例代碼,pygal畫廊官網連接:http://www.pygal.org/
以下方圖(有圖有代碼,本身打一遍其實懂得也差很少了):
談談Python實戰數據可視化之pygal模塊(基礎篇)瀏覽器

pygal繪製線圖

繪製線圖很簡單,須要注意的是最後咱們使用render_to_file將這個圖表渲染爲一個SVG文件,使用瀏覽器打開SVG文件方可查看生成的圖表。
代碼以下:app

# 導入pygal可視化模塊
import pygal

line_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文件,可經過瀏覽器查看

運行結果以下:
談談Python實戰數據可視化之pygal模塊(基礎篇)dom

pygal繪製水平線圖

基本用法跟繪製線圖相似,代碼以下:ide

# 導入pygal可視化模塊
import pygal

line_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文件,可經過瀏覽器查看

運行結果以下:
談談Python實戰數據可視化之pygal模塊(基礎篇)svg

pygal繪製直方圖

基本用法跟上面相似,代碼以下:3d

# 導入pygal可視化模塊
import pygal

frequency = [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文件,可經過瀏覽器查看

運行結果以下:
談談Python實戰數據可視化之pygal模塊(基礎篇)code

使用Pygal模擬擲一個骰子

完成這個擲骰子項目須要如下幾步:
1.建立Die骰子類來模擬人類擲骰子的過程
2.將每次擲骰子後的點數,還有點數對應出現的次數分別保存在results和frequencies列表中
3.根據第二步獲取的數據results和frequencies列表來繪製直方圖
代碼以下:
(1)建立Die骰子類來模擬人類擲骰子的過程
在工程目錄下建立一個die.py文件,文件代碼以下:對象

from random import randint

class 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文件,代碼以下:blog

# 下面是擲一個六面骰子的案例
from die import Die
import 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')

運行結果以下:
談談Python實戰數據可視化之pygal模塊(基礎篇)
從上面的圖表能夠看出,擲一個D6骰子,每一個點數出現的可能性接近相等,若擲骰子的次數更大, 那麼每一個點數出現的機率就越接近於6分之1.ci

使用Pygal模擬擲兩個骰子

前面的案例是擲一個骰子,較爲簡單。此次案例是擲兩個骰子,獲取的點數更多,結果分佈狀況也不一樣。咱們建立兩個骰子,以模擬同時擲兩個骰子的狀況,每次擲兩個骰子時,咱們都將兩個骰子的點數相加,並將結果存儲在results中。最後,利用Pygal模塊繪製直方圖。
修改dice_visual.py文件代碼以下:

# 下面是擲兩個六面骰子的案例
from die import Die
import 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')

運行結果以下:
談談Python實戰數據可視化之pygal模塊(基礎篇)
從上面的圖表能夠看出擲兩個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 Die
import pygal

# 實例化兩個Die類對象
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)  # 將結果放入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模塊(基礎篇)

相關文章
相關標籤/搜索