画幅好画

画幅好画这个项目来源于《Python基础编程》后面的第二个项目,介绍如何在Python中创建图形创建一个pdf文件,是从文本文件中读取的数据可视化。

重要工具的介绍:

在这个项目中最重要的工具是图形生成包ReportLab 包,软件可以从http//www.reportlab.org/downloads.html下载。

初次实现版本:

初次实现先构造一个数据库,放在列表data里面。然后依次加三条曲线表示prelowhigh的分布情况,横轴均为时间,整个项目都比较容易了解。熟悉一下与研究好了。

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),
    #Add more data here
    ]
 
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)-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', fonSize = 18, fillColor = colors.red))
 
renderPDF.drawToFile(drawing, 'report1.pdf','Sunspots')

 

实现效果生成为一个pdf文件:


再次实现:

相较于初次实现,主要有两个方面的改进。

其一是数据的来源,原本用文档编辑数据,现在使用标准模块urllibInternet上获取文件。改模块中的urlopen函数和open函数含香,但是它是用一个url而不是文件名作为参数。并对数据进行初步处理,要忽略一些没用的信息,本项目主要是去除含有字符串’#’的行。

其二是画出漂亮的折线图。Reportlab内已经有这样的特性。Reportlab.graphics.charts.lineplots模块中的LinePlot类。LinePlot类的实例化不需要任何参数,然后将它添加到Drawing前设置它的几个特性。Data是表示点的坐标列表。

 

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),
    #Add more data here
    ]
 
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)-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', fonSize = 18, fillColor = colors.red))
 
renderPDF.drawToFile(drawing, 'report1.pdf','Sunspots')

实现效果图:

 

 

Ps:数据来源:http://www.swpc.noaa.gov/ftpdir/weekly/Predict.txt

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值