项目2:数据可视化(三)Pygal库的使用

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)
    

# 创建一个掷6面骰子类
die = Die()

# 掷多次骰子,结果存储在列表results里
results = []
for i in range(100):
    result = die.roll()
    results.append(result)
    
print(results)
[1, 2, 5, 5, 5, 5, 6, 5, 1, 2, 4, 2, 4, 2, 2, 1, 1, 1, 6, 2, 1, 4, 6, 3, 2, 6, 4, 1, 6, 4, 2, 3, 1, 6, 5, 1, 5, 1, 2, 2, 6, 4, 2, 4, 3, 6, 2, 1, 4, 3, 5, 5, 4, 3, 4, 4, 4, 2, 3, 4, 1, 2, 6, 2, 2, 5, 3, 5, 1, 3, 6, 1, 2, 5, 5, 2, 5, 3, 1, 2, 5, 1, 1, 1, 6, 1, 6, 1, 1, 1, 5, 6, 6, 4, 1, 1, 1, 4, 2, 1]
results = []
for i in range(1000):
    result = die.roll()
    results.append(result)

# 分析掷骰子的结果
frequencies = []
for value in range(1, die.num_sides + 1):
    frequency = results.count(value)
    frequencies.append(frequency)
    
print(frequencies)
[169, 163, 142, 170, 167, 189]
  • 上面代码统计骰子的6个面分别出现的次数
  • results.count(value):可以统计列表中的值value的出现次数,非常方便
  • 下面对统计结果可视化
import pygal

# 对统计结果可视化
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')

在这里插入图片描述

  • hist = pygal.Bar()实例创建一个条形图,接下来设置条形图的各项属性。
  • hist.add('D6', frequencies)将一系列值添加到图表中。第一个实参给出添加值的标签,第二个实参给出一个列表,其中包含将出现在图表中的值。
  • 最后将图表渲染为一个svg文件
  • pygal让图表具有交互性,当鼠标移动到图表中的条形时将看到与之关联的数据。
# 创建两个D6骰子
die1 = Die()
die2 = Die()

# 掷骰子多次,将结果保存在results中
results = []
for i in range(1000):
    result = die1.roll() + die2.roll()
    results.append(result)
    
# 分析结果
frequencies = []
max_result = die1.num_sides + die2.num_sides
for value in range(2, max_result + 1):
    frequency = results.count(value)
    frequencies.append(frequency)
    
# 可视化结果
hist = pygal.Bar()

hist.title = "Result of rolling two D6 dice 1000 times."
hist.x_labels = ['2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12']
hist.x_title = "Result"
hist.y_title = "Frequency of Result"

hist.add("D6 + D6", frequencies)
hist.render_to_file('dice_visual.svg')

在这里插入图片描述

  • 上面是同时掷两个D6骰子
  • 下面是同时掷一个D6和一个D10骰子的全代码
from random import randint
import pygal

class Die():
    def __init__(self, num_sides = 6):
        self.num_sides = num_sides
    
    def roll(self):
        return randint(1, self.num_sides)
    
die1 = Die()
die2 = Die(10)

results = []
for i in range(50000):
    result = die1.roll() + die2.roll()
    results.append(result)
    
max_nums = die1.num_sides + die2.num_sides
frequencies = []
for value in range(2, max_nums + 1):
    frequency = results.count(value)
    frequencies.append(frequency)
    
hist = pygal.Bar()
hist.title = "Result of rolling a D6 and a D10 dice 50000 times."
hist.x_labels = list(i for i in range(2, 17))
hist.x_title = "Result"
hist.y_title = "Frequency of Result"

hist.add("D6 + D10", frequencies)
hist.render_to_file('D6&D10dice_visual.svg')
    

在这里插入图片描述


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值