在Python中制作漂亮的图表和图形

130

有哪些可用的Python库可以创建漂亮的图表和图形?


22
我不确定为什么这个被关闭了。它没有引起争论或意见,而且有一组明确的答案:Python中只有少数几个绘图库。 - Alex B
7
为什么这个被关闭了?这是一个有用的问题。无论如何,我的建议是运行 pip search plot 并查看结果。我通过这样做发现了 pygal,它看起来很棒。 - Mark E. Haase
值得注意的是,这个问题在谷歌搜索“Python 绘图”时排名靠前,因此重复回答一下也是有充分理由的。 - George Lund
这个问题很有用,不应该被关闭。其他选项包括bokehPyX - Lee
15个回答

50

我是支持CairoPlot的人,很自豪它能够出现在这里。 当然,matplotlib也很棒,但我认为CairoPlot更好看。 所以,在演示和网站上使用它是一个非常好的选择。

今天我发布了1.1版本。如果感兴趣,请在CairoPlot v1.1上查看。

编辑:经过漫长而寒冷的冬季,CairoPlot再次被开发。请在GitHub上查看新版本。


2
看起来不错,我想试一下。有计划为Python 2.6制作Windows安装程序吗? - monkut
没有问题,我同意支持。感谢夸奖 :D - Rodrigo
我为您添加了一个链接http://stackoverflow.com/questions/359727#520049,如果您想要downvote的话。 - VonC
1
Cairoplot对于大量数据的处理效果并不好(如果我说错了,请纠正我)。您无法添加标签到轴上以总结hlabels或vlabels。我无法看到任何绘制多条线条或控制使用的颜色的方法。我可以尝试修改脚本...但我决定转向matplotlib... - Jonathan Holloway
大家应该忽略Jon的评论,标记轴和定义使用的颜色非常容易...请查看tests.py以获取示例。无论如何,感谢提供这个不错的库。 - Daniel Magnusson
gantt_chart()对于这个数据集不起作用,有什么想法吗?tg_p = [(0, 12), (0, 5), (0, 13)] tg_v = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14'] tg_h = ['测试', '测试2', '测试3'] tg_c = [(1.0, 0.0, 0.0), (1.0, 0.7, 0.0), (0.0, 1.0, 0.0)] CairoPlot.gantt_chart('gantt-123', tg_p,600,300,tg_h,tg_v,tg_c) - m1k3y3

38

对于交互式工作,Matplotlib 是成熟的标准。它提供了一种面向对象的 API 和类似 Matlab 的交互式 API。

Chaco 是来自 Enthought 公司的更现代的绘图库。它使用 Enthought 的 Kiva 矢量绘图库,目前仅与 Wx 和 Qt 一起使用 OpenGL(Matplotlib 有适用于 Tk、Qt、Wx、Cocoa 和许多图像类型(如 PDF、EPS、PNG 等)的后端)。 Chaco 的主要优点是相对于 Matplotlib 的速度以及其与 Enthought 的 Traits API 集成用于交互应用程序。


2
我同意,就所有的API而言,matplotlib似乎确实是最成熟、功能最丰富(而且仍然得到支持并在进一步开发中)。只需转到其“画廊”即可查看各种示例(带有相应的源代码):http://matplotlib.sourceforge.net/gallery.html。但我要说的是,它的API是复杂的——方法名称让我疯狂 :) 谈到“复杂”和简单的示例,这篇博客文章对我开始使用matplotlib帮助很大:http://shreevatsa.wordpress.com/2010/03/07/matplotlib-tutorial/。 - Tim
抱歉,我必须补充说明,matplotlib不仅是交互式的 - 您实际上可以将绘图/图表保存到文件中。例如PNG,PDF或SVG。 - Tim

18

你还可以使用pygooglechart,它使用了Google Chart API。这并不是你总想要使用的东西,但如果你想要一些好的,简单的图表,而且总是在线的,特别是如果你正在浏览器中显示,那么这是一个不错的选择。


7
警告:Google 允许您创建的图表大小相当有限(宽度*高度<=300,000像素)。此外,使用 Google Charts(而不是 Python API)处理数据量稍大的数据集时可能会出现问题。除此之外,这些图表非常好用。 - Pat Notz
1
Google Image Charts仍然可用,但已被弃用。有关更多信息,请访问https://developers.google.com/chart/image/?hl=nl。 - ndequeker

15

您没有提及需要的输出格式,但reportlab在创建pdf和位图(例如png)格式的图表方面表现很好。

这里是一个简单的柱状图示例,包括png和pdf格式:

from reportlab.graphics.shapes import Drawing
from reportlab.graphics.charts.barcharts import VerticalBarChart

d = Drawing(300, 200)

chart = VerticalBarChart()
chart.width = 260
chart.height = 160
chart.x = 20
chart.y = 20
chart.data = [[1,2], [3,4]]
chart.categoryAxis.categoryNames = ['foo', 'bar']
chart.valueAxis.valueMin = 0

d.add(chart)
d.save(fnRoot='test', formats=['png', 'pdf'])

替代文字 http://i40.tinypic.com/2j677tl.jpg

注意:该图片已被图像托管平台转换为jpg格式。


2
如果在上述代码中的d.save中出现“RenderPMError:无法设置字体(Times-Roman)缺少T1文件?”(就像我遇到的那样)异常
  • 解决方案是下载并提取http://www.reportlab.org/ftp/fonts/pfbfer.zip到reportlabs / fornts目录中
- Shekhar
+1 鼓励实际示例的生成。 - vmassuchetto

6

我使用了pychart,觉得它非常容易上手。

http://home.gna.org/pychart/

这是纯Python编写的,没有太多依赖。我相信matplotlib也很好用,但是我不想花费数天时间去下载和安装,我只需要一个简单的条形图!

虽然它已经几年没有更新了,但是它仍然可以正常工作!


6

2
为什么它很好?你用过它吗? - Nick
是的,我在报告/统计工具中使用了dot_line_plot()。它漂亮又简单。请查看Rodrigo关于Matplotlib和CairoPlot的顶级回答。我也使用Matplotlib。实际上,我正在使用它。 - elmarco
奇怪的人没有注意到你的回答,但目前得票最高的回答。 - pihentagy
如果提供一个最小的示例,我认为这篇文章会得到更多的赞。当链接失效时,你的回答就变得无用了。 - Martin Thoma
谢谢,这个博客已经有很多信息了。作者本人后来在这里回答了更多的细节问题。 - elmarco

4
如果您喜欢使用 gnuplot 进行绘图,那么您应该考虑使用 Gnuplot.py。它为 gnuplot 提供了面向对象的接口,并且还允许您直接向 gnuplot 传递命令。不幸的是,它已经不再得到积极开发。

4

你有没有研究过Python的ChartDirector

我不能对这个发表评论,但我用过ChartDirector for PHP,它非常不错。


ChartDirector 在 Python 中表现良好。我经常使用它来生成多行图表。 - pwdyson

4

NodeBox用于原始图形的创建非常棒。


3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接