本次是用python创建图形,具体是利用图形创建PDF文件,使得文件中读数可视化。首先安装reportlab包,然后import reportlab检测是否安装成功。下面进入正题
from urllib2 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://www.swpc.noaa.gov/ftpdir/weekly/Predict.txt'
COMMENT_CHARS = '#:'
drawing = Drawing(400, 200)
data = []
for line in urlopen(URL, ‘100’).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]
time = [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(time, pred), zip(time, high), zip(time, 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, 'Sunsplots', fontSize = 14, fillColor = colors.red))
renderPDF.drawToFile(drawing, 'report2.pdf', 'Sunspots')
其实这个程序本身是没有什么难度的,程序一目了然。所以就不说什么了,我想说说我的收获:
在我运行程序的时候发现运行了好久也没有生成PDF文档,所以我想可能是因为程序卡在了某个部分。据我分析我认为上面的程序可以分为三部分,一是获取数据(data[])
二是数据处理(pred,high,low,time),三是设置LinePlot类。所以我想只能是在获取数据方面花费了较多时间,所以我就如下程序检测了一下果然是我想的这样
检测程序如下:
from urllib2 import urlopen
URL = 'http://www.swpc.noaa.gov/ftpdir/weekly/Predict.txt'
w = urlopen(URL)
我发现urllib2相对与urllib在使用urlopen方面要好。因为urllib2.urlopen里面有一个timeout可以设置,因为当我用检测程序时候好几次都是强制关闭的终端要是设置了
timeout那么就好多了。所以我用了urllib2