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


    投掷一个筛子

    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()
    
        
    
    
  • 相关阅读:
    Vue3学习——标签的ref属性
    【网络安全-键盘监视】学会以后去捉弄舍友,看他有了什么不可告人的秘密
    vue中watch监听事件与计算属性的区别
    leetcode 36. 有效的数独(模拟题)
    数学建模--MATLAB基本使用
    适配不同场景的RestTemplate
    【数据结构与算法】链表
    CSDN算法技能树评测
    记录get和post的理解误区
    ExtJS类成员-判断浏览器版本和操作系统类型功能
  • 原文地址:https://blog.csdn.net/qq_43702629/article/details/138723036