数据可视化训练第四天(模拟投掷筛子并且统计频次)

投掷一个筛子

import matplotlib.pyplot as plt
from random import randint
import numpy as np

class Die:
    """模拟投掷筛子"""
    def __init__(self,num_sides=6):
        self.num_sides=num_sides
        
    def roll(self):
        return randint(1,self.num_sides)
    
    
    

num=100000#投掷1000次
num_sides=12
results=[]
die=Die(num_sides)#创建一个6面筛子

for value in range(num):
    results.append(die.roll())
    
frequencies=[]

for i in range(1,num_sides+1):
    frequencies.append(results.count(i))

    
fig,ax =plt.subplots()
x_values=list(range(1,num_sides+1))
p=ax.bar(x_values,frequencies,label='frequency')

ax.set_title("The frequency of chromophores")
ax.set_xlabel('surface')
ax.set_ylabel('quanity')
#设置bar的格式
ax.bar_label(p,label_type='edge')

ax.legend()

plt.show()

在这里插入图片描述

投掷两个筛子

import matplotlib.pyplot as plt
from random import randint
import numpy as np

class Die:
    """模拟投掷筛子"""
    def __init__(self,num_sides=6):
        self.num_sides=num_sides
        
    def roll(self):
        return randint(1,self.num_sides)
    
    
    

num=100000#投掷1000次
num_sides=6
results=[]
die=Die(num_sides)#创建一个6面筛子
die1=Die(num_sides)

for value in range(num):
    results.append(die.roll()+die1.roll())
    
frequencies=[]

for i in range(1,num_sides*2+1):
    frequencies.append(results.count(i))


#绘图
fig,ax =plt.subplots()
x_values=list(range(1,num_sides*2+1))
p=ax.bar(x_values,frequencies,label='frequency')

ax.set_title("The frequency of chromophores")
ax.set_xlabel('surface')
ax.set_ylabel('quanity')
ax.set_xticks(x_values)
#设置bar的格式
ax.bar_label(p,label_type='edge')

ax.legend()

plt.show()

在这里插入图片描述

重构代码

import matplotlib.pyplot as plt
from random import randint
import numpy as np

class Die:
    """模拟投掷筛子"""
    def __init__(self,num_sides=[6]):
        self.num_sides=num_sides
        self.results=[]
        
    def roll(self):
        """返回投掷筛子的总点数"""
        result=0
        for value in self.num_sides:
            result+=randint(1,value)
        return result
    
    def roll_many(self,num=1000):
        """投掷多次返回每次投掷的结果"""
        for value in range(num):
            self.results.append(self.roll())
        return self.results
    
    def get_sum(self):
    	"""返回点数的最大和"""
        sum_=0
        for value in self.num_sides:
            sum_+=value
        return sum_
    
    def get_frenquencies(self):
    	"""获得每个点数出现的频次"""
        frequencise=[]
        sum_=self.get_sum()
        for i in range(1,sum_+1):
            frequency=self.results.count(i)
            frequencise.append(frequency)
            
        return frequencise
    
    
   
num=100000#投掷1000次
#可以投掷任意数量的筛子
num_sides=[6,6,2]
die=Die(num_sides=num_sides)
results=die.roll_many(num)
frequencise=die.get_frenquencies()
print(frequencise)


#绘图
fig,ax =plt.subplots()
x_values=list(range(1,die.get_sum()+1))
p=ax.bar(x_values,frequencise,label='frequency')

ax.set_title("The frequency of chromophores")
ax.set_xlabel('surface')
ax.set_ylabel('quanity')
ax.set_xticks(x_values)
#设置bar的格式
ax.bar_label(p,label_type='edge')

ax.legend()

plt.show()

    

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值