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


    投掷一个筛子

    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()
    
        
    
    
  • 相关阅读:
    《跟我一起学“网络安全”》——等保风评加固应急响应
    JUC第十七讲:JUC集合: ConcurrentLinkedQueue详解
    论文解读(S^3-CL)《Structural and Semantic Contrastive Learning for Self-supervised Node Representation Learning》
    你掉进过新技术的“大坑”吗?
    编辑器的缩略图实现原理
    【C++航海王:追寻罗杰的编程之路】C++11(二)
    Redis——SpringBoot整合、持久化、集群(主从、哨兵、分片)
    如何实现chrome谷歌浏览器多开(独立环境 独立cookie)
    传世引擎常见报错如何解决
    [USACO11MAR] Brownie Slicing G题解(二分+二维前缀和+矩阵分割)
  • 原文地址:https://blog.csdn.net/qq_43702629/article/details/138723036