1. 程式人生 > >使用pycha快速繪製辦公常用圖(餅圖、垂直直方圖、水平直方圖、散點圖等七種圖形)

使用pycha快速繪製辦公常用圖(餅圖、垂直直方圖、水平直方圖、散點圖等七種圖形)

cairo說明:

在資訊領域中,cairo 是一個讓用於提供向量圖形繪圖的免費庫,cairo 提供在多個背景下做 2-D 的繪圖,高階的更可以使用硬體加速功能。

雖然 cairo 是使用C語言撰寫的,但是當使用 cairo 時,可以用許多其他種語言來使用,包括有C++C#JavaPythonPerlRubySchemeSmalltalk 以及許多種語言,cairo 在 GNU LGPL 與 Mozilla Public License (MPL) 兩個認證下發布。


今天晚上學習了下使用pycha模組來製作各種辦公用圖的方法,非常簡單,本文使用其繪製了7種圖表。

一、程式碼:

[python] view plaincopyprint?
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. import cairo   
  4. import pycha.pie  
  5. import pycha.bar  
  6. import pycha.scatter  
  7. import pycha.stackedbar  
  8. import pycha.line  
  9. #設定畫布
  10. def set_charvalue():  
  11.     width,height=600,600
  12.     surface=cairo.ImageSurface(cairo.FORMAT_ARGB32,width,height)   
  13.     return surface  
  14. #畫餅圖
  15. def draw_pie(surface, options, dataSet):  
  16.     chart=pycha.pie.PieChart(surface,options)   
  17.     chart.addDataset(dataSet)   
  18.     chart.render()   
  19.     surface.write_to_png('d:\\Pie.png')   
  20. #垂直直方圖
  21. def draw_vertical_bar(surface, options, dataSet):  
  22.     chart=pycha.bar.VerticalBarChart(surface,options)   
  23.     chart.addDataset(dataSet)   
  24.     chart.render()   
  25.     surface.write_to_png('d:\\vertical_bar.png')     
  26. #垂直水平直方圖    
  27. def draw_horizontal_bar(surface, options, dataSet):  
  28.     chart = pycha.bar.HorizontalBarChart(surface,options)   
  29.     chart.addDataset(dataSet)   
  30.     chart.render()   
  31.     surface.write_to_png('d:\\horizontal_bar.png')     
  32. #線圖    
  33. def draw_line(surface, options, dataSet):  
  34.     chart = pycha.line.LineChart(surface,options)   
  35.     chart.addDataset(dataSet)   
  36.     chart.render()   
  37.     surface.write_to_png('d:\\line.png')        
  38. #點圖    
  39. def draw_scatterplot(surface, options, dataSet):  
  40.     chart = pycha.scatter.ScatterplotChart(surface,options)   
  41.     chart.addDataset(dataSet)   
  42.     chart.render()   
  43.     surface.write_to_png('d:\\scatterplotChart.png')           
  44. #垂直塊圖     
  45. def draw_stackedverticalbarChar(surface, options, dataSet):  
  46.     chart = pycha.stackedbar.StackedVerticalBarChart(surface,options)   
  47.     chart.addDataset(dataSet)   
  48.     chart.render()   
  49.     surface.write_to_png('d:\\stackedVerticalBarChart.png')        
  50. #水平塊圖
  51. def draw_stackedhorizontalbarChart(surface, options, dataSet):  
  52.     chart = pycha.stackedbar.StackedHorizontalBarChart(surface,options)   
  53.     chart.addDataset(dataSet)   
  54.     chart.render()   
  55.     surface.write_to_png('d:\\stackedhorizontalbarChart.png')      
  56. if __name__ == '__main__':  
  57.     ''''' 
  58.     Function:使用pycha畫各種圖表 
  59.     Input:NONE 
  60.     Output: NONE 
  61.     author: socrates 
  62.     blog:http://blog.csdn.net/dyx1024 
  63.     date:2012-02-28 
  64.     '''
  65.     #資料來源
  66.     dataSet=(   
  67.              ('iphone',((0,1),(1,3),(2,2.5))),   
  68.              ('htc',((0,2),(1,4),(2,3))),   
  69.              ('hw',((0,5),(1,1,),(2,0.5))),   
  70.              ('zte',((0,3),(1,2,),(2,1.5))),   
  71.             )   
  72.     #影象屬性定義
  73.     options={   
  74.                 'legend':{'hide':False},   
  75.                 'title':'手機銷售量分佈圖(by dyx1024)',  
  76.                 'titleColor':'#0000ff',  
  77.                 'titleFont':'字型',  
  78.                 'background':{'chartColor''#ffffff'},   
  79.                 'axis':{'labelColor':'#ff0000'},  
  80.             }       
  81.     surface = set_charvalue()  
  82.     #根據需要呼叫不同函式畫不同形狀的圖
  83.     #draw_pie(surface, options, dataSet)
  84.     #draw_vertical_bar(surface, options, dataSet)
  85.     #draw_horizontal_bar(surface, options, dataSet)
  86.     #draw_scatterplot(surface, options, dataSet)
  87.     #draw_stackedverticalbarChar(surface, options, dataSet)
  88.     #draw_stackedhorizontalbarChart(surface, options, dataSet)
  89.     draw_line(surface, options, dataSet)