python-使用Plotly模拟掷骰子

Plotly包:生成交互式图表

需要创建在浏览器中显示的图表时,生成的图表可以自动缩放以适合观看者的屏幕
Plotly生成的图表还是交互式的:用户将鼠标指向特定元素时,将突出显示有关该元素的信息

创建Die 类

为模拟掷一个骰子的情况,我们创建下面的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():生成图表
包含数据和布局对象的字典 - - 文件名

python-使用Plotly模拟掷骰子_第1张图片
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
在这里插入图片描述

python-使用Plotly模拟掷骰子_第2张图片

同时掷两个面数不同的骰子

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')

python-使用Plotly模拟掷骰子_第3张图片

你可能感兴趣的:(python,plotly,jupyter)