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

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:

 

posted @ 2019-04-16 21:50  椰汁软糖  阅读(938)  评论(7编辑  收藏  举报