Python项目之画幅好画

来源:互联网 发布:c语言中交换位置 编辑:程序博客网 时间:2024/04/30 14:09

这个项目是《Python基础教程》后面的项目之一。这个项目主要是用来学习如何在Python中创建图形,具体说就是利用图形创建一个PDF文件,使从文本中读取的数据可视化。要想实现,就得先下载图像生成包,可以在http://www.reportlab.org下载安装包,然后安装在Python所在路径中即可使用。

初步版本:

实现了基本内容。

实现代码:

from reportlab.lib import colorsfrom reportlab.graphics.shapes import *from reportlab.graphics import renderPDFdata = [  #    Year   Month   Predicted   High    Low      (2007, 8, 113.2, 114.2, 112.2),      (2007, 9, 112.8, 115.8, 109.8),      (2007, 10, 111.0, 116.0, 106.0),      (2007, 11, 109.8, 116.8, 102.8),      (2007, 12, 107.3, 115.3, 99.3),      (2008, 1, 105.2, 114.2, 96.2),      (2008, 2, 104.1, 114.1, 94.1),      (2008, 3, 99.9, 110.9, 88.9),      (2008, 4, 94.8, 106.8, 82.8),      (2008, 5, 91.2, 104.2, 78.2),       ] drawing = Drawing(200, 150)pred = [row[2]-40 for row in data]high = [row[3]-40 for row in data]low = [row[4]-40 for row in data]times = [200*((row[0] + row[1]/12.0) - 2007)-100 for row in data]drawing.add(PolyLine(zip(times, pred), strokeColor = colors.blue))  drawing.add(PolyLine(zip(times, high), strokeColor = colors.red))  drawing.add(PolyLine(zip(times, low), strokeColor = colors.green))  drawing.add(String(65, 115, 'Sunspots', fonSize = 18, fillColor = colors.red))  renderPDF.drawToFile(drawing, 'report1.pdf', 'Sunspots')

运行结果:

最终版本:

使用了标准模板urllib可以从网上获取文件,以及使用了LinePlot类以使当发生变化时,为了让内容处于正确的位置不必做专门的修改。

实现代码:

from urllib import urlopenfrom reportlab.graphics.shapes import *from reportlab.graphics.charts.lineplots import LinePlotfrom reportlab.graphics.charts.textlabels import Labelfrom reportlab.graphics import renderPDFURL = 'http://services.swpc.noaa.gov/text/predicted-sunspot-radio-flux.txt'COMMENT_CHARS = '#:'drawing = Drawing(400, 200)data = []for line in urlopen(URL).readlines():if not line.isspace() and not line[0] in COMMENT_CHARS:data.append([float(n) for n in line.split()])pred = [row[2] for row in data]high = [row[3] for row in data]low = [row[4] for row in data]times = [row[0] + row[1]/12.0 for row in data]lp = LinePlot()lp.x = 50lp.y = 50lp.height = 125lp.width = 300lp.data = [zip(times, pred),zip(times,high),zip(times, low)]lp.lines[0].strokeColor = colors.bluelp.lines[1].strokeColor = colors.redlp.lines[2].strokeColor = colors.greendrawing.add(lp)drawing.add(String(250,150, 'Sunspots',fontSize=14,fillColor=colors.red))renderPDF.drawToFile(drawing, 'report2.pdf','Sunspots')


运行结果:


Python真是一门功能强大的语言,继续探索它更多的奥秘吧。

1 0
原创粉丝点击