文章概要
本文詳細介紹 Matplotlib 的顏色映射功能,包括:
- 顏色映射類型
- 顏色映射設置
- 數據標準化
- 顏色條
顏色映射類型
pcolormesh
import matplotlib.pyplot as plt
import numpy as np# 創建網格數據
x = np.linspace(-3, 3, 100)
y = np.linspace(-3, 3, 100)
X, Y = np.meshgrid(x, y)
Z = np.sin(np.sqrt(X**2 + Y**2))# 使用 pcolormesh 繪制
plt.figure(figsize=(8, 6))
plt.pcolormesh(X, Y, Z, cmap='viridis')
plt.colorbar()
plt.title('pcolormesh 示例')
plt.show()
contourf
# 使用 contourf 繪制
plt.figure(figsize=(8, 6))
plt.contourf(X, Y, Z, levels=20, cmap='viridis')
plt.colorbar()
plt.title('contourf 示例')
plt.show()# 設置輪廓線
plt.contourf(X, Y, Z, levels=20, cmap='viridis')
plt.contour(X, Y, Z, levels=20, colors='k', alpha=0.5)
plt.colorbar()
imshow
# 使用 imshow 繪制
plt.figure(figsize=(8, 6))
plt.imshow(Z, cmap='viridis', origin='lower',extent=[-3, 3, -3, 3])
plt.colorbar()
plt.title('imshow 示例')
plt.show()# 設置插值方法
plt.imshow(Z, cmap='viridis', interpolation='bilinear')
scatter
# 創建散點數據
x = np.random.randn(100)
y = np.random.randn(100)
z = np.random.randn(100)# 使用 scatter 繪制
plt.figure(figsize=(8, 6))
plt.scatter(x, y, c=z, cmap='viridis')
plt.colorbar()
plt.title('scatter 示例')
plt.show()# 設置點大小
plt.scatter(x, y, c=z, cmap='viridis', s=100)
顏色映射設置
選擇顏色映射
# 使用內置顏色映射
plt.pcolormesh(X, Y, Z, cmap='viridis') # 默認顏色映射
plt.pcolormesh(X, Y, Z, cmap='plasma') # 等離子體
plt.pcolormesh(X, Y, Z, cmap='inferno') # 地獄
plt.pcolormesh(X, Y, Z, cmap='magma') # 巖漿
plt.pcolormesh(X, Y, Z, cmap='cividis') # 色盲友好# 使用反轉的顏色映射
plt.pcolormesh(X, Y, Z, cmap='viridis_r')
創建自定義顏色映射
from matplotlib.colors import LinearSegmentedColormap# 創建自定義顏色映射
colors = ['#000000', '#ff0000', '#ffff00', '#ffffff']
cmap = LinearSegmentedColormap.from_list('custom_cmap', colors)# 使用自定義顏色映射
plt.pcolormesh(X, Y, Z, cmap=cmap)
plt.colorbar()
plt.title('自定義顏色映射')
plt.show()# 創建離散顏色映射
from matplotlib.colors import ListedColormap
colors = ['red', 'green', 'blue']
cmap = ListedColormap(colors)
第三方顏色映射
# 使用 seaborn 顏色映射
import seaborn as sns
plt.pcolormesh(X, Y, Z, cmap=sns.color_palette("husl", 256))# 使用 colorcet 顏色映射
import colorcet as cc
plt.pcolormesh(X, Y, Z, cmap=cc.cm.rainbow)
數據標準化
線性標準化
from matplotlib.colors import Normalize# 創建標準化對象
norm = Normalize(vmin=-1, vmax=1)# 使用標準化
plt.pcolormesh(X, Y, Z, cmap='viridis', norm=norm)
plt.colorbar()
plt.title('線性標準化')
plt.show()# 自動標準化
plt.pcolormesh(X, Y, Z, cmap='viridis', norm=Normalize())
對數標準化
from matplotlib.colors import LogNorm# 創建對數標準化對象
norm = LogNorm(vmin=0.1, vmax=10)# 使用對數標準化
plt.pcolormesh(X, Y, Z, cmap='viridis', norm=norm)
plt.colorbar()
plt.title('對數標準化')
plt.show()# 自動對數標準化
plt.pcolormesh(X, Y, Z, cmap='viridis', norm=LogNorm())
其他標準化方法
from matplotlib.colors import PowerNorm, SymLogNorm# 使用冪次標準化
norm = PowerNorm(gamma=0.5)
plt.pcolormesh(X, Y, Z, cmap='viridis', norm=norm)# 使用對稱對數標準化
norm = SymLogNorm(linthresh=0.1)
plt.pcolormesh(X, Y, Z, cmap='viridis', norm=norm)
顏色條
添加顏色條
# 基本顏色條
plt.pcolormesh(X, Y, Z, cmap='viridis')
plt.colorbar()# 設置顏色條位置
plt.colorbar(orientation='horizontal')
plt.colorbar(location='left')
plt.colorbar(location='right')
自定義顏色條
# 設置顏色條標簽
plt.colorbar(label='數值')# 設置顏色條刻度
plt.colorbar(ticks=[-1, 0, 1])# 設置顏色條格式
plt.colorbar(format='%.1f')# 設置顏色條大小
plt.colorbar(fraction=0.046, pad=0.04)
顏色條位置
# 使用 axes 位置
cbar_ax = plt.axes([0.85, 0.1, 0.05, 0.8])
plt.colorbar(cax=cbar_ax)# 使用 GridSpec
import matplotlib.gridspec as gridspec
gs = gridspec.GridSpec(1, 2, width_ratios=[20, 1])
ax = plt.subplot(gs[0])
cbar_ax = plt.subplot(gs[1])
plt.colorbar(cax=cbar_ax)
總結
顏色映射部分涵蓋了:
- 顏色映射類型(pcolormesh、contourf、imshow、scatter)
- 顏色映射設置(選擇顏色映射、創建自定義顏色映射、第三方顏色映射)
- 數據標準化(線性標準化、對數標準化、其他標準化方法)
- 顏色條(添加顏色條、自定義顏色條、顏色條位置)
掌握這些顏色映射功能對于創建專業的可視化圖表至關重要,它可以幫助我們:
- 展示數據的分布特征
- 突出數據的變化趨勢
- 增強圖表的可讀性
- 提升圖表的專業性
建議在實際項目中注意:
- 選擇合適的顏色映射
- 考慮數據標準化方法
- 注意顏色條的位置和樣式
- 保持圖表的清晰度
- 考慮色盲友好性
- 注重整體美觀性