你可以安裝python的第三方應用?chartdirector,?如下面用python代碼生成多個曲線的png圖形,并可以自定義layout.
因為努力和真誠,有更多的客戶和我們聚集在一起,為了共同目標,成都創(chuàng)新互聯(lián)在工作上密切配合,從創(chuàng)業(yè)型企業(yè)到如今不斷成長,要感謝客戶對我們的高要求,讓我們敢于面對挑戰(zhàn),才有今天的進步與發(fā)展。從網(wǎng)站到小程序制作,軟件開發(fā),app軟件開發(fā),十年企業(yè)網(wǎng)站建設(shè)服務經(jīng)驗,為企業(yè)提供網(wǎng)站設(shè)計,成都網(wǎng)站托管一條龍服務.為企業(yè)提供成都全網(wǎng)營銷,按需策劃設(shè)計,原創(chuàng)設(shè)計,十年品質(zhì),值得您的信賴.
#!/usr/bin/python
from pychartdir import *
# The data for the line chart
data0 = [42, 49, 33, 38, 51, 46, 29, 41, 44, 57, 59, 52, 37, 34, 51, 56, 56, 60, 70,
76, 63, 67, 75, 64, 51]
data1 = [50, 55, 47, 34, 42, 49, 63, 62, 73, 59, 56, 50, 64, 60, 67, 67, 58, 59, 73,
77, 84, 82, 80, 84, 98]
data2 = [36, 28, 25, 33, 38, 20, 22, 30, 25, 33, 30, 24, 28, 15, 21, 26, 46, 42, 48,
45, 43, 52, 64, 60, 70]
# The labels for the line chart
labels = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13",
"14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24"]
# Create an XYChart object of size 600 x 300 pixels, with a light blue (EEEEFF)
# background, black border, 1 pxiel 3D border effect and rounded corners
c = XYChart(600, 300, 0xeeeeff, 0x000000, 1)
c.setRoundedFrame()
# Set the plotarea at (55, 58) and of size 520 x 195 pixels, with white background.
# Turn on both horizontal and vertical grid lines with light grey color (0xcccccc)
c.setPlotArea(55, 58, 520, 195, 0xffffff, -1, -1, 0xcccccc, 0xcccccc)
# Add a legend box at (50, 30) (top of the chart) with horizontal layout. Use 9 pts
# Arial Bold font. Set the background and border color to Transparent.
c.addLegend(50, 30, 0, "arialbd.ttf", 9).setBackground(Transparent)
# Add a title box to the chart using 15 pts Times Bold Italic font, on a light blue
# (CCCCFF) background with glass effect. white (0xffffff) on a dark red (0x800000)
# background, with a 1 pixel 3D border.
c.addTitle("Application Server Throughput", "timesbi.ttf", 15).setBackground(
0xccccff, 0x000000, glassEffect())
# Add a title to the y axis
c.yAxis().setTitle("MBytes per hour")
# Set the labels on the x axis.
c.xAxis().setLabels(labels)
# Display 1 out of 3 labels on the x-axis.
c.xAxis().setLabelStep(3)
# Add a title to the x axis
c.xAxis().setTitle("Jun 12, 2006")
# Add a line layer to the chart
layer = c.addLineLayer2()
# Set the default line width to 2 pixels
layer.setLineWidth(2)
# Add the three data sets to the line layer. For demo purpose, we use a dash line
# color for the last line
layer.addDataSet(data0, 0xff0000, "Server #1")
layer.addDataSet(data1, 0x008800, "Server #2")
layer.addDataSet(data2, c.dashLineColor(0x3333ff, DashLine), "Server #3")
# Output the chart
c.makeChart("multiline.png")
python matplotlib模塊 如何畫兩張圖出來的方法:
代碼如下所示:
import numpy as np
import matplotlib.pyplot as plt
#創(chuàng)建自變量數(shù)組
x= np.linspace(0,2*np.pi,500)
#創(chuàng)建函數(shù)值數(shù)組
y1 = np.sin(x)
y2 = np.cos(x)
y3 = np.sin(x*x)
#創(chuàng)建圖形
plt.figure(1)
'''
意思是在一個2行2列共4個子圖的圖中,定位第1個圖來進行操作(畫圖)。
最后面那個1表示第1個子圖。那個數(shù)字的變化來定位不同的子圖
'''
#第一行第一列圖形
ax1 = plt.subplot(2,2,1)
#第一行第二列圖形
ax2 = plt.subplot(2,2,2)
#第二行
ax3 = plt.subplot(2,1,2)
#選擇ax1
plt.sca(ax1)
#繪制紅色曲線
plt.plot(x,y1,color='red')
#限制y坐標軸范圍
plt.ylim(-1.2,1.2)
#選擇ax2
plt.sca(ax2)
#繪制藍色曲線
plt.plot(x,y2,'b--')
plt.ylim(-1.2,1.2)
#選擇ax3
plt.sca(ax3)
plt.plot(x,y3,'g--')
plt.ylim(-1.2,1.2)
plt.show()
附上效果圖。
matplotlib庫里的散點圖
例子
from?matplotlib.figure?import?Figure
fig????=?Figure()
ax????=?fig.add_axes([0.4,?0.3,?0.4,?0.5])
sca????=?ax.scatter([1,3,5],[2,1,2])
matplotlib 是python最著名的繪圖庫,它提供了一整套和matlab相似的命令API,十分適合交互式地行制圖。而且也可以方便地將它作為繪圖控件,嵌入GUI應用程序中。
它的文檔相當完備,并且Gallery頁面中有上百幅縮略圖,打開之后都有源程序。因此如果你需要繪制某種類型的圖,只需要在這個頁面中瀏覽/復制/粘貼一下,基本上都能搞定。
在Linux下比較著名的數(shù)據(jù)圖工具還有g(shù)nuplot,這個是免費的,Python有一個包可以調(diào)用gnuplot,但是語法比較不習慣,而且畫圖質(zhì)量不高。
而?Matplotlib則比較強:Matlab的語法、python語言、latex的畫圖質(zhì)量(還可以使用內(nèi)嵌的latex引擎繪制的數(shù)學公式)。
本文目錄
1.?Matplotlib.pyplot快速繪圖
2.?面向?qū)ο螽媹D
3.?Matplotlib.pylab快速繪圖
4.?在圖表中顯示中文
5.?對LaTeX數(shù)學公式的支持
6.?對數(shù)坐標軸
7.?學習資源
Matplotlib.pyplot快速繪圖
快速繪圖和面向?qū)ο蠓绞嚼L圖
matplotlib實際上是一套面向?qū)ο蟮睦L圖庫,它所繪制的圖表中的每個繪圖元素,例如線條Line2D、文字Text、刻度等在內(nèi)存中都有一個對象與之對應。
為了方便快速繪圖matplotlib通過pyplot模塊提供了一套和MATLAB類似的繪圖API,將眾多繪圖對象所構(gòu)成的復雜結(jié)構(gòu)隱藏在這套API內(nèi)部。我們只需要調(diào)用pyplot模塊所提供的函數(shù)就可以實現(xiàn)快速繪圖以及設(shè)置圖表的各種細節(jié)。pyplot模塊雖然用法簡單,但不適合在較大的應用程序中使用。
為了將面向?qū)ο蟮睦L圖庫包裝成只使用函數(shù)的調(diào)用接口,pyplot模塊的內(nèi)部保存了當前圖表以及當前子圖等信息。當前的圖表和子圖可以使用plt.gcf()和plt.gca()獲得,分別表示"Get Current Figure"和"Get Current Axes"。在pyplot模塊中,許多函數(shù)都是對當前的Figure或Axes對象進行處理,比如說:
plt.plot()實際上會通過plt.gca()獲得當前的Axes對象ax,然后再調(diào)用ax.plot()方法實現(xiàn)真正的繪圖。
可以在Ipython中輸入類似"plt.plot??"的命令查看pyplot模塊的函數(shù)是如何對各種繪圖對象進行包裝的。
配置屬性
matplotlib所繪制的圖表的每個組成部分都和一個對象對應,我們可以通過調(diào)用這些對象的屬性設(shè)置方法set_*()或者pyplot模塊的屬性設(shè)置函數(shù)setp()設(shè)置它們的屬性值。
因為matplotlib實際上是一套面向?qū)ο蟮睦L圖庫,因此也可以直接獲取對象的屬性
配置文件
繪制一幅圖需要對許多對象的屬性進行配置,例如顏色、字體、線型等等。我們在繪圖時,并沒有逐一對這些屬性進行配置,許多都直接采用了matplotlib的缺省配置。
matplotlib將這些缺省配置保存在一個名為“matplotlibrc”的配置文件中,通過修改配置文件,我們可以修改圖表的缺省樣式。配置文件的讀入可以使用rc_params(),它返回一個配置字典;在matplotlib模塊載入時會調(diào)用rc_params(),并把得到的配置字典保存到rcParams變量中;matplotlib將使用rcParams字典中的配置進行繪圖;用戶可以直接修改此字典中的配置,所做的改變會反映到此后創(chuàng)建的繪圖元素。
繪制多子圖(快速繪圖)
Matplotlib 里的常用類的包含關(guān)系為?Figure - Axes - (Line2D, Text, etc.)一個Figure對象可以包含多個子圖(Axes),在matplotlib中用Axes對象表示一個繪圖區(qū)域,可以理解為子圖。
可以使用subplot()快速繪制包含多個子圖的圖表,它的調(diào)用形式如下:
subplot(numRows, numCols, plotNum)
subplot將整個繪圖區(qū)域等分為numRows行* numCols列個子區(qū)域,然后按照從左到右,從上到下的順序?qū)γ總€子區(qū)域進行編號,左上的子區(qū)域的編號為1。如果numRows,numCols和plotNum這三個數(shù)都小于10的話,可以把它們縮寫為一個整數(shù),例如subplot(323)和subplot(3,2,3)是相同的。subplot在plotNum指定的區(qū)域中創(chuàng)建一個軸對象。如果新創(chuàng)建的軸和之前創(chuàng)建的軸重疊的話,之前的軸將被刪除。
subplot()返回它所創(chuàng)建的Axes對象,我們可以將它用變量保存起來,然后用sca()交替讓它們成為當前Axes對象,并調(diào)用plot()在其中繪圖。
繪制多圖表(快速繪圖)
如果需要同時繪制多幅圖表,可以給figure()傳遞一個整數(shù)參數(shù)指定Figure對象的序號,如果序號所指定的Figure對象已經(jīng)存在,將不創(chuàng)建新的對象,而只是讓它成為當前的Figure對象。
import numpy as np
import matplotlib.pyplot as plt
plt.figure(1) # 創(chuàng)建圖表1
plt.figure(2) # 創(chuàng)建圖表2
ax1 = plt.subplot(211) # 在圖表2中創(chuàng)建子圖1
ax2 = plt.subplot(212) # 在圖表2中創(chuàng)建子圖2
x = np.linspace(0, 3, 100)
for i in xrange(5):
plt.figure(1) ?#? # 選擇圖表1
plt.plot(x, np.exp(i*x/3))
plt.sca(ax1) ? #? # 選擇圖表2的子圖1
plt.plot(x, np.sin(i*x))
plt.sca(ax2) ?# 選擇圖表2的子圖2
plt.plot(x, np.cos(i*x))
plt.show()
在圖表中顯示中文
matplotlib的缺省配置文件中所使用的字體無法正確顯示中文。為了讓圖表能正確顯示中文,可以有幾種解決方案。
在程序中直接指定字體。
在程序開頭修改配置字典rcParams。
修改配置文件。
matplotlib輸出圖象的中文顯示問題
上面那個link里的修改matplotlibrc方式,我試了好幾次都沒成功。能work的一個比較簡便粗暴的方式(但不知道有沒有副作用)是,1.找到字體目錄YOURPYTHONHOME\Lib\site-packages\matplotlib\mpl-data\fonts\ttf下的Vera.ttf。這里我們用中文楷體(可以從windows/system32/fonts拷貝過來,對于win8字體文件不是ttf的可以從網(wǎng)上下一個微軟雅黑),直接張貼到前面的ttf目錄下,然后更名為Vera.ttf。2.?中文字符串用unicode格式,例如:u''測試中文顯示'',代碼文件編碼使用utf-8 加上" #?coding = utf-8 ?"一行。
面向?qū)ο螽媹D
matplotlib API包含有三層,Artist層處理所有的高層結(jié)構(gòu),例如處理圖表、文字和曲線等的繪制和布局。通常我們只和Artist打交道,而不需要關(guān)心底層的繪制細節(jié)。
直接使用Artists創(chuàng)建圖表的標準流程如下:
創(chuàng)建Figure對象
用Figure對象創(chuàng)建一個或者多個Axes或者Subplot對象
調(diào)用Axies等對象的方法創(chuàng)建各種簡單類型的Artists
import?matplotlib.pyplot as plt
X1 = range(0, 50)?Y1 = [num**2 for num in X1] # y = x^2?X2 = [0, 1]?Y2 = [0, 1] # y = x
Fig = plt.figure(figsize=(8,4)) # Create a `figure'?instance?Ax = Fig.add_subplot(111) # Create a `axes'?instance?in the figure?Ax.plot(X1, Y1, X2, Y2) # Create a Line2D?instance?in the axes
Fig.show()?Fig.savefig("test.pdf")