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')

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

从代码中可看出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,high和low的赋值

先看下赋值。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中每个元素r的r[1]加入b中。执行结果:

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

接下来看zip函数

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

直接代码测试下:

也就是说zip将N个参数的第1,2,。。。r个元素分别组成了r个参数为N1,N2,。。。Nn的tuple。

至于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],效果是:

今天就到这里

时间: 2024-10-10 06:05:07

python基础教程笔记-项目2-画幅好画-Day1的相关文章

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

本项目剩下部分主要使用量urllib和LinePlot. 什么是urllib? urllib模块提供的上层接口,使我们可以像读取本地文件一样读取www和ftp上的数据. 看代码: import urllib print urllib.urlopen('http://www.baidu.com').read() 执行效果: 重点需要注意的是urlopen函数: 关于urlopen的一些使用实例可参考链接: http://blog.csdn.net/leer168/article/details/8

python基础教程笔记-项目1-即时标记-Day3

昨天实现了简单的txt转html,今天更深入一步. 主要了解下带星号的参数.getattr函数和callable函数 先看Handler类: class Handler: def callback(self, prefix, name, *args): method = getattr(self, prefix+name, None) if callable(method): return method(*args) def start(self, name): self.callback('s

python基础教程笔记-项目1-即时标记-Day2

昨天主要了解了下生成器,用文档测下lines: def lines(file): for line in file: yield line yield '\n' for i in lines(sys.stdin): if i: print i print '---' 测试文档test_input.txt: hello how are you how do you do fine 执行: 输出结果test_output.txt: hello --- --- how are you --- how

python基础教程笔记-项目1-即时标记-Day4

今天主要看下re.sub函数和Handler类的sub函数 先看下re.sub函数 re.sub共有5个参数,不过一般写前三个就好了,即pattern,repl和string pattern表示正则中的模式字符串,repl可以是字符串,也可以是函数.string为要进行替换的字符串 先看一段代码: import re def Num2A(match): return 'A' a = re.sub(r'(\d+)', Num2A, 'he123he') print a a = re.sub(r'(

python基础教程总结15——2 画幅好画

要求:从Internet上下载数据文件:  分析数据文件并提取感兴趣的部分 工具:图形生成包(ReportLab,PYX等) 数据:太阳黑子和射电辐射流量(http://services.swpc.noaa.gov/text/predicted-sunspot-radio-flux.txt) 1. 简单实现 1.1 用ReportLab画图 将字符串“Hello world”画在一个100*100像素的大小的PDF图形中间:创建一个给定大小的图纸(drawing):然后创建带有某些属性的图形元素

Python基础教程__项目(公告板)

由于最近学习Python,从最基础的Python基础教程学起,其中最后的十个项目还是很不错的.个人认为.本人新手,如有错误,还请指教. 书上用的是PostgreSQL,这里用的是MySQL.由于这是一个CGI项目.所以事先需要准备一个可以运行CGI脚本的试验环境. 本次用的是Apache运行cgi.配置网上很多. 其次需要创建一个数据表: CREATE TABLE `messages` (   `id` int(11) NOT NULL AUTO_INCREMENT,   `subject` v

python基础教程笔记——画幅好画(详解)

今天写一下基础教程里面的第二个项目,主要使用python来做一个pdf的图,比较简单. 首先我们需要安装用到的模块pip install reportlab即可. 书上是用urlopen从往上下了一个txt文件,然后打开处理一下得到数据,因为我从这个url路径没有获取到数据,所以直接写了一点数据在程序里. urlopen比较简单,以后写爬虫也会经常用到,所以这里就不讲了,只单独讲讲reportlab模块. #encoding:utf8 from reportlab.graphics.shapes

python 基础教程 笔记 一

第一章 python 基础知识 1.1 数字和数学表达式 1.2 python 2.x 和python 3.x print的区别 1.3 python 2.x 和 python 3.x input 的区别 1.4 数学函数 1.5 input 和 raw_input 区别 第二章 列表和元组 第三章 使用字符串 1.1 数字和表达式 Python 默认的除法:整数/整数,无论是否整除都得到整数,不整除的截取小时部分 1 / 2 0 如果想要Python 执行普通的除法,可以之用浮点数来实现也可以

python基础教程笔记 第1单元 && 第2单元

1.http://docs.python.org/dev/3.0/whatsnew/3.0.htmlpython-announce-listpython-help2.交互式编译器3.非整数除法 .1.>>> from__future__import divisionSyntaxError: invalid syntax.2.Linux -Qnew4.整数除法 // 就算是浮点数也会执行整除取余 2.75%0.5幂运算符 ** (pow(base,times[mod]))幂运算符比取反等级