五、用matplotlib繪製精美的圖表
阿新 • • 發佈:2019-01-11
matplotlib是python最著名的繪相簿,它提供了一整套和matlab相似的命令API,十分適合互動式地進行製圖。本節通過幾個樣例來介紹下如何使用matplotlib繪製精美的圖表
安裝方法
pip install matplotlib
繪製一元函式影象y=ax+b
建立single_variable.py,內容如下:
# coding:utf-8
import sys
reload(sys)
sys.setdefaultencoding( "utf-8" )
import matplotlib.pyplot as plt
import numpy as np
plt.figure() # 例項化作圖變數
plt.title('single variable') # 影象標題
plt.xlabel('x') # x軸文字
plt.ylabel('y') # y軸文字
plt.axis([0, 5, 0, 10]) # x軸範圍0-5,y軸範圍0-10
plt.grid(True) # 是否繪製網格線
xx = np.linspace(0, 5, 10) # 在0-5之間生成10個點的向量
plt.plot(xx, 2*xx, 'g-') # 繪製y=2x影象,顏色green,形式為線條
plt.show() # 展示影象
執行後圖像:
繪製正弦曲線y=sin(x)
建立sinx.py,內容如下:
# coding:utf-8
import sys
reload(sys)
sys.setdefaultencoding( "utf-8" )
import matplotlib.pyplot as plt
import numpy as np
plt.figure() # 例項化作圖變數
plt.title('single variable') # 影象標題
plt.xlabel('x') # x軸文字
plt.ylabel('y') # y軸文字
plt.axis([-12, 12, -1, 1]) # x軸範圍-12到12,y軸範圍-1到1
plt.grid(True) # 是否繪製網格線
xx = np.linspace(-12 , 12, 1000) # 在-12到12之間生成1000個點的向量
plt.plot(xx, np.sin(xx), 'g-', label="$sin(x)$") # 繪製y=sin(x)影象,顏色green,形式為線條
plt.plot(xx, np.cos(xx), 'r--', label="$cos(x)$") # 繪製y=cos(x)影象,顏色red,形式為虛線
plt.legend() # 繪製圖例
plt.show() # 展示影象
執行後圖像:
繪製多軸圖
建立multi_axis.py內容如下:
# coding:utf-8
import sys
reload(sys)
sys.setdefaultencoding( "utf-8" )
import matplotlib.pyplot as plt
import numpy as np
def draw(plt):
plt.axis([-12, 12, -1, 1]) # x軸範圍-12到12,y軸範圍-1到1
plt.grid(True) # 是否繪製網格線
xx = np.linspace(-12, 12, 1000) # 在-12到12之間生成1000個點的向量
plt.plot(xx, np.sin(xx), 'g-', label="$sin(x)$") # 繪製y=sin(x)影象,顏色green,形式為線條
plt.plot(xx, np.cos(xx), 'r--', label="$cos(x)$") # 繪製y=cos(x)影象,顏色red,形式為虛線
plt.legend() # 繪製圖例
plt.figure() # 例項化作圖變數
plt1 = plt.subplot(2,2,1) # 兩行兩列中的第1張圖
draw(plt1)
plt2 = plt.subplot(2,2,2) # 兩行兩列中的第2張圖
draw(plt2)
plt3 = plt.subplot(2,2,3) # 兩行兩列中的第3張圖
draw(plt3)
plt4 = plt.subplot(2,2,4) # 兩行兩列中的第4張圖
draw(plt4)
plt.show() # 展示影象
執行後圖像:
繪製3D影象
建立plot_3d.py,內容如下:
# coding:utf-8
import sys
reload(sys)
sys.setdefaultencoding( "utf-8" )
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(1,1,1,projection='3d')
theta = np.linspace(-4 * np.pi, 4 * np.pi, 500) # theta旋轉角從-4pi到4pi,相當於兩圈
z = np.linspace(0, 2, 500) # z軸從下到上,從-2到2之間畫100個點
r = z # 半徑設定為z大小
x = r * np.sin(theta) # x和y畫圓
y = r * np.cos(theta) # x和y畫圓
ax.plot(x, y, z, label='curve')
ax.legend()
plt.show()
執行後圖像:
3D散點圖
建立plot_3d_scatter.py,內容如下:
# coding:utf-8
import sys
reload(sys)
sys.setdefaultencoding( "utf-8" )
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(1,1,1,projection='3d')
xx = np.linspace(0, 5, 10) # 在0-5之間生成10個點的向量
yy = np.linspace(0, 5, 10) # 在0-5之間生成10個點的向量
zz1 = xx
zz2 = 2*xx
zz3 = 3*xx
ax.scatter(xx, yy, zz1, c='red', marker='o') # o型符號
ax.scatter(xx, yy, zz2, c='green', marker='^') # 三角型符號
ax.scatter(xx, yy, zz3, c='black', marker='*') # 星型符號
ax.legend()
plt.show()
執行後圖像:
繪製3D表面
建立plot_3d_surface.py,內容如下:
# coding:utf-8
import sys
reload(sys)
sys.setdefaultencoding( "utf-8" )
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm
from matplotlib.ticker import LinearLocator, FormatStrFormatter
import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure()
ax = fig.gca(projection='3d')
X = np.arange(-5, 5, 0.25)
Y = np.arange(-5, 5, 0.25)
X, Y = np.meshgrid(X, Y)
Z = X**2+Y**2
ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=cm.coolwarm, linewidth=0, antialiased=False)
plt.show()
執行後圖像: