Matplotlib從興趣到實踐

先看下Matplotlib實現的效果
python

是否是出現了也想敲一個的心動,那讓咱們一塊兒來了解Matplotlib吧數組

Matplotlib安裝

1.Windows系統安裝Matplotlib
進入到cmd的命令界面,輸入如下命令:
python -m pip install -U pip setuptools
python -m pip install matplotlibmdom

2.Linux系統安裝Matplotlibide

  • Ubuntu: sudo apt-get install python-matplotlib
  • Redhat: sudo yum install python-matplotlib

Mac OSX 系統安裝 Matplotlib
可使用 pip 命令來安裝:sudo python -mpip install matplotlib函數

圖文顯示

首先咱們須要下載中文包:ShiHei字體包 將下載的字體包放置到項目目錄中
學習

import matplotlib
import numpy as np
from matplotlib import pyplot as plt

zhfont1 = matplotlib.font_manager.FontProperties(fname="SimHei.ttf")
x=np.array([1,2,3,4,5,6,7,8])
y = 2 * x + 5
plt.title("個人 - 測試", fontproperties=zhfont1)

fontproperties 設置中文顯示,fontsize 設置字體大小
plt.xlabel("x 軸", fontproperties=zhfont1)
plt.ylabel("y 軸", fontproperties=zhfont1)
plt.plot(x, y,"-b")
plt.show()

執行結果:
測試

從執行結果來看不難分析出pil.xlable實現的是定義x軸的默認顯示,ylabel定義的是y軸的顯示 ,plot(x,y,'-b')中定義的是x y軸的數據以及顯示的顏色和樣式信息。
其中具體的樣式和顏色信息的設置參數以下字體

字符 plot函數中字符描述
'-' 實線樣式
'--' 短橫線樣式
'-.' 點劃線樣式
':' 虛線樣式
'.' 點標記
',' 像素標記
'o' 圓標記
'v' 倒三角標記
'^' 正三角標記
'<' 左三角標記
'>' 右三角標記
'1' 下箭頭標記
'2' 上箭頭標記
'3' 左箭頭標記
'4' 右箭頭標記
's' 正方形標記
'p' 五邊形標記
'*' 星形標記
'h' 六邊形標記 1
'H' 六邊形標記 2
'+' 加號標記
'x' X 標記
'D' 菱形標記
'd' 窄菱形標記
'|' 豎直線標記
'_' 水平線標記
字符 plot函數中顏色描述
'b' 藍色
'g' 綠色
'r' 紅色
'c' 青色
'm' 品紅色
'y' 黃色
'k' 黑色
'w' 白色

下面咱們能夠運用Numpy的相關知識繪製各類圖像

咱們的目的重點不是編寫各類的圖像,而是瞭解繪圖的原理,經過學習可以繪製根據本身須要的圖像(學習matplotlib前建議要學習Numpy的知識)spa

繪製正弦波

#計算正弦曲線上點的 x 和 y 座標
x = np.arange(0,  3  * np.pi,  0.1) 
y = np.sin(x)
plt.title("sine wave form")  
#使用 matplotlib 來繪製點
plt.plot(x, y) 
plt.show()

運行結果:
3d

該代碼中 x是一個數組,它是藉助numpy.arange()方法實現0-(3*圓周率)的範圍內每間隔0.1生成一個點
y = np.sin(x)
表示的是運用正弦函數生成與x軸點一 一對應的y軸的點,最後使用matplotlib的plot方法繪製出來相應的圖像。

繪製同一窗口中不一樣的圖像

實現多個圖像的繪製就要用的matplotlib的subplot()函數

#aubplot參數解釋 如下建立的是一個高度爲2,寬度爲1,的第1個圖像
plt.subplot(2, 1, 1)
#將第一個圖像繪製出來
plt.plot(x,y_sin)
plt.title('Sin')
#aubplot參數解釋 如下建立的是一個高度爲2,寬度爲1,的第2個圖像
plt.subplot(2, 1, 2)
#將第二個圖像繪製出來
plt.plot(x,y_cos)
plt.title('Cos')
plt.show()

運行結果:

繪製條形圖

繪製條形圖須要用到matplotlib的bar()函數生成條形圖,使用原來與上面的圖像繪製同樣,不一樣的是方法產生的效果
能夠經過如下代碼來進一步加深圖像繪製的印象

