谈谈Python实战数据可视化之pygal模块(基础篇)

栏目: 编程工具 · 发布时间: 5年前

内容简介:绘制线图很简单,需要注意的是最后我们使用render_to_file将这个图表渲染为一个SVG文件,使用浏览器打开SVG文件方可查看生成的图表。代码如下:基本用法跟绘制线图类似,代码如下:

前沿

对于需要在尺寸不同的屏幕上显示的图表,请考虑使用Pygal来生成它们,因为它们将自动缩放,以适合观看者的屏幕,这样它们在任何设备上显示时都会很美观。接下来我会谈谈pygal模块生成线、直方图的基本用法,用书本骰子的案例来更深入了解pygal模块的使用,对于pygal其他图形的创建其实方法差不多,实际运用时需要制作哪种图形就去官网查询,官网有很多图形创建的示例代码,pygal画廊官网链接: http://www.pygal.org/

如下方图(有图有代码,自己打一遍其实懂得也差不多了):

谈谈 <a href='https://www.codercto.com/topics/20097.html'>Python</a> 实战数据可视化之pygal模块(基础篇)

pygal绘制线图

绘制线图很简单,需要注意的是最后我们使用render_to_file将这个图表渲染为一个SVG文件,使用浏览器打开SVG文件方可查看生成的图表。

代码如下:

# 导入pygal可视化模块
import pygal

line_chart = pygal.Line()  # 创建一个线图的实例化对象
line_chart.title = 'Browser usage evolution (in %)'  # 设置标题
line_chart.x_labels = map(str, range(2002, 2013))  # 设置X轴标签,从2002年到2013年
# 下面是添加四条由11个点连成的线
line_chart.add('Firefox', [None, None, 0, 16.6, 25, 31, 36.4, 45.5, 46.3, 42.8, 37.1])
line_chart.add('Chrome', [None, None, None, None, None, None, 0, 3.9, 10.8, 23.8, 35.3])
line_chart.add('IE', [85.8, 84.6, 84.7, 74.5, 66, 58.6, 54.7, 44.8, 36.2, 26.6, 20.1])
line_chart.add('Others', [14.2, 15.4, 15.3, 8.9, 9, 10.4, 8.9, 5.8, 6.7, 6.8, 7.5])
line_chart.render_to_file('bar_chart.svg')  # 将图像保存为SVG文件,可通过浏览器查看

运行结果如下:

谈谈Python实战数据可视化之pygal模块(基础篇)

pygal绘制水平线图

基本用法跟绘制线图类似,代码如下:

# 导入pygal可视化模块
import pygal

line_chart = pygal.HorizontalLine()  # 创建一个水平线图的实例化对象
line_chart.title = 'Browser usage evolution (in %)'  # 设置标题
line_chart.x_labels = map(str, range(2002, 2013))  # 注意,这里的是水平线图,那么X轴就变为Y轴,Y轴变为X轴,所以这里map返回的值应用于Y轴
# 下面是添加四条由11个点连成的线
line_chart.add('Firefox', [None, None, 0, 16.6, 25, 31, 36.4, 45.5, 46.3, 42.8, 37.1])
line_chart.add('Chrome', [None, None, None, None, None, None, 0, 3.9, 10.8, 23.8, 35.3])
line_chart.add('IE', [85.8, 84.6, 84.7, 74.5, 66, 58.6, 54.7, 44.8, 36.2, 26.6, 20.1])
line_chart.add('Others', [14.2, 15.4, 15.3, 8.9, 9, 10.4, 8.9, 5.8, 6.7, 6.8, 7.5])
line_chart.range = [0, 100]  # 设置X轴的范围
line_chart.render_to_file('bar_chart.svg')  # 将图像保存为SVG文件,可通过浏览器查看

运行结果如下:

谈谈Python实战数据可视化之pygal模块(基础篇)

pygal绘制直方图

基本用法跟上面类似,代码如下:

# 导入pygal可视化模块
import pygal

frequency = [10, 20, 30, 40, 50, 60]
bar = pygal.Bar()  # 创建一个直方图的实例化对象
bar.title = 'test'  # 设置标题
bar.x_labels = ['1', '2', '3', '4', '5', '6']
bar.x_title = "Result"
bar.y_title = "Frequency of Result"

bar.add('D', frequency)
bar.render_to_file('bar_chart.svg')  # 将图像保存为SVG文件,可通过浏览器查看

运行结果如下:

谈谈Python实战数据可视化之pygal模块(基础篇)

使用Pygal模拟掷一个骰子

完成这个掷骰子项目需要以下几步:

1.创建Die骰子类来模拟人类掷骰子的过程

2.将每次掷骰子后的点数,还有点数对应出现的次数分别保存在results和frequencies列表中

3.根据第二步获取的数据results和frequencies列表来绘制直方图

代码如下:

(1)创建Die骰子类来模拟人类掷骰子的过程

