Python项目之画幅好画

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

初步版本:

实现了基本内容。

实现代码:

from reportlab.lib import colors
from reportlab.graphics.shapes import *
from reportlab.graphics import renderPDF

data = [  
#    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 urlopen
from reportlab.graphics.shapes import *
from reportlab.graphics.charts.lineplots import LinePlot
from reportlab.graphics.charts.textlabels import Label
from reportlab.graphics import renderPDF

URL = '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 = 50
lp.y = 50
lp.height = 125
lp.width = 300
lp.data = [zip(times, pred),zip(times,high),zip(times, low)]
lp.lines[0].strokeColor = colors.blue
lp.lines[1].strokeColor = colors.red
lp.lines[2].strokeColor = colors.green

drawing.add(lp)
drawing.add(String(250,150, 'Sunspots',fontSize=14,fillColor=colors.red))

renderPDF.drawToFile(drawing, 'report2.pdf','Sunspots')


运行结果:


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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值