上篇文章是使用matplotlib来实现折线图和散点图的绘制,今天就来使用Pygal实现直方图(条形图)的绘制,如果看了上篇文章再来看这篇,我觉得效果会更加。哈哈,希望对你有所帮助!
上篇文章链接:基于matplotlib的折线图和散点图的绘制

1. 安装Pygal

Pygal是一个可视化包,它的优点在于可以生成可缩放的矢量图形文件,生成的图片一般是svg格式的。之所以说是矢量图,就是因为它能在不同尺寸的屏幕上能够自动缩放,以适应观看的屏幕,达到更好的美观效果。下面来说说Pygal的安装

windows上安装Pygal(Dos窗口)

python -m pip install pygal==2.4

Linux上安装Pygal

pip install pygal==2.4

可以去安装列表查看是否成功安装相应的版本,如下

pip list

python 安装pyeasyga python安装pygal_python

2. 直方图绘制

2.1 构造数据
要画图就得有数据,下面来模拟一下掷一个6面的骰子所得的数据

#构造数据
from random import randint

class Die():
    '''随机返回骰子的一个数'''
    
    def __init__(self, D=6):
        self.D = D
        
    def roll(self):
        '''随机返回1到6之间的一个数'''
        
        return randint(1,self.D)

die = Die()
results = []

for i in range(100):
    result = die.roll()
    results.append(result)

上面是模拟掷了100次骰子,看看效果

python 安装pyeasyga python安装pygal_python 安装pyeasyga_02


由于直方图一般是用来直观的显示统计数据的,所以这里对上面1到6出现的数据进行一下统计,如下

count_one_number = []
for i in range(1,7):
    '''统计每个数出现的次数'''
    count_one_number.append(results.count(i))

print(count_one_number)
print(sum(count_one_number))

2.2 绘制直方图
有了上面的数据就可以绘图了,如下

#绘图
import pygal

hist = pygal.Bar()#实例化

#设置坐标轴
hist.title = "Roll of D6 100 times"
hist.x_labels = ['1','2','3','4','5','6']
hist.x_title = "Result"
hist.y_title = "Count numbers"

#传参绘图
hist.add('D6', count_one_number)
hist.render_to_file('D6.svg')

hist.add()函数的作用是向图表中添加一系列值,这里我们传了图的名称D6,以及绘图所需的数据count_one_number.hist.render_to_file()的作用是将图表保存名为D6的svg文件。用浏览器打开生成的“D6.svg”,将会看到下图

python 安装pyeasyga python安装pygal_直方图_03

2.3 模拟掷两个骰子
下面来绘制一下同时掷两个骰子的直方图,代码如下

#绘制同时掷两个骰子的直方图
from random import randint

class Die():
    """返回掷两骰子的点数"""
    def __init__(self,D_numbers):
        self.D_numbers = D_numbers
    
    def roll_1(self):
        #返回第一个骰子的点数
        return randint(1,self.D_numbers)
    
    def roll_2(self):
        #返回第二个骰子的点数
        return randint(1,self.D_numbers)

"""记录10000次实验记录"""

die = Die(6)

results = []
for i in range(10000):
    result = die.roll_1() + die.roll_2()
    results.append(result)
    

"""统计results中每个数出现的次数"""
count_d = []
for value in range(2,13):
    counts = results.count(value)
    count_d.append(counts)


"""绘制统计图"""

import pygal

hist = pygal.Bar()

hist.title = "Results of two D6"
hist.x_labels = ['2','3','4','5','6','7','8','9','10','11','12']
hist.x_title = "Result" 
hist.y_title = "count nnumbers"

hist.add('D6+D6',count_d)
hist.render_to_file("two_D6_10000.svg")

效果如下

python 安装pyeasyga python安装pygal_python 安装pyeasyga_04