You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Matplotlib散点图中使用两种colormap呈现纬度与土地覆盖信息?

实现双色彩条的空间数据散点图(含纬度着色与土地覆盖区分)

要同时实现纬度渐变着色和二元土地覆盖区分,并添加第二个色条,你可以通过拆分数据图层、利用matplotlib的轴分割工具来实现。以下是修改后的完整代码:

import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from mpl_toolkits.axes_grid1 import make_axes_locatable
from matplotlib.colors import ListedColormap

# 生成示例数据
x = np.random.normal(size=192 * 50)
y = np.random.normal(size=192 * 50)
lat = np.tile(np.linspace(-90, 90, 192), 50)
landcover = np.random.choice([0, 1], size=192 * 50, replace=True)

# 定义纬度的渐变配色
lat_cmap = sns.dark_palette("#69d", reverse=True, as_cmap=True)
# 定义土地覆盖的二元配色
landcover_colors = ["#e74c3c", "#2ecc71"]  # 红色代表类型0,绿色代表类型1

plt.figure(figsize=(12, 8))
ax = plt.gca()

# 按土地覆盖类型拆分数据并绘制散点
mask_land0 = landcover == 0
mask_land1 = landcover == 1

# 土地覆盖0:圆形标记
scatter_land0 = ax.scatter(x[mask_land0], y[mask_land0], c=lat[mask_land0], 
                           alpha=0.2, cmap=lat_cmap, marker='o', label='Landcover 0')
# 土地覆盖1:方形标记
scatter_land1 = ax.scatter(x[mask_land1], y[mask_land1], c=lat[mask_land1], 
                           alpha=0.2, cmap=lat_cmap, marker='s', label='Landcover 1')

# 添加第一个色条(纬度)
cbar_lat = plt.colorbar(scatter_land0, ax=ax, pad=0.1)
cbar_lat.solids.set(alpha=1)  # 修复色条透明度问题
cbar_lat.set_label('Latitude', fontsize=12)

# 分割轴,为土地覆盖色条创建独立空间
divider = make_axes_locatable(ax)
cax_landcover = divider.append_axes("right", size="5%", pad=0.15)

# 创建土地覆盖的离散色条
landcover_cmap = ListedColormap(landcover_colors)
bounds = [-0.5, 0.5, 1.5]  # 设置离散边界,确保分类准确
norm = plt.cm.colors.BoundaryNorm(bounds, landcover_cmap.N)
cbar_landcover = plt.colorbar(plt.cm.ScalarMappable(norm=norm, cmap=landcover_cmap),
                              cax=cax_landcover, ticks=[0, 1])
cbar_landcover.set_label('Landcover Type', fontsize=12)

# 添加图例与网格
ax.legend()
ax.grid(alpha=0.2)
plt.tight_layout()
plt.show()

关键逻辑说明:

  • 土地覆盖区分:通过数据掩码拆分两类土地覆盖数据,用不同标记形状(圆形/方形)区分,同时保留每个点的纬度着色逻辑
  • 双色彩条实现:用make_axes_locatable工具在主图右侧生成独立轴,专门放置土地覆盖的离散色条,保证两个色条对齐且不重叠
  • 色条细节调整:为纬度色条修复透明度差异,为土地覆盖色条设置离散边界,确保分类标签与颜色一一对应

内容的提问来源于stack exchange,提问作者danjdrennan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 10:06:19