[Python3] Matplotlib —— (五) 密度圖與等高線圖


[ Matplotlib version: 3.2.1 ]


六、密度圖與等高線圖

在二維圖上用等高線圖或者彩色圖來表示三維數據是個不錯的方法。

Matplotlib提供三個函數來解決這個問題:

  • plt.contour畫等高線圖
  • plt.contourf畫帶有填充色的等高線圖(filled contour plot)的色彩
  • plt.imshow顯示圖形
%matplotlib inline
import matplotlib.pyplot as plt
plt.style.use('seaborn-white')
import numpy as np

三維函數的可視化

1. 用等高線圖可視化三維數據

# 首先用函數z=f(x,y)演示一個等高線圖
def f(x, y):
	return np.sin(x) ** 10 + np.cos(10 + y * x) * np.cos(x)

等高線圖可以用plt.contour函數來創建。它需要三個參數:x軸、y軸、z軸三個座標軸的網格數據。x軸與y軸表示圖形中的位置,而z軸將通過等高線的等級來表示。

np.meshgrid函數準備數據是最簡單的方法,它可以從一維數組構建二維網格數據

x = np.linspace(0, 5, 50)
y = np.linspace(0, 5, 40)

X, Y = np.meshgrid(x, y)
Z = f(X, Y)

# 生成等高線圖
plt.contour(X, Y ,Z, colors='black')

在這裏插入圖片描述

  • 當圖形中只使用一種顏色時,默認使用虛線表示負數,使用實線表示整數。

2. 用彩色等高線可視化三維數據

可以用cmap參數設置一個線條配色方案自定義顏色,還可以讓更多的線條顯示不同的顏色(plt.cm+Tab查看更多顏色)

# 可以將數據範圍等分爲20份,並用不同顏色表示
plt.contour(X, Y, Z, 20, cmap='RdGy')

在這裏插入圖片描述

  • 使用RdGy(紅-灰,Red-Gray縮寫)配色方案,對數據集中度的顯示效果比較好
  • 不足:線條之間的間隙還是有點大,可以通過plt.contourf()函數來填充等高線圖

3. 帶填充色的三維數據可視化

plt.contourf(X, Y, Z, 20, cmap='RdGy')
plt.colorbar()

在這裏插入圖片描述

  • 通過顏色條可以清晰地看出,黑色區域是“波峯”(peak),紅色區域是“波谷”(valley)
  • 不足:顏色看起來不自然(由於顏色的改變是一個離散而非連續的過程)
  • 可以通過plt.imshow()函數來處理,將二維數組渲染成漸變圖

4. 重新渲染三維數據彩色圖

plt.imshow(Z, extent=[0, 5, 0, 5], origin='lower', cmap='RdGy')
plt.colorbar()
plt.axis(aspect='image')

在這裏插入圖片描述

函數plt.imshow()

  • plt.imshow()不支持用x軸和y軸數據設置網格,而是必須通過extent參數設置圖形的座標範圍[xmin, xmax, ymin, ymax]
  • plt.imshow()默認使用標準的圖形數組定義,就是原點位於左上角,而不是絕大多數等高線圖中使用的左下角,這一點在顯示網格數據圖形的時候必須調整
  • plt.imshow()會自動調整座標軸的精度以使用數據顯示,可以通過axis(aspect='image')來設置x軸與y軸的單位

5. 在彩色圖上加上帶數據標籤的等高線

contours = plt.contour(X, Y, Z, 3, colors='black')
plt.clabel(contours, inline=True, fontsize=8)

plt.imshow(Z, extent=[0, 5, 0, 5], origin='lower', cmap='RdGy', alpha=0.5)
plt.colorbar()

在這裏插入圖片描述

  • 將等高線圖與彩色圖組合起來,需要用衣服背景色半透明的彩色圖(通過alpha參數設置透明度)
  • 與另一幅座標軸相同、帶數據標籤的等高線圖疊放在一起(plt.clabel()函數實現)

Matplotlib 相關閱讀:

[Python3] Matplotlib —— (一) 入門基礎
[Python3] Matplotlib —— (二) 簡易線形圖
[Python3] Matplotlib —— (三) 簡易散點圖
[Python3] Matplotlib —— (四) 可視化異常處理


總結自《Python數據科學手冊》

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章