天天看點

plt繪圖與Axes繪圖

使用matplotlib.pyplot(plt)進行繪圖時,有兩種方法:

  1. 直接使用plt裡的函數
  2. 使用面向對象的方法,先産生一個Axes對象,再對此對象進行操作,實作繪圖

第二種方法可以實作更多操作,具有更好的定制性,基于此方法繪圖時,需要了解以下概念:

  1. Figure:畫布,Axes容器;
  2. Axes:坐标系,繪圖的區域,繪圖總是在坐标系上進行;
  3. Axis:坐标軸,x軸或y軸。
  • 使用plt繪圖
import numpy as np
import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif'] = ['SimHei']  # 中文字型設定-黑體
plt.rcParams['axes.unicode_minus'] = False  # 解決儲存圖像是負号'-'顯示為方塊的問題

x = np.arange(-2*np.pi, 2*np.pi, 0.01)
y1 = np.sin(x)
y2 = np.cos(x)
plt.figure(figsize=(10, 7))
plt.plot(x, y1, label='$sinx$')
plt.plot(x, y2, label='$cosx$')
plt.legend(loc='upper right')
plt.xlim(-2*np.pi-1, 2*np.pi+3)
plt.xticks([-2*np.pi, -np.pi, 0, np.pi, 2*np.pi], ['$-2\pi$', '$-\pi$', '$0$', '$\pi$', '$2\pi$'])
plt.title('三角-函數')
plt.xlabel('橫坐标')
plt.ylabel('縱坐标')
plt.axhline(y=0, c='black')

plt.show()

           
  • 使用Axes繪圖
import numpy as np
import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif'] = ['SimHei']  # 中文字型設定-黑體
plt.rcParams['axes.unicode_minus'] = False  # 解決儲存圖像是負号'-'顯示為方塊的問題

x = np.arange(-2*np.pi, 2*np.pi, 0.01)
y1 = np.sin(x)
y2 = np.cos(x)

fig = plt.figure(figsize=(10, 5))
ax1, ax2 = fig.subplots(1, 2)
# 上面兩行代碼可以合并為一行,如下
# fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(10, 5))
ax1.plot(x, y1, label='$sinx$')
ax1.plot(x, y2, label='$cosx$')
ax1.legend(loc='upper right')
ax1.set_xlim(-2 * np.pi - 1, 2 * np.pi + 3)
ax1.set_xticks([-2 * np.pi, -np.pi, 0, np.pi, 2 * np.pi])
ax1.set_xticklabels(['$-2\pi$', '$-\pi$', '$0$', '$\pi$', '$2\pi$'])
ax1.set_title('三角-函數')
ax1.set_xlabel('橫坐标')
ax1.set_ylabel('縱坐标')
ax1.axhline(y=0, c='black')
ax1.axvline(x=0, c='black')

# 繪制矩陣灰階圖
# 這裡的matshow也可以換做imshow, 效果一樣
# matshow隻能繪制矩陣, imshow可以繪制矩陣(2維) RGB(3維) RGBA(4維圖檔)圖像
ax2.matshow(np.random.randint(0, 255, (12, 12)), vmin=0, vmax=255, cmap='gray')
ax1.set_xticks([])
ax1.set_yticks([])
ax1.set_title("mat show")

# 設定父标題(畫布标題)
fig.suptitle("Axes繪圖示例")

plt.show()