在工程目录下创建一个die.py文件,文件代码如下:

from random import randint

class Die:
    def __init__(self, num_sides=6):
        """骰子默认为6面,也可以自定义面数"""
        self.num_sides = num_sides

    def roll(self):
        """返回一个1到骰子面数之间的随机值来模拟人掷骰子的结果值"""
        return randint(1, self.num_sides)

(2)将数据保存到results和frequencies列表中,并根据数据使用Pygal来绘制直方图

在工程目录下创建一个dice_visual.py文件,代码如下:

# 下面是掷一个六面骰子的案例
from die import Die
import pygal

# 实例化一个Die类对象
die = Die()

results = []
for roll_num in range(1000):
    result = die.roll()  # 调用实例化对象的roll方法随机生成一个数字,在1-6之间的数字模拟掷骰子
    results.append(result)  # 将结果放入results列表
frequencies = []
# 将实验的结果数据统计出每个数字出现的次数
for value in range(1, die.num_sides + 1):
    frequency = results.count(value)
    frequencies.append(frequency)

# 绘制直方图
# 实例化一个bar对象,对该对象的title、x_labels、x_title、y_title属性设置相当于在直方图设置。
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 = "Frequencies of result"

hist.add('D6', frequencies)
hist.render_to_file('die_visual.svg')

运行结果如下:

谈谈Python实战数据可视化之pygal模块(基础篇)

从上面的图表可以看出,掷一个D6骰子,每个点数出现的可能性接近相等,若掷骰子的次数更大, 那么每个点数出现的概率就越接近于6分之1.

使用Pygal模拟掷两个骰子

前面的案例是掷一个骰子,较为简单。这次案例是掷两个骰子,获取的点数更多,结果分布情况也不同。我们创建两个骰子,以模拟同时掷两个骰子的情况,每次掷两个骰子时,我们都将两个骰子的点数相加,并将结果存储在results中。最后,利用Pygal模块绘制直方图。

修改dice_visual.py文件代码如下:

# 下面是掷两个六面骰子的案例
from die import Die
import pygal

# 实例化两个个Die类对象
die_1 = Die()
die_2 = Die()

results = []
for roll_num in range(1000):
    result = die_1.roll() + die_2.roll()  # 将两次模拟掷骰子的值相加
    results.append(result)  # 将结果放入results列表
frequencies = []
max_result = die_1.num_sides + die_2.num_sides
# 将实验的结果数据统计出每个数字出现的次数
for value in range(2, max_result + 1):  # 两个骰子相加最小也是2
    frequency = results.count(value)
    frequencies.append(frequency)

# 绘制直方图
# 实例化一个bar对象,对该对象的title、x_labels、x_title、y_title属性设置相当于在直方图设置。
hist = pygal.Bar()
hist.title = "Results of rolling two D6 dice 1000 times"
hist.x_labels = list(range(2, max_result + 1))
hist.x_title = "Result"
hist.y_title = "Frequencies of result"

hist.add('D6 + D6', frequencies)
hist.render_to_file('dice_visual1.svg')

运行结果如下:

谈谈Python实战数据可视化之pygal模块(基础篇)

从上面的图表可以看出掷两个D6骰子,总点数为2或12的可能性最小,而总点数为7的可能性最大,这是因为在6种情况(1和6,2和5,3和4,4和3,5和2,6和1)下得到的总点数都为7。

使用Pygal模拟掷两个面数不同的骰子

下面创建一个6面骰子和10面骰子,然后同时掷两个骰子50000次。

再次修改dice_visual.py文件代码如下:

# 下面是掷两个面数不同的骰子案例
from die import Die
import pygal

# 实例化两个Die类对象
die_1 = Die()
die_2 = Die(10)  # 注意这里传入10

results = []
for roll_num in range(50000):
    result = die_1.roll() + die_2.roll()
    results.append(result)  # 将结果放入results列表
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)

# 绘制直方图
# 实例化一个bar对象,对该对象的title、x_labels、x_title、y_title属性设置相当于在直方图设置。
hist = pygal.Bar()
hist.title = "Results of rolling a D6 and a D10 50,000 times"
hist.x_labels = list(range(2, max_result + 1))
hist.x_title = "Result"
hist.y_title = "Frequencies of result"

hist.add('D6 + D10', frequencies)
hist.render_to_file('dice_visual2.svg')

运行结果如下:

谈谈Python实战数据可视化之pygal模块(基础篇)

以上所述就是小编给大家介绍的《谈谈Python实战数据可视化之pygal模块(基础篇)》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

The Linux Command Line

The Linux Command Line

William E. Shotts Jr. / No Starch Press, Incorporated / 2012-1-17 / USD 39.95

You've experienced the shiny, point-and-click surface of your Linux computer-now dive below and explore its depths with the power of the command line. The Linux Command Line takes you from your very ......一起来看看 《The Linux Command Line》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

MD5 加密
MD5 加密

MD5 加密工具