python基礎教程筆記-項目2-畫幅好畫-Day1,python-day1

來源:互聯網
上載者:User

python基礎教程筆記-項目2-畫幅好畫-Day1,python-day1

今天開始看項目二:畫幅好畫

項目中會用到圖形產生包ReportLab,因此首先裝好這個包:easy_install reportlab

從書中可以瞭解到,這個包主要用於作圖。

比如說寫字、畫線等。執行代碼:

from reportlab.lib import colorsfrom reportlab.graphics.shapes import Drawing,String,PolyLinefrom reportlab.graphics import renderPDFd = 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 colorsfrom reportlab.graphics.shapes import Drawing,String,PolyLinefrom reportlab.graphics import renderPDFdata = [#    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],效果是:



今天就到這裡


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.