使用pygal可以生成矢量图形文件,本文以pygal绘制掷骰子结果的直方图为例进行展示。
安装pygal
pip instlal pygal
创建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, num_sides]之间的一个随机整数,模拟掷骰子的点数"""
return randint(1, self.num_sides)
同时,创建die_visual.py
文件,用于掷骰子。内容如下,解释见注释。
from die import Die # 导入骰子类
die = Die() # 初始化一个骰子
results = [] # 用于保存每次掷骰子的结果
for roll_num in range(100):
# 掷100次骰子,并将结果保存至results变量
result = die.roll()
results.append(result)
print(results) # 打印掷100次骰子的结果
执行python die_visual.py
效果如下。
$ python die_visual.py
[6, 5, 6, 4, 2, 3, 5, 2, 1, 4, 4, 1, 1, 4, 5, 2, 3, 3, 3, 5, 4, 5, 5, 4, 3, 4, 6, 5, 2, 5, 1, 6, 4, 2, 1, 3, 1, 6, 3, 3, 4, 4, 1, 1, 3, 6, 3, 4, 1, 1, 1, 1, 5, 2, 5, 4, 4, 5, 2, 6, 4, 6, 1, 5, 6, 2, 3, 6, 6, 4, 3, 3, 5, 4, 6, 2, 6, 5, 2, 3, 2, 6, 5, 2, 4, 3, 3, 3, 6, 3, 3, 4, 4, 3, 4, 5, 5, 5, 5, 5]
结果为投掷100次骰子的点数结果。由于是随机出现,故每次出现的结果不会一样。
解析结果
修改die_visual.py
如下。
from die import Die # 导入骰子类
die = Die() # 初始化一个骰子
results = [] # 用于保存每次掷骰子的结果
for roll_num in range(100-):
# 掷1000次骰子,并将结果保存至results变量
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)
执行python die_visual.py
效果如下。
$ python die_visual.py
[159, 184, 173, 156, 159, 169]
结果为投掷1000次骰子1-6点分别出现的次数。由于是随机出现,故每次出现的结果不会一样。
绘制直方图
修改die_visual.py
如下。
import pygal
from die import Die # 导入骰子类
die = Die() # 初始化一个骰子
results = [] # 用于保存每次掷骰子的结果
for roll_num in range(1000):
# 掷100次骰子,并将结果保存至results变量
result = die.roll()
results.append(result)
# 分析结果
frequencies = []
for value in range(1, die.num_sides+1):
frequency = results.count(value)
frequencies.append(frequency)
# 对结果进行可视化
hist = pygal.Bar()
hist.title = "投掷1000次骰子的结果"
hist.x_labels = ['1', '2', '3', '4', '5', '6']
hist.x_title = "点数"
hist.y_title = "次数"
hist.add('D6', frequencies)
hist.render_to_file("die_visual.svg")
执行完后,打开svg文件,如下图所示。
原文始发于微信公众号(Know Why It):使用Pygal模拟掷骰子
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/276242.html