Plotly 生成的图形可以自动缩放,以适应观看者的屏幕。Plotly 生成的图形还是交互式的:当用户将鼠标指向特定的元素时,将显示有关该元素的信息。
一、安装 Plotly
打开终端,输入一下命令:
python -m pip install --user plotly
python -m pip install --user pandas
# pandas 是一个用于高效地处理数据的库
# plotly 依赖于 pandas
⚠️注意:如果没有配置国内的镜像地址,下载会非常的慢,建议配置一下(见附录)
二、创建一个类 — 骰子
from random import randint
class Die:
"""骰子类"""
def __init__(self, num_sides=6):
"""6面"""
self.num_sides = num_sides
def roll(self):
return randint(1, self.num_sides)
三、创建一个实例
from dice import Dice
# 创建一个 D6
dice = Dice()
# 结果存储在一个列表中
results = []
for roll_num in range(1000):
result = dice.roll()
results.append(result)
frequencies = []
poss_results = range(1, dice.num_sides+1)
for value in poss_results:
frequency = results.count(value)
frequencies.append(frequency)
print(frequencies)
创建一个 Dice 实例,其面数为默认值 6 。然后掷骰子 1000 次,并将每次的结果都存储在列表。创建空列表 frequencies,用于存储每个点数出现的次数。
输出结果:
[144, 190, 170, 164, 184, 148]
四、绘制直方图
from dice import Dice
import plotly.express as px
# 创建一个 D6
dice = Dice()
# 结果存储在一个列表中
results = []
for roll_num in range(1000):
result = dice.roll()
results.append(result)
frequencies = []
poss_results = range(1, dice.num_sides+1)
for value in poss_results:
frequency = results.count(value)
frequencies.append(frequency)
print(frequencies)
# 结果可视化
fig = px.bar(x=poss_results, y=frequencies)
fig.show()
运行时,你可能会报错,如下:提示我们需要安装 numpy
ImportError: Plotly Express requires numpy to be installed. You can install numpy using pip with:
执行命令:
pip install numpy
结果输出:
再修改点东西:
--省略--
# 结果可视化
title = "1000 次运行结果"
labels = {'x': '面值', 'y': '出现次数'}
fig = px.bar(x=poss_results, y=frequencies, title=title, labels=labels)
fig.show()
输出结果:
五、两个🎲会怎样呢
from dice import Dice
import plotly.express as px
# 创建一个 D6
dice_1 = Dice()
dice_2 = Dice()
# 结果存储在一个列表中
results = []
for roll_num in range(1000):
result = dice_1.roll() + dice_2.roll()
results.append(result)
frequencies = []
max_result = dice_1.num_sides + dice_2.num_sides
poss_results = range(2, max_result+1)
for value in poss_results:
frequency = results.count(value)
frequencies.append(frequency)
print(frequencies)
# 结果可视化
title = "两个🎲1000 次运行结果"
labels = {'x': '面值', 'y': '出现次数'}
fig = px.bar(x=poss_results, y=frequencies, title=title, labels=labels)
fig.show()
可能出现的最小总点数为两个骰子的最小可能点数之和(2),可能出现的最大总点数为两个骰子的最大可能点数之和(12)。
输出结果:
Plotly 提供了 update_layout() 方法,可用来对创建的图形做各种修改。
fig.update_layout(xaxis_dtick=1)
对表示整张图的 fig 对象调用 update_layout() 方法。这里传递了参数 xaxis_dtick,它指定 x 轴上刻度标记的间距。我们将这个间距设置为1,给每个条形都加上标签。
要将图形保存为 HTML 文件,可将 fig.show() 替换为 fig.write_html():
fig.write_html('dice_visual01.html')
write_html() 方法接受一个参数:要写入的文件的名称。如果只提供文件名,这个文件将被保存到 .py 文件所在的目录中。可传递 Path 对象。
附录
见:附录https://blog.csdn.net/Lin_Coder_/article/details/145966883?spm=1001.2014.3001.5502