1. 程式人生 > >五、用matplotlib繪製精美的圖表

五、用matplotlib繪製精美的圖表


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()

執行後圖像: