Python中的 matplotlib(三)使用Pygal模拟掷骰子

本文详细介绍如何使用Python的Pygal库生成矢量图形文件,包括创建骰子类、掷骰子并统计结果,以及绘制直方图进行可视化分析。通过三个实例展示了不同情境下Pygal的使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Python可视化包Pygal可生成可缩放的矢量图形文件,可在不同尺寸的屏幕上自动缩放,方便观看。

首先安装pygal,ubuntu终端执行pip install pygal,这里实测conda install pygal 无法安装

创建一个骰子的类

 1 from random import randint
 2 
 3 
 4 class Die():
 5     '''表示一个骰子的类'''
 6 
 7     def __init__(self, num_sides=6):
 8         # 骰子默认6面
 9         self.num_sides = num_sides
10 
11     def roll(self):
12         #返回一个位于1和骰子面数之间的值
13         return randint(1, self.num_sides)

掷1000次骰子,分析各点数出现次数并绘制直方图

import pygal
from die import Die


#创建一个6面骰子
die = Die()
#掷几次骰子并将结果存储在列表中
results = []
for roll_num in range(1000):
    result =die.roll()
    results.append(result)

#print(results)
#分析结果:1000次中每个点数出现的次数
frequencies = []
for value in range(1, die.num_sides + 1):
    frequency = results.count(value)
    frequencies.append(frequency)
#print(frequencies)
'''创建直方图,对结果进行可视化'''
hist = pygal.Bar()#创建直方图实例
#属性设置
hist.title = "Results of rolling one D6 1000 times"
hist.x_labels = ['1', '2', '3', '4', '5', '6']
hist.x_title = "Result"
hist.y_title = "Frequency of Result"

hist.add('D6', frequencies)#将标签及结果添加到图表中
hist.render_to_file('die_visual.svg')#将图表渲染成svg文件

Figure:

掷2个骰子,统计点数之和出现的次数

import pygal
from die import Die


#创建2个6面骰子
die_1 = Die()
die_2 = Die()
#掷几次骰子并将结果存储在列表中
results = []
for roll_num in range(1000):
    result =die_1.roll() + die_2.roll()
    results.append(result)

#print(results)
#分析结果:1000次中每个点数出现的次数
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)
#print(frequencies)
'''创建直方图,对结果进行可视化'''
hist = pygal.Bar()#创建直方图实例
#属性设置
hist.title = "Results of rolling two D6 1000 times"
hist.x_labels = ['2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12']
#or hist.x_labels = [str(x) for x in range(2, 13)]
hist.x_title = "Result"
hist.y_title = "Frequency of Result"

hist.add('D6 + D6', frequencies)#将标签及结果添加到图表中
hist.render_to_file('dice_visual.svg')

Figure:

同时掷2个面不同的骰子50000次,一个6面,一个10面,点数之和相加,观测 次数

 1 import pygal
 2 from die import Die
 3 
 4 
 5 #创建1个6面骰子和1个10面骰子
 6 die_1 = Die()
 7 die_2 = Die(10)
 8 #掷几次骰子并将结果存储在列表中
 9 results = []
10 for roll_num in range(50000):
11     result =die_1.roll() + die_2.roll()
12     results.append(result)
13 
14 #print(results)
15 #分析结果:50000次中每个点数出现的次数
16 frequencies = []
17 max_result = die_1.num_sides + die_2.num_sides
18 for value in range(2, max_result + 1):
19     frequency = results.count(value)
20     frequencies.append(frequency)
21 #print(frequencies)
22 '''创建直方图,对结果进行可视化'''
23 hist = pygal.Bar()#创建直方图实例
24 #属性设置
25 hist.title = "Results of rolling a D6 and D10 50000 times"
26 #hist.x_labels = ['2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12']
27 hist.x_labels = [str(x) for x in range(2, 17)]
28 hist.x_title = "Result"
29 hist.y_title = "Frequency of Result"
30 
31 hist.add('D6 + D10', frequencies)#将标签及结果添加到图表中
32 hist.render_to_file('different_visual.svg')

Figure:

 

转载于:https://www.cnblogs.com/sugar2019/p/10720291.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值