码迷,mamicode.com
首页 > 编程语言 > 详细

python基础教程笔记-项目2-画幅好画-Day1

时间:2015-02-08 12:57:05      阅读:179      评论:0      收藏:0      [点我收藏+]

标签:python   reportlab   基础教程笔记   绘画   sunspot   

今天开始看项目二:画幅好画

项目中会用到图形生成包ReportLab,因此首先装好这个包:easy_install reportlab

从书中可以了解到,这个包主要用于作图。

比如说写字、画线等。执行代码:

from reportlab.lib import colors
from reportlab.graphics.shapes import Drawing,String,PolyLine
from reportlab.graphics import renderPDF

d = Drawing(100,100)

d.add(String(50,50,'Hello world',textAnchor = 'middle'))
d.add(PolyLine([(0,0),(10,0),(10,10),(0,10)],strokeColor=colors.blue))

renderPDF.drawToFile(d,'h.pdf','A TEST')

在当前目录文件下可获得一个名为hpdf文件,文件内容为:

技术分享

从代码中可看出d为一个100*100的画布,通过在画布添加想要绘制的变量,最后执行renderPDF.drawToFile函数将d显示为pdf文件。

最后书上绘制了一个初步的sunspot线。代码如下:

from reportlab.lib import colors
from reportlab.graphics.shapes import Drawing,String,PolyLine
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 = [((row[0] + row[1]/12.0) - 2007)*200 - 110 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',fontSize=18,fillColor=colors.red))

renderPDF.drawToFile(drawing,'hello.pdf','A Simple PDF file')

执行效果:

技术分享

这段代码中一开始有两个地方没看懂:

1.zip函数

2.pred,highlow的赋值

先看下赋值。pred = [row[2]-40 for row in data],感觉就是说这样就能生成一个list

代码试下:

l = [
(1,2),
(3,4),
(5,6),
(7,8)]
b = [r[1] for r in l]
print b

也就是说把l中每个元素rr[1]加入b中。执行结果:

技术分享

结果显示差不多就是这么个意思

 

接下来看zip函数

网上查到zip函数功能为接受任意多个(包括0个和1个)序列作为参数,返回一个tuple列表。

直接代码测试下:

技术分享

也就是说zipN个参数的第12,。。。r个元素分别组成了r个参数为N1N2,。。。Nntuple

至于times为什么要赋值为 [((row[0] + row[1]/12.0) - 2007)*200 - 110 for row in data],是因为要把图放在文件中合适的位置上。

试了下把times赋值为times = [((row[0] + row[1]/12.0) - 2007) for row in data],效果是:


技术分享

今天就到这里


python基础教程笔记-项目2-画幅好画-Day1

标签:python   reportlab   基础教程笔记   绘画   sunspot   

原文地址:http://blog.csdn.net/miaoyunzexiaobao/article/details/43635845

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!