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

多图统一颜色尺度实现:对角线距离散点图对比方案

多面板散点图统一颜色尺度实现方案

要实现多面板图的统一颜色尺度,核心是先汇总所有子图的z值(与对角线的距离),基于全局极值建立归一化规则,再将该规则应用到每个子图的绘图函数中,最后添加统一色条。具体步骤如下:

1. 收集并合并所有z值

先把不同配置下计算得到的所有对角线距离z值汇总到一个数组里,获取全局的最小值和最大值,确保颜色尺度能覆盖所有子图的数值范围。

示例代码:

import numpy as np
# 假设你有三组不同配置的z值,替换成实际获取方式
z1 = scatter_diagdistance.get_z_values(config1)
z2 = scatter_diagdistance.get_z_values(config2)
z3 = scatter_diagdistance.get_z_values(config3)

# 合并所有z值,计算全局极值
all_z = np.concatenate([z1, z2, z3])
vmin = all_z.min()
vmax = all_z.max()

2. 创建统一的颜色归一化器和色映射

利用matplotlib的Normalize类,基于全局vmin和vmax生成归一化规则,搭配你需要的颜色映射(比如viridis)。

import matplotlib.pyplot as plt
from matplotlib.colors import Normalize

norm = Normalize(vmin=vmin, vmax=vmax)
cmap = plt.cm.viridis  # 可根据需求替换成其他色映射

3. 绘制多面板子图并应用统一尺度

调用scatter_diagdistance绘图时,传入统一的norm和cmap参数,确保所有子图使用相同的颜色转换规则。

# 创建多面板布局
fig, axes = plt.subplots(1, 3, figsize=(15, 5))

# 绘制第一个子图
scatter_diagdistance(ax=axes[0], z=z1, norm=norm, cmap=cmap, label="配置1")
# 绘制第二个子图
scatter_diagdistance(ax=axes[1], z=z2, norm=norm, cmap=cmap, label="配置2")
# 绘制第三个子图
scatter_diagdistance(ax=axes[2], z=z3, norm=norm, cmap=cmap, label="配置3")

# 为每个子图添加基础标签
for ax in axes:
    ax.set_xlabel("X轴")
    ax.set_ylabel("Y轴")
    ax.legend()

4. 添加全局统一色条

在整个画布上添加色条,关联之前创建的归一化器和色映射,确保色条能对应所有子图的颜色尺度。

# 添加色条,适配多面板布局
fig.colorbar(plt.cm.ScalarMappable(norm=norm, cmap=cmap), ax=axes, orientation='vertical', fraction=0.02, pad=0.05)

plt.tight_layout()
plt.show()

关键补充

如果你的scatter_diagdistance是自定义函数,需要确保它支持接收norm和cmap参数,并在内部传递给散点绘制逻辑,示例修改如下:

def scatter_diagdistance(ax, x, y, z, norm=None, cmap=None, **kwargs):
    # 若函数内部未计算z值,可在此添加对角线距离计算逻辑
    # z = np.abs(x - y)
    # 绘制散点时传入归一化器和色映射
    sc = ax.scatter(x, y, c=z, norm=norm, cmap=cmap, **kwargs)
    return sc

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 16:22:43