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: