上一篇文章,我们介绍了matplotlib绘图库,今天我们介绍另一个常用的可视化包——Pygal。Pygal可以用来生成可缩放的矢量图形文件。它们可以在任何设备上自动缩放,来适合观看者的屏幕。它是以在线的方式生成的图表,即网页。
更多细节请参考官方文档:
英文文档:https://www.matplotlib.org.cn/
Python库安装的方式基本都是相同的,在Windows下,都要使用pip命令。
pip install pygal
安装后,对其进行测试,没有出现错误,则认为已经安装成功,命令如下:
#先进入python环境,再输入命令
import pygal
我们将用一个掷骰子的项目来对此进行分析。掷一个6面的骰子,各个面出现的结果的概率是相同的,如果同时掷2个骰子,则有的面出现的概率会变大,因此我们拿一个6个面的骰子(简称D6)来做实验,并将结果绘制出来。
from random import randint
class Die():
"""创建一个骰子的类"""
def __init__(self,num_sides=6):
# 6个面的骰子
self.num_sides=num_sides
def roll(self):
# 返回一个从1和骰子的面数之间的随机值整数,起始值是1,终止值是num_sides
return randint(1,self.num_sides)
die=Die()
results=[]
for num in range(100):
result=die.roll()
results.append(result)
print(results)
输出结果如下:
[6, 1, 2, 2, 1, 4, 1, 6, 5, 4, 6, 3, 1, 4, 2, 6, 4, 6, 2, 5, 3, 4, 2, 4, 5, 3, 3, 5, 5, 3, 5, 2, 5, 6, 6, 2, 5, 2, 6, 5, 6, 2, 1, 3, 2, 3, 1, 6, 2, 3, 2, 5, 3, 4, 4, 2, 4, 5, 2, 2, 2, 2, 2, 3, 6, 2, 2, 2, 2, 5, 1, 1, 3, 1, 2, 4, 6, 4, 1, 6, 5, 3, 3, 1, 5, 5, 6, 4, 6, 5, 1, 4, 6, 5, 1, 4, 2, 3, 5, 4]
die=Die()
results=[]
for num in range(1000):
result=die.roll()
results.append(result)
frequencies=[]
for value in range(1,die.num_sides+1):
frequency=results.count(value)
frequencies.append(frequency)
print(frequencies)
结果如下:
[179, 166, 154, 159, 167, 175]
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="Rrequency of Result"
# 将值传递给图表,列表的值会出现在图表中
hist.add('D6',frequencies)
# 文件扩展名必须为.svg
hist.render_to_file('die_visual.svg')
该文件会在你的py文件所在的目录下生成,将.svg文件拖到 浏览器中,即可查看到结果图。该表有交互性,鼠标碰到图中任何条形,可以看到与之关联的数据。
完整代码如下:
from random import randint
import pygal
class Die():
"""创建一个骰子的类"""
def __init__(self,num_sides=6):
# 6个面的骰子
self.num_sides=num_sides
def roll(self):
# 返回一个从1和骰子的面数之间的随机值整数,起始值是1,终止值是num_sides
return randint(1,self.num_sides)
# 掷骰子
die_1=Die()
die_2=Die()
results=[]
for num in range(1000):
result=die_1.roll()+die_2.roll()
results.append(result)
# 分析结果
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)
# 可视化结果
hist= pygal.Bar()
hist.title= "Results of rolling two D6 1000 times"
hist.x_labels=[2,3,4,5,6,7,8,9,10,11,12]
hist.x_title="Result"
hist.y_title="Rrequency of Result"
hist.add('D6+D6',frequencies)
# 文件扩展名必须为.svg
hist.render_to_file('die_visual_2.svg')
可以发现点数和为7的次数是最多的,有如下几种可能:1+6,2+5,3+4,4+3,5+2,6+1