Python有很多优秀的可视化库,其中有名的像matplotlib、seaborn、plotly,可以绘制出各式绚丽的图表。

这次介绍一个不那么广为人知但依然优秀的可视化库-Pygal

官网介绍说Pygal是一个性感的Python制表工具,提供了14种图表类型,可以轻松定制出版级别的交互式图表。

相比较seaborn等明星库,Pygal有哪些值得一说的优点呢?

  1. 高度可定制,而且用法简单;

  2. 图表可交互性强;

  3. 图像可导出SVG格式(矢量图形);

  4. 与Django、Flask等Web框架高度集成;

Pygal支持哪些图表?

Pygal目前支持的图表有折线图、点图、柱状图、直方图、饼图、雷达图、箱图、气泡图、漏斗图、圆环图、仪表板、漏斗图、热力图、地图。

既可以在浏览器中直接查看图表,或集成到web中,也可以导出图表。

可以导出的格式有:SVG、PNG、Etree、64位URI

Pygal默认在jupyter notebook不显示,需要保存问svg、png等格式,浏览器打开查看,为了便于展示,做了如下设置可在jupyter notebook中展示。

import pygal#设置pygal与jupyter notebook交互
from IPython.display import display, HTMLbase_html = """
<!DOCTYPE html>
<html><head><script type="text/javascript" src="http://kozea.github.com/pygal.js/javascripts/svg.jquery.js"></script><script type="text/javascript" src="https://kozea.github.io/pygal.js/2.0.x/pygal-tooltips.min.js""></script></head><body><figure>{rendered_chart}</figure></body>
</html>
"""

安装并导入Pygal

使用pip或者conda进行安装,在命令行输入:

pip install pygal

几秒钟便可安装完成。

安装好后,导入Pygal:

import pygal

这里用的是Jupyter Notebook环境,好了,接下来正式绘图。

绘图步骤

Pygal的用法非常简单,主要分三步:

  1. 生成图表对象

  2. 导入数据

  3. 导出图像

这里简单绘制一个柱状图:

# 导入pygal库
import pygal  # 创建柱状图对象
bar_chart = pygal.Bar() # 图表命名
bar_chart.title = 'NBA历史得分前五球星数据'# 添加数据
bar_chart.add('贾巴尔', 38387)
bar_chart.add('马龙', 36928)
bar_chart.add('詹姆斯', 34384)
bar_chart.add('科比', 33643)
bar_chart.add('乔丹', 32292) # 在浏览器中查看
bar_chart.render_in_browser()# 导出为矢量图形
bar_chart.render_to_file('NBA.svg')

常见图形

  1. 折线图

line_chart = pygal.Line()
line_chart.title = 'Browser usage evolution (in %)'
# 添加x轴标签
line_chart.x_labels = map(str, range(2002, 2013))
# 传入数据
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])#图片渲染
HTML(base_html.format(rendered_chart=line_chart.render(is_unicode=True)))

  1. 柱状图

line_chart = pygal.HorizontalBar()
line_chart.title = 'Browser usage in February 2012 (in %)'
line_chart.add('IE', 19.5)
line_chart.add('Firefox', 36.6)
line_chart.add('Chrome', 36.3)
line_chart.add('Safari', 4.5)
line_chart.add('Opera', 2.3)#图片渲染
HTML(base_html.format(rendered_chart=line_chart.render(is_unicode=True)))

  1. 饼图

pie_chart = pygal.Pie()
pie_chart.title = 'Browser usage by version in February 2012 (in %)'
pie_chart.add('IE', [5.7, 10.2, 2.6, 1])
pie_chart.add('Firefox', [.6, 16.8, 7.4, 2.2, 1.2, 1, 1, 1.1, 4.3, 1])
pie_chart.add('Chrome', [.3, .9, 17.1, 15.3, .6, .5, 1.6])
pie_chart.add('Safari', [4.4, .1])
pie_chart.add('Opera', [.1, 1.6, .1, .5])#图片渲染
HTML(base_html.format(rendered_chart=pie_chart.render(is_unicode=True)))

  1. 环形图

