16 个动态图!一款好用到爆的 Python 可视化利器
The following article is from 关于数据分析与可视化 Author 俊欣
matplotlib
模块或者是seaborn
模块,而谈及绘制动态图表,大家想到的比较多的是Plotly
或者是Pyecharts
。pygal
,相比较seaborn等常用的模块相比,该模块的优点有:高度可定制,而且用法简单
图表可交互性强
图像可导出SVG格式(矢量图形)
与Django、Flask等Web框架高度集成
因此,pygal模块还是值得拿出来讲讲的,我们大致会说这些内容:
pygal
模块的安装柱状图的绘制 折线图的绘制 饼图的绘制 雷达图的绘制 箱型图 仪表盘 树形图 地图
模块的安装
模块的安装十分的简单,通过pip install
就能够实现,
pip install pygal
当然国内的小伙伴要是觉得下载的速度慢,也可以通过加入第三方的镜像来提速
pip install -i http://pypi.douban.com/simple/ pygal
柱状图
我们来看柱状图的绘制,先看单列柱状图的例子
view = pygal.Bar()
#图表名
view.title = '柱状图'
#添加数据
view.add('数据', [1,3,5,7,9,11])
#在浏览器中查看
#view.render_in_browser()
view.render_to_file('bar.svg')
output
render_to_file()
方法来导出成文件,也可以通过render_in_browser()
方法在浏览器中查看我们再来看多列柱状图的绘制,代码如下
view.add('奇数', [1,3,5,7,9,11])
view.add('偶数', [2,4,6,8,10,12])
output
要是我们想将柱状图横过来看,将上述代码当中的一小部分替换成
view = pygal.HorizontalBar()
output
而要是我们想要堆叠形式的柱状图,则需要将上述代码当中的一小部分替换成
view = pygal.HorizontalStackedBar()
output
折线图
对于折线图的绘制,其实与上面柱状图的绘制基本一致,我们直接来看代码
view = pygal.Line()
#图表名
view.title = '折线图'
#添加数据
view.add('奇数', [1,3,5,7,9,11])
view.add('偶数', [2,4,6,8,10,12])
#在浏览器中查看
view.render_in_browser()
output
view = pygal.StackedLine(fill=True)
饼图
同样,饼图的绘制也是相似的代码逻辑
view = pygal.Pie()
#图表名
view.title = '饼状图'
#添加数据
view.add('A', 23)
view.add('B', 40)
view.add('C', 15)
view.render_to_file('pie.svg')
output
#设置空心圆半径
view = pygal.Pie(inner_radius=0.4)
output
当我们每个类当中不止只有一个数字的时候,可以绘制多级饼图,代码如下
view = pygal.Pie()
#图表名
view.title = '多级饼图'
#添加数据
view.add('A', [20, 25, 30, 45])
view.add('B', [15, 19, 25, 50])
view.add('C', [18, 22, 28, 35])
view.render_to_file('pie_multi.svg')
output
雷达图
radar_chart = pygal.Radar()
radar_chart.title = 'NBA 各球员能力比拼'
radar_chart.x_labels = ['得分', '防守', '助攻', '失误', '篮板']
radar_chart.add('库里', [70, 98, 96, 85, 97])
radar_chart.add('詹姆斯', [60, 95, 50, 75, 99])
radar_chart.add('杜兰特', [94, 45, 88, 91, 98])
radar_chart.render_to_file('radar_nba.svg')
output
箱型图
pygal
模块当中也提供了绘制箱型图的方法,代码如下box_plot = pygal.Box()
box_plot.title = '各浏览器的使用量'
box_plot.add('Chrome', [6395, 8212, 7520, 7218, 12464, 1660, 2123, 8607])
box_plot.add('Firefox', [7512, 8099, 11700, 2651, 6361, 1044, 8502, 9450])
box_plot.add('360安全卫士', [3472, 2933, 4203, 5510, 5810, 1828, 9013, 4669])
box_plot.add('Edge', [4310, 4109, 5935, 7902, 14404, 13608, 34004, 10210])
box_plot.render_to_file("box.svg")
output
仪表盘
仪表盘可以帮助我们量化指标的好坏,代码如下
gauge_chart = pygal.Gauge(human_readable=True)
gauge_chart.title = '不同浏览器的性能差异'
gauge_chart.range = [0, 10000]
gauge_chart.add('Chrome', 8212)
gauge_chart.add('Firefox', 8099)
gauge_chart.add('360安全卫士', 2933)
gauge_chart.add('Edge', 2530)
gauge_chart.render_to_file('gauge_1.svg')
output
热力图
热力图可以更加直观的观测每个区域当中数据的分布,代码如下
treemap = pygal.Treemap()
treemap.title = 'Binary TreeMap'
treemap.add('A', [12, 15, 12, 40, 2, 10, 10, 13, 12, 13, 40, None, 19])
treemap.add('B', [4, 2, 5, 10, 30, 4, 2, 7, 4, -10, None, 8, 30, 10])
treemap.add('C', [3, 8, 3, 3, 5, 15, 3, 5, 4, 12])
treemap.add('D', [23, 18])
treemap.add('E', [11, 2, 1, 12, 3, 13, 1, 2, 13,
14, 3, 1, 2, 10, 1, 10, 12, 1])
treemap.add('F', [31])
treemap.add('G', [15, 9.3, 8.1, 12, 4, 34, 2])
treemap.add('H', [12, 13, 3])
treemap.render_in_browser()
output
地图
pip install pygal_maps_world
代码如下
worldmap_chart = pygal.maps.world.World()
worldmap_chart.title = 'Some countries'
worldmap_chart.add('A countries', ['国家名称的缩写'])
worldmap_chart.add('B countries', ['国家名称的缩写'])
worldmap_chart.add('C countries', ['国家名称的缩写'])
worldmap_chart.render_in_browser()
output
worldmap_chart = pygal.maps.world.World()
worldmap_chart.title = 'Minimum deaths by capital punishement (source: Amnesty International)'
worldmap_chart.add('In 2012', {
'国家名称的缩写': 数量,
'国家名称的缩写': 数量,
.....
})
worldmap_chart.render_in_browser()
output
我们也可以绘制以五大洲为主的世界地图,代码如下
worldmap_continent = pygal.maps.world.SupranationalWorld()
worldmap_continent.add('Asia', [('asia', 1)])
worldmap_continent.add('Europe', [('europe', 1)])
worldmap_continent.add('Africa', [('africa', 1)])
worldmap_continent.add('North america', [('north_america', 1)])
worldmap_continent.add('South america', [('south_america', 1)])
worldmap_continent.add('Oceania', [('oceania', 1)])
worldmap_continent.add('Antartica', [('antartica', 1)])
worldmap_continent.render_in_browser()
output
pip install pygal_maps_fr
代码如下
fr_chart = pygal.maps.fr.Regions()
fr_chart.title = '法国区域图'
fr_chart.add('区域名称', ['数量'])
fr_chart.render_in_browser()
output
- EOF -
看完本文有收获?请转发分享给更多人
推荐关注「数据分析与开发」,提升数据技能
点赞和在看就是最大的支持❤️