文章概要
本文详细介绍 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)
- 颜色映射设置(选择颜色映射、创建自定义颜色映射、第三方颜色映射)
- 数据标准化(线性标准化、对数标准化、其他标准化方法)
- 颜色条(添加颜色条、自定义颜色条、颜色条位置)
掌握这些颜色映射功能对于创建专业的可视化图表至关重要,它可以帮助我们:
- 展示数据的分布特征
- 突出数据的变化趋势
- 增强图表的可读性
- 提升图表的专业性
建议在实际项目中注意:
- 选择合适的颜色映射
- 考虑数据标准化方法
- 注意颜色条的位置和样式
- 保持图表的清晰度
- 考虑色盲友好性
- 注重整体美观性