# 條形圖 bar
x = [5,8,10]
y = [12,16,6]
x2 = [6,9,11]
y2 = [6,15,7]
plt.bar(x, y, align='center')
plt.bar(x2, y2, color='y', align='center')
plt.title('條形圖', fontproperties=zhfont1)
plt.ylabel('Y 軸', fontproperties=zhfont1)
plt.xlabel('X 軸', fontproperties=zhfont1)
plt.show()

運行結果:

繪製直方圖

hist()函數能夠將將數據和bin參數做爲參數,而且可以轉化爲直方圖

# 直方圖 plt()
a = np.array([21,99,1,46,88,77,15,24,11,61,66,67,68,30,41,55,18,31,90,26])
plt.hist(a, color='g', bins=[0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100])
plt.title("histogram")
plt.show()

運行結果:

擴展

關於matplotlib繪圖的經常使用配置說明

# 導入 matplotlib 的全部內容(nympy 能夠用 np 這個名字來使用)
from pylab import *

# 建立一個 8 * 6 點(point)的圖,並設置分辨率爲 80
figure(figsize=(8,6), dpi=80)

# 建立一個新的 1 * 1 的子圖,接下來的圖樣繪製在其中的第 1 塊(也是惟一的一塊)
subplot(1,1,1)

X = np.linspace(-np.pi, np.pi, 256,endpoint=True)
C,S = np.cos(X), np.sin(X)

# 繪製餘弦曲線,使用藍色的、連續的、寬度爲 1 (像素)的線條
plot(X, C, color="blue", linewidth=1.0, linestyle="-")

# 繪製正弦曲線,使用綠色的、連續的、寬度爲 1 (像素)的線條
plot(X, S, color="green", linewidth=1.0, linestyle="-")

# 設置橫軸的上下限
xlim(-4.0,4.0)  /plt.xlim(X.min()*1.1, X.max()*1.1)

# 設置橫軸記號
xticks(np.linspace(-4,4,9,endpoint=True))

# 設置縱軸的上下限
ylim(-1.0,1.0)

# 設置縱軸記號
yticks(np.linspace(-1,1,5,endpoint=True))

#添加圖例 能夠指定圖例的位置
plt.legend(loc='upper left', frameon=False)

# 以分辨率 72 來保存圖片
# savefig("exercice_2.png",dpi=72)

# 在屏幕上顯示
show()

下面是一個綜合運用的實例

# 繪製正弦波
# 計算正弦曲線上點的 x 和 y 座標
x = np.linspace(-np.pi, np.pi, 256,endpoint=True)
y = np.sin(x)
C,S = np.cos(x), np.sin(x)
plt.title("sine wave form")
# 使用 matplotlib 來繪製點
plt.plot(x, C, color="blue", linewidth=2.5, linestyle="-", label="cosine")
plt.plot(x, S, color="red", linewidth=2.5, linestyle="-", label="sine")
#如下是對邊界的設置
plt.xlim(x.min()*1.1, x.max()*1.1)
#如下是對x軸的記號設置
plt.xticks([-np.pi, -np.pi/2, 0, np.pi/2, np.pi],
           [r'$-\pi$', r'$-\pi/2$', r'$0$', r'$+\pi/2$', r'$+\pi$'])
#如下是對y軸的記號設置
plt.ylim(C.min()*1.1,C.max()*1.1)
plt.yticks([-1, +1],
           [r'$-1$', r'$+1$'])
#如下是對label圖例位置進行設置
plt.legend(loc='upper left', frameon=False)
plt.show()

運行結果:

下面一個是使用matplotlib中的pie()函數實現的餅狀圖的實例:

n = 20
Z = np.random.uniform(0,1,n)
plt.pie(Z) 
plt.show()

運行結果:

也能夠用來實現一些3D的圖像效果,下面是一個實現的實例:

from pylab import *
from mpl_toolkits.mplot3d import Axes3D

fig = figure()
ax = Axes3D(fig)
X = np.arange(-4, 4, 0.25)
Y = np.arange(-4, 4, 0.25)
X, Y = np.meshgrid(X, Y)
R = np.sqrt(X**2 + Y**2)
Z = np.sin(R)
ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap='hot')
plt.savefig('sample.png', bbox_inches="tight")
show()

運行結果:

是否是

相關文章
相關標籤/搜索