【AI Study】第五天,Matplotlib(5)- 颜色映射

文章概要

本文详细介绍 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)

总结

颜色映射部分涵盖了:

  1. 颜色映射类型(pcolormesh、contourf、imshow、scatter)
  2. 颜色映射设置(选择颜色映射、创建自定义颜色映射、第三方颜色映射)
  3. 数据标准化(线性标准化、对数标准化、其他标准化方法)
  4. 颜色条(添加颜色条、自定义颜色条、颜色条位置)

掌握这些颜色映射功能对于创建专业的可视化图表至关重要,它可以帮助我们:

  • 展示数据的分布特征
  • 突出数据的变化趋势
  • 增强图表的可读性
  • 提升图表的专业性

建议在实际项目中注意:

  • 选择合适的颜色映射
  • 考虑数据标准化方法
  • 注意颜色条的位置和样式
  • 保持图表的清晰度
  • 考虑色盲友好性
  • 注重整体美观性
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值