在Python 3.x中绘图
在Python 2.6中,我用matplotlib这个工具做了一些简单的图表。不过,它和Python 3.1不兼容。
有没有一些其他的模块可以做到同样的事情,而且使用起来不会太复杂呢?
9 个回答
3
我写了一个小例子,使用的是Python 3,并且用到了谷歌图表API(这是Duncan建议的,我在看到这篇帖子后写的这个解决方案)。
这个方法并不是最理想的,因为它依赖于一个第三方的工具,而这个工具可能随时会出现不兼容的情况。不过,生成的图表很好看,而且在Python代码中没有额外的依赖。对于那些不是特别重要的代码,这个方法是值得考虑的。
你可以在这里找到/下载这个例子。下面是它从一个.xml文件中的数据生成的图表:
# build the query with template parameters
query ="http://chart.apis.google.com/chart?chxl=0:__X_LABELS__&chxp=__X_LABELS_POS__&chxr=0,__MIN_TIME__,__MAX_TIME__|1,__MIN_WEIGHT__,__MAX_WEIGHT__&chxs=0,676767,11.5,0,lt,676767|1,676767,11.5,0,lt,676767&chxt=x,y&chs=800x300&cht=lc&chco=3072F3&chds=__MIN_WEIGHT__,__MAX_WEIGHT__&chd=t:__COMMASEP_WEIGHT__&chdl=Weight&chdlp=b&chls=2,4,1&chma=5,5,5,25&chtt=Your+Weight+Timeline"
[...]
# relace template with data
query = query.replace('__X_LABELS__', strXLabels)
query = query.replace('__X_LABELS_POS__', strXLabelsPos)
query = query.replace('__MIN_TIME__', str(min(lst_dateEpoch)))
query = query.replace('__MAX_TIME__', str(max(lst_dateEpoch)))
[...]
# use 'urllib.request' to download the data & write to file
sock = urllib.request.urlopen(query)
image_bytes = sock.read()
sock.close()
fh = open('Weight_GoogleGraphApi.png', 'wb')
fh.write(image_bytes)
fh.close()
11
现在已经发布了一个支持Python 3的稳定版本:官方公告。
17
你说想要创建一些简单的图表,但并没有具体说明这些图表有多简单或者是什么类型的图表。如果它们不是太复杂,你可以考虑使用Google图表API。
例如:
使用这个API有一些好处:你只需要构建一个描述所需图表的URL,这样在Python 3.x中使用就不会有问题。当然也有一些缺点:生成图表时需要连接互联网,而且你可能无法使用在matplotlib中使用的图表样式。
如果你不想直接构建这些URL,至少有一个Python封装库可以用来处理图表API。它不能直接在Python 3.x上运行,但通过2to3工具转换后似乎可以成功使用。