[Data Visualization] 使用Python Plotly库实现掷2个骰子结果之和的直方图绘制
一、内容实现概述
本文主要讲述使用Python的Plotly绘图库绘制掷2个6面骰子多次后其结果之和的直方图结果
Matplot绘制过程如下:
- 导入random库、plotly库以及绘制直方图的Bar()方法
- 两次同时调用random库的randint()随机方法在1-6的整数中随机取一个值,并记录每两次随机值之和的结果(本实现对投掷结果进行了类封装)
- 统计2个骰子点数之和,即2-12点出现的频次
- 调用库的Bar()方法传入2个6面骰子投掷点数之和的结果,并进行直方图绘制
- 调用库的plot()方法,进行展示
注:
-
- 在Python中使用(导入)Plotly绘图库时,需要先安装,本实现使用的是pip命令安装。pip install plotly
- Plotly教程
二、代码实现
注:源代码地址
Dice骰子类
from random import randint class Dice: """表示一个骰子类""" def __init__(self, side=6): self.side = side def roll(self): return randint(1, self.side)
# 主题:绘制同时掷两个6面骰子的直方图 from dice import Dice from plotly.graph_objs import Bar, Layout from plotly import offline import plotly.express as px # 第一步:记录每次掷骰子的结果 dice_instance_1 = Dice() dice_instance_2 = Dice() roll_dice_times = 100 roll_dice_result = [] dice_frequency = [] # 同时投掷两个6面的骰子100次 for i in range(roll_dice_times): result = dice_instance_1.roll() + dice_instance_2.roll() roll_dice_result.append(result) # 统计2-12点出现的次数 max_points = dice_instance_1.side + dice_instance_2.side for points in range(2, max_points + 1): frequency = roll_dice_result.count(points) dice_frequency.append(frequency) # 第二步:将掷骰子的所有结果用直方图表示 ## 第一种实现方式 x_values = list(range(2, max_points + 1)) data = [Bar(x=x_values, y=dice_frequency)] x_axis_config = {'title': "面数"} y_axis_config = {'title': "面数出现的次数"} layoutObj = Layout(title="同时掷两个6面骰子100次的结果分布情况", xaxis = x_axis_config, yaxis = y_axis_config) figure = {'data': data, 'layout': layoutObj} offline.plot(figure, filename='two_6_side_dice.html') ## 第二种实现方式 fig = px.bar(x=x_values, y=dice_frequency) fig.show()
三、运行结果
第一种实现方式的结果

第二种实现方式的结果

浙公网安备 33010602011771号