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

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

项目中会用到图形生成包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],效果是:



今天就到这里


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值