Plotly包:生成交互式图表
需要创建在浏览器中显示的图表时,生成的图表可以自动缩放以适合观看者的屏幕
Plotly生成的图表还是交互式的:用户将鼠标指向特定元素时,将突出显示有关该元素的信息
为模拟掷一个骰子的情况,我们创建下面的Die类
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)
randint(1,6) 在1~6里任选一个值
die = Die()
# 掷几次骰子并将结果存储在一个列表中
results = []
for roll_num in range(100):
result = die.roll()
results.append(result)
print(results)
die.roll()得到1~6任意一个数字
[1, 5, 3, 4, 2, 4, 6, 5, 5, 3, 5, 1, 5, 6, 1, 2, 6, 4, 2, 2, 6, 2, 6, 4, 5, 4, 5, 1, 6, 6, 5, 2, 1, 2, 4, 5, 5, 1, 3, 2, 3, 6, 1, 1, 4, 2, 2, 4, 5, 3, 3, 5, 1, 3, 5, 4, 6, 2, 2, 6, 1, 6, 3, 6, 4, 2, 2, 6, 1, 3, 3, 6, 4, 5, 2, 5, 6, 4, 6, 6, 1, 3, 3, 5, 4, 2, 4, 2, 4, 6, 6, 4, 5, 3, 3, 6, 4, 6, 1, 6]
计算每个点数出现的次数
for roll_num in range(1000):
frequencies = []
for value in range(1, die.num_sides+1):
frequency = results.count(value)
frequencies.append(frequency)
print(frequencies)
循环1000次结果:
[166, 160, 172, 156, 183, 163]
count
方法是用于计算字符串或列表中某个元素出现的次数
s = "hello world"
print(s.count("o")) # 2
lst = [1, 2, 3, 4, 1, 2, 1]
print(lst.count(1)) # 3
from plotly.graph_objs import Bar, Layout
from plotly import offline
# 对结果进行可视化
x_values = list(range(1, die.num_sides+1)) # [1, 2, 3, 4, 5, 6]
data = [Bar(x=x_values, y=frequencies)]
# [Bar({
# 'x': [1, 2, 3, 4, 5, 6], 'y': [166, 160, 172, 156, 183, 163]
# })]
x_axis_config = {'title': '结果'}
y_axis_config = {'title': '结果的频率'}
my_layout = Layout(title='掷一个D6 1000次的结果',xaxis=x_axis_config, yaxis=y_axis_config)
# Layout({
# 'title': {'text': '掷一个D6 1000次的结果'}, 'xaxis': {'title': {'text': '结果'}}, 'yaxis': {'title': {'text': '结果的频率'}}
# })
offline.plot({'data': data, 'layout': my_layout}, filename='d6.html')
Bar()
表示用于绘制条形图的数据集
需要一个存储x值的列表和一个存储y值的列表。这个类必须放在方括号内,因为数据集可能包含多个元素
类Layout()
返回一个指定图表布局和配置的对象
offline.plot()
:生成图表
包含数据和布局对象的字典 - - 文件名
offline.plot函数可以设置图表的大小
可以通过设置plotly.graph_objs.Layout中的height和width属性来指定图表的大小
from plotly.offline import plot
import plotly.graph_objs as go
# 创建图表数据
x = [1, 2, 3]
y = [4, 5, 6]
trace = go.Scatter(x=x, y=y)
# 创建布局对象并设置图表大小
layout = go.Layout(height=600, width=800)
# 使用plot函数生成图表并设置布局
fig = go.Figure(data=[trace], layout=layout)
plot(fig, filename='my_plot.html')
# 创建两个骰子
die_1 = Die()
die_2 = Die()
# 掷几次骰子并将结果存储在一个列表中
results = []
for roll_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)
# 可视化结果。
x_values = list(range(2, max_result+1))
data = [Bar(x=x_values, y=frequencies)]
x_axis_config = {'title': '结果', 'dtick': 1}
y_axis_config = {'title': '结果的频率'}
my_layout = Layout(title='掷两个D6 1000次的结果',xaxis=x_axis_config, yaxis=y_axis_config,width=800,height=600)
offline.plot({'data': data, 'layout': my_layout}, filename='d6_d6.html')
class Die:里num_sides=6
dtick
:指定了 轴显示的刻度间距
‘dtick’: 1让Plotly显示每个刻度值
‘dtick’:3
die_1 = Die()
die_2 = Die(10) # 10面骰子
results = []
for roll_num in range(50_000): # 投掷50_000次
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)
x_values = list(range(2, max_result+1))
data = [Bar(x=x_values, y=frequencies)]
x_axis_config = {'title': '结果', 'dtick': 1}
y_axis_config = {'title': '结果的频率'}
my_layout = Layout(title='掷一个D6和一个D10 50000次的结果',xaxis=x_axis_config, yaxis=y_axis_config,width=800,height=600)
offline.plot({'data': data, 'layout': my_layout}, filename='d6_d10.html')