pie_chart = pygal.Pie(inner_radius=.4)
pie_chart.title = 'Browser usage in February 2012 (in %)'
pie_chart.add('IE', 19.5)
pie_chart.add('Firefox', 36.6)
pie_chart.add('Chrome', 36.3)
pie_chart.add('Safari', 4.5)
pie_chart.add('Opera', 2.3)#图片渲染
HTML(base_html.format(rendered_chart=pie_chart.render(is_unicode=True)))

  1. 雷达图

radar_chart = pygal.Radar()
radar_chart.title = 'V8 benchmark results'
radar_chart.x_labels = ['Richards', 'DeltaBlue', 'Crypto', 'RayTrace', 'EarleyBoyer', 'RegExp', 'Splay', 'NavierStokes']
radar_chart.add('Chrome', [6395, 8212, 7520, 7218, 12464, 1660, 2123, 8607])
radar_chart.add('Firefox', [7473, 8099, 11700, 2651, 6361, 1044, 3797, 9450])
radar_chart.add('Opera', [3472, 2933, 4203, 5229, 5810, 1828, 9013, 4669])
radar_chart.add('IE', [43, 41, 59, 79, 144, 136, 34, 102])
radar_chart.render()#图片渲染
HTML(base_html.format(rendered_chart=radar_chart.render(is_unicode=True)))

  1. 箱图

box_plot = pygal.Box()
box_plot.title = 'V8 benchmark results'
box_plot.add('Chrome', [6395, 8212, 7520, 7218, 12464, 1660, 2123, 8607])
box_plot.add('Firefox', [7473, 8099, 11700, 2651, 6361, 1044, 3797, 9450])
box_plot.add('Opera', [3472, 2933, 4203, 5229, 5810, 1828, 9013, 4669])
box_plot.add('IE', [43, 41, 59, 79, 144, 136, 34, 102])#图片渲染
HTML(base_html.format(rendered_chart=box_plot.render(is_unicode=True)))

  1. 环形图

gauge = pygal.SolidGauge(inner_radius=0.70)
percent_formatter = lambda x: '{:.10g}%'.format(x)
dollar_formatter = lambda x: '{:.10g}$'.format(x)
gauge.value_formatter = percent_formattergauge.add('Series 1', [{'value': 225000, 'max_value': 1275000}],formatter=dollar_formatter)
gauge.add('Series 2', [{'value': 110, 'max_value': 100}])
gauge.add('Series 3', [{'value': 3}])
gauge.add('Series 4', [{'value': 51, 'max_value': 100},{'value': 12, 'max_value': 100}])
gauge.add('Series 5', [{'value': 79, 'max_value': 100}])
gauge.add('Series 6', 99)
gauge.add('Series 7', [{'value': 100, 'max_value': 100}])#图片渲染
HTML(base_html.format(rendered_chart=gauge.render(is_unicode=True)))

  1. 热力图

treemap = pygal.Treemap()
treemap.title = 'Binary TreeMap'
treemap.add('A', [2, 1, 12, 4, 2, 1, 1, 3, 12, 3, 4, None, 9])
treemap.add('B', [4, 2, 5, 10, 3, 4, 2, 7, 4, -10, None, 8, 3, 1])
treemap.add('C', [3, 8, 3, 3, 5, 3, 3, 5, 4, 12])
treemap.add('D', [23, 18])
treemap.add('E', [1, 2, 1, 2, 3, 3, 1, 2, 3,4, 3, 1, 2, 1, 1, 1, 1, 1])
treemap.add('F', [31])
treemap.add('G', [5, 9.3, 8.1, 12, 4, 3, 2])
treemap.add('H', [12, 3, 3])#图片渲染
HTML(base_html.format(rendered_chart=treemap.render(is_unicode=True)))

  1. 地图

# 使用地图需先安装插件pygal_maps_world
# 在命令行输入:pip install pygal_maps_world
worldmap_chart = pygal.maps.world.World()
worldmap_chart.title = 'Some countries'
worldmap_chart.add('F countries', ['fr', 'fi'])
worldmap_chart.add('M countries', ['ma', 'mc', 'md', 'me', 'mg','mk', 'ml', 'mm', 'mn', 'mo','mr', 'mt', 'mu', 'mv', 'mw','mx', 'my', 'mz'])
worldmap_chart.add('U countries', ['ua', 'ug', 'us', 'uy', 'uz'])[图片上传中...(image.png-863dc1-1609602511392-0)]#图片渲染
HTML(base_html.format(rendered_chart=worldmap_chart.render(is_unicode=True)))

