Pygal绘图——可缩放的矢量图

上一篇文章,我们介绍了matplotlib绘图库,今天我们介绍另一个常用的可视化包——Pygal。Pygal可以用来生成可缩放的矢量图形文件。它们可以在任何设备上自动缩放,来适合观看者的屏幕。它是以在线的方式生成的图表,即网页。

更多细节请参考官方文档:

英文文档:https://www.matplotlib.org.cn/

 

一、Pygal的安装

Python库安装的方式基本都是相同的,在Windows下,都要使用pip命令。

pip install pygal

Pygal绘图——可缩放的矢量图_第1张图片

安装后,对其进行测试,没有出现错误,则认为已经安装成功,命令如下:

#先进入python环境,再输入命令
import pygal

二、Pygal绘图

我们将用一个掷骰子的项目来对此进行分析。掷一个6面的骰子,各个面出现的结果的概率是相同的,如果同时掷2个骰子,则有的面出现的概率会变大,因此我们拿一个6个面的骰子(简称D6)来做实验,并将结果绘制出来。

①首先,创建一个骰子的类

from random import randint

class Die():
    """创建一个骰子的类"""
    def __init__(self,num_sides=6):
        # 6个面的骰子
        self.num_sides=num_sides
        
    def roll(self):
        # 返回一个从1和骰子的面数之间的随机值整数,起始值是1,终止值是num_sides
        return  randint(1,self.num_sides)
        

②使用该类创建图表前,先验证一下D6,看看结果是否错误。

die=Die()
results=[]
for num in range(100):
    result=die.roll()
    results.append(result)

print(results)

输出结果如下:

[6, 1, 2, 2, 1, 4, 1, 6, 5, 4, 6, 3, 1, 4, 2, 6, 4, 6, 2, 5, 3, 4, 2, 4, 5, 3, 3, 5, 5, 3, 5, 2, 5, 6, 6, 2, 5, 2, 6, 5, 6, 2, 1, 3, 2, 3, 1, 6, 2, 3, 2, 5, 3, 4, 4, 2, 4, 5, 2, 2, 2, 2, 2, 3, 6, 2, 2, 2, 2, 5, 1, 1, 3, 1, 2, 4, 6, 4, 1, 6, 5, 3, 3, 1, 5, 5, 6, 4, 6, 5, 1, 4, 6, 5, 1, 4, 2, 3, 5, 4]

③为了分析D6的结果,我们计算每个点出现的次数。

die=Die()
results=[]
for num 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)

结果如下:

[179, 166, 154, 159, 167, 175]

④绘制直方图

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="Rrequency of Result"
# 将值传递给图表,列表的值会出现在图表中
hist.add('D6',frequencies)
# 文件扩展名必须为.svg
hist.render_to_file('die_visual.svg')

该文件会在你的py文件所在的目录下生成,将.svg文件拖到 浏览器中,即可查看到结果图。该表有交互性,鼠标碰到图中任何条形,可以看到与之关联的数据。

                                          Pygal绘图——可缩放的矢量图_第2张图片

⑤掷2个D6骰子,并将点数累加,查看结果

完整代码如下:

from random import randint
import pygal
class Die():
    """创建一个骰子的类"""
    def __init__(self,num_sides=6):
        # 6个面的骰子
        self.num_sides=num_sides

    def roll(self):
        # 返回一个从1和骰子的面数之间的随机值整数,起始值是1,终止值是num_sides
        return  randint(1,self.num_sides)

# 掷骰子
die_1=Die()
die_2=Die()
results=[]
for num in range(1000):
    result=die_1.roll()+die_2.roll()
    results.append(result)

# 分析结果
frequencies = []
max_result=die_1.num_sides+die_2.num_sides
for value in range(2,max_result+1):
    frequency=results.count(value)
    frequencies.append(frequency)

# 可视化结果
hist= pygal.Bar()
hist.title= "Results of rolling two D6 1000 times"
hist.x_labels=[2,3,4,5,6,7,8,9,10,11,12]
hist.x_title="Result"
hist.y_title="Rrequency of Result"


hist.add('D6+D6',frequencies)
# 文件扩展名必须为.svg
hist.render_to_file('die_visual_2.svg')

                               Pygal绘图——可缩放的矢量图_第3张图片

可以发现点数和为7的次数是最多的,有如下几种可能:1+6,2+5,3+4,4+3,5+2,6+1

你可能感兴趣的:(Python库的安装及使用)