前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >绘制图表(2):再次实现

绘制图表(2):再次实现

作者头像
不可言诉的深渊
发布2019-07-26 16:29:53
6650
发布2019-07-26 16:29:53
举报

绘制图表(1):初次实现

5.再次实现

通过编写这个原型,我们学到了什么呢?我们学到了使用ReportLab进行绘图的基本知识,还知道了如何提供数据,以便使用提取的数据轻松地绘制图表。然而,这个程序存在一些缺陷。为将折线放在正确的位置,我对值和时间戳作了权宜性修改。另外,这个程序并没有从任何地方获取数据,换而言之,它从程序本身包含的列表中获取数据,而不是从外部来源读取数据。

这个项目的再次实现在规模和复杂程度上都不比初次实现大太多,只是做了增量改进:使用更合适的ReportLab功能,并从网上获取数据。

5.1.获取数据

要从网上获取文件,可使用标准模块urllib。这个模块中的函数urlopen很像open,但将URL(而不是文件名)作为参数。打开文件并读取其内容后,需要将不需要的内容剔除。这里使用的文件包含空行(只有空白的行),还包含以特殊字符(#和:)打头的行。程序应该忽略这些行。

假设URL存储在变量URL中,而变量COMMENT_CHARS包含字符串'#:',就可以像下面这样获得一个包含内容行的列表(就像原来的程序那样):

上述代码将导致列表data包含所有列,可我们对辐射流量的数据不感兴趣。提取需要的列时,我们把这些列剔除掉(就像原来的程序那样)。


注意 如果你使用的是自己的数据源(抑或太阳黑子文件数据格式发生变化),就需要相应的修改上述代码。


5.2.使用LinePlot类

如果说获取数据简单的出人意料,那么绘制漂亮的折线图也不难。在这种情况下,最好浏览一下文档(这里是ReportLab文档),看看是否能够完成所面临任务的现成功能,让你无需自己去实现。所幸确实有这样的功能:模块reportlab.graphics.charts.lineplots中的LinePlot类。当然,我们最初就应该查找这样的类,但快速设计原型时,秉承的理念是手头有什么就用什么,并看看能使用它们做什么。然而,现在该更进一步了。

你在不指定任何参数的情况下实例化LinePlot,再设置其属性,然后将其添加到Drawing对象中。需要设置的主要属性包括x、y、height、width和data。前4个属性的含义不言自明,而data是一个由点列表组成的列表,其中每个点列表都是一个元组列表,类似于创建PolyLine时使用的列表。

另外,我们还将设置每条折线的颜色。最终的代码和生成的图形如图所示。(当然,使用不同的输入数据时,生成的图形将截然不同。)

6.进一步探索

Python图形和绘图包有很多。除ReportLab外,另一个不错的选择是本章前面提到的PYX。无论使用ReportLab、PYX还是其他绘图包,都可尝试将自动生成的图形嵌入文档(甚至生成文档的各个部分)。要给文本添加标签,可参考自动添加标签(2):再次实现这篇文章。如果要创建PDF文件,可使用ReportLab中的Platypus(也可使用LATEX等排版系统来集成PDF图形)。如果要创建网页,Python也提供了很多创建像素映射图形。(如GIF或PNG)的方法——在网上搜索这个主题就能找到相关的资料。

如果你的主要目标是根据数据绘制图表(就像这个项目一样),那么除ReportLab和PYX外,还可以选择使用其他的包,其中很不错的一个是Matplotlib/pylab(http://matplotlib.org),但还有很多其他类似的包。

项目还是在群文件,欢迎大家加群下载。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-07-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python机器学习算法说书人 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档