常见参数设置

from pygal.style import LightSolarizedStylechart = pygal.Bar(margin_bottom=10,#图与低端距离,类似的有上下左右height=450,#style=NeonStyle,#设置绘图风格,pygal拥有23种style,#其它style可选:'BlueStyle', 'CleanStyle', 'DarkColorizedStyle', 'DarkGreenBlueStyle', 'DarkGreenStyle', 'DarkSolarizedStyle', 'DarkStyle', 'DarkenStyle', 'DefaultStyle', 'DesaturateStyle', 'LightColorizedStyle', 'LightGreenStyle', 'LightSolarizedStyle', 'LightStyle', 'LightenStyle', 'NeonStyle', 'ParametricStyleBase', 'RedBlueStyle', 'RotateStyle', 'SaturateStyle', 'SolidColorStyle', 'Style', 'TurquoiseStyle'##title设置title=u'Some points', #图标题x_title='X Axis',#x轴标题y_title='Y Axis',#y轴标题##label设置show_x_labels=True,#显示x轴标签x_label_rotation=20,#x轴标签倾斜角度x_labels = list('ABCD'),#自定义x轴标签value_formatter = lambda x: "%.2f" % x,#y轴刻度值格式化输出##图例legend设置show_legend=True,#开启图例legend_at_bottom=True,#图例放置于底部legend_at_bottom_columns=2,#图例标签显示行数legend_box_size=12,#图例前箱子大小##坐标轴axis设置include_x_axis=True,#坐标轴开启range=(0, 30),#设置y轴刻度值范围secondary_range=(10, 25),#第二坐标轴刻度范围xrange=(0,10),#x轴刻度范围##柱子上text设置print_values=True,#开启柱子上文本print_values_position='top',#文本位置style=LightSolarizedStyle(value_font_family='googlefont:Raleway',#文本字体设置value_font_size=15,#大小value_colors=('red','blue'),#颜色设置),)
#chart.x_labels = u'αβγδ'#自定义x轴刻度标签
chart.add('line 1', [5, 15, 10, 8],secondary=True,#开启第二坐标轴)
chart.add('line 2', [15, 20, 8, 11])
HTML(base_html.format(rendered_chart=chart.render(is_unicode=True)))

------- End -------

点右下角「在看」与转发

是对我们最大的支持

特别推荐下公众号「价值前瞻」,分享读书、成长和投资思考,欢迎来串门。

回复「书单」 可获取精选书单一份,包括《如何阅读 一本书》、《巴菲特之道》、《金字塔原理》、高瓴张磊的《价值》、《投资最重要的事》、《戴维斯王朝》等书籍的笔记内容或思维导图

价 值 前 瞻

做一个有远见的人

扫码关注,查看更多内容

Pygal,可导出矢量图的Python可视化利器相关推荐

  1. graphpad图片怎么导出矢量图_为何我的文章图片总是不满足杂志社要求?

    杂志社对于图片的要求往往十分严格,图片分辨率.图片大小.字体格式.颜色模式等等都会有要求,被拒了稿换一个杂志,可能又有一套新的要求,重复劳动让人苦不堪言.今天给大家分享一些SCI论文图片编辑过程中的小 ...

  2. AI绘图实战(十):制作线稿矢量图之包头巾的女人,画矢量图/生成矢量图/导出矢量图/直出svg/vector studio插件使用 | Stable Diffusion成为设计师生产力工具

    S:AI能取代设计师么? I :至少在设计行业,目前AI扮演的主要角色还是超级工具,要顶替?除非甲方对设计效果无所畏惧~~ 预先学习: 安装及其问题解决参考:<Windows安装Stable D ...

  3. MATLAB绘制雷达图并导出矢量图到Visio编辑(论文用图)

    MATLAB绘制雷达图并导出矢量图到Visio编辑(论文用图) 前言: matlab绘制雷达图   雷达图(Radar Chart)又被叫做蜘蛛网图(Spider Chart),适用于显示三个或更多的 ...

  4. ps 导出矢量图为svg,并上传iconfont

    ps 导出矢量图为svg, 并上传iconfont ps 矢量图形 设置为填充 关闭描边 合并的图形要合并图形组件 然后到出为svg

  5. 用Powerpoint (PPT)制作并导出矢量图、高分辨率图

    论文写作时经常需要导入矢量图,正规军都是用AI或者Inkscape作图,但是PPT更加适合小白用户,或者一些简单的构图需求使用PPT更加便捷,而且不得不承认PPT的某些功能是真的香,例如:简单的对齐. ...

  6. 推荐一个开源免费的绘图软件 Draw.io 可导出矢量图

    问题描述 关于绘图,微软的 Visio 是一个不错的选择,但是不支持 mac 下使用,不支持 linux 桌面系统,而且是一个收费的软件. 推荐一个免费的软件,官网地址为 draw.io,先不急着下载 ...

  7. MATLAB导出矢量图结合Visio或Adobe illustrator处理图片

    来源 使用matlab完成绘图后,希望直接导出矢量图供写作,而不是PNG等位图. 有些论文对图的数量还有限制,有时需要将多个图进行合并.虽然可以直接使用matlab,latex等进行合并,但感觉这两种 ...

  8. 16 个动态图!一款好用到爆的 Python 可视化利器

    一般提及数据可视化,会Python的读者朋友可能第一时间想到的就是matplotlib模块或者是seaborn模块,而谈及绘制动态图表,大家想到的比较多的是Plotly或者是Pyecharts. 今天 ...

  9. 16 个动态图:一款好用到爆的 Python 可视化利器

    一般提及数据可视化,会Python的读者朋友可能第一时间想到的就是matplotlib模块或者是seaborn模块,而谈及绘制动态图表,大家想到的比较多的是Plotly或者是Pyecharts. 今天 ...

最新文章

  1. 明日发布组队学习计划!
  2. 使用Facebook方法处理复杂问题
  3. 【Python】Python之函数讲解
  4. 以色列:新发明大幅提高太阳能发电效率
  5. hibernate 第二天
  6. jsp el 表达式_JSP表达式语言– JSP EL示例教程
  7. Learn Python the hard way, ex40 字典,可爱的字典
  8. 普中科技51单片机——keil的介绍和PZ-ISP无法烧录问题
  9. VC++程序设计与应用--MFC应用程序概述
  10. AdBlock Plus 大幅飙升 Firefox 内存开销
  11. linux kvm usb设备,KVM虚拟机上关于宿主机的USB设备使用问题探究
  12. 一起学爬虫(Python) — 21 蝉妈妈,嘿嘿
  13. Win10 Pro自己解决系列~~~~菇凉手动折腾~~丰衣足食
  14. 用AutoIt写网页外挂系列之 开心网的X世界网页游戏自动送免费礼物
  15. 全民投资人游戏服务器维护,欢乐园《全民仙战》2月3日14时合服公告
  16. 浅析中国汽车融资租赁行业
  17. 点云纹理映射 matlab,Spherical Texture Mapping Method for Large-scale Point Cloud Data
  18. 任天堂Switch玩舞力全开unlimited曲目卡顿问题解决思路
  19. 家轿进化史|谁说家用与运动,不可兼得?
  20. 【黑马Python】linux操作命令(2)

热门文章

  1. Erlang数据类型的表示和实现(5)——binary
  2. 机器学习系统设计(1)——第一个机器学习应用
  3. anaconda :An unexpected error has occurred. Conda has prepared the above report
  4. [转载]设置Chrome忽略网站证书错误
  5. 年终奖8个月起,你肯定不知道蚂蚁金服有个闷声发大财的部门
  6. 纯CSS3做3D动画魔方
  7. Cadence Allegro热风焊盘的制作图文教程及视频演示
  8. Docker学习篇——使用Docker部署账单微服务项目
  9. Android 源码修改,使第三方应用可以直接使用su命令
  10. XPath入门 Selenium使用Xpath定位