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

如何为刻度不同的hist2d子图添加统一色条并规范x轴刻度

解决方案:统一色条与x轴刻度格式调整

1. 实现统一色条

由于两个子图的数值范围不同(上限6和14),要实现统一色条,需:

  • 先计算两个数据集的全局最小值和最大值,作为共同的颜色映射范围(vmin和vmax)
  • 绘制两个hist2d时指定相同的vmin、vmax和cmap
  • 只添加一个色条,关联两个子图,放在整体布局的右侧

2. 修正x轴科学计数法问题

Matplotlib会自动选择刻度格式,当刻度值的小数位数或范围触发科学计数法时,可通过设置刻度格式器强制使用常规小数格式。


修改后的完整代码

import matplotlib.pyplot as plt
from matplotlib.ticker import ScalarFormatter
import numpy as np
from datetime import timedelta

# 原数据处理部分
t_arrival=ce['P_Time'];
t_0=t_arrival[70];
t_a=t_0 + timedelta(hours=72);
t_b=t_0 - timedelta(hours=72);

x_bins = np.linspace(-130.05, -129.95, 20);
y_bins = np.linspace(45.90, 46, 20);

df_b = df_lo[(df_lo['A_t'].between(t_b,t_0))];
y_b=df_b['lat'];
x_b=df_b['long'];

df_a = df_lo[(df_lo['A_t'].between(t_0,t_a))];
y_a=df_a['lat'];
x_a=df_a['long'];


# 计算全局颜色范围
counts_b, _, _ = np.histogram2d(x_b, y_b, bins=[x_bins, y_bins])
counts_a, _, _ = np.histogram2d(x_a, y_a, bins=[x_bins, y_bins])
vmin = min(counts_b.min(), counts_a.min())
vmax = max(counts_b.max(), counts_a.max())

fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12,5), sharey=True)

# 绘制第一个子图,指定统一颜色范围
b=ax1.hist2d(x_b, y_b, bins =[x_bins, y_bins], cmap='Blues', vmin=vmin, vmax=vmax)

ax1.set_xlim([-130.05, -129.95])
ax1.set_ylim([45.90, 46])
ax1.set_yticks([45.90, 45.925, 45.95, 45.975, 46])
ax1.set_xticks([-130.05, -130.025, -130, -129.975, -129.95])
ax1.set_ylabel('Latitude', fontsize=10)
ax1.set_xlabel('Longitude', fontsize=10)

# 绘制第二个子图,使用相同颜色范围
a=ax2.hist2d(x_a, y_a, bins =[x_bins, y_bins], cmap='Blues', vmin=vmin, vmax=vmax)

ax2.set_xlim([-130.05, -129.95])
ax2.set_ylim([45.90, 46])
ax2.set_yticks([45.90, 45.925, 45.95, 45.975, 46])
ax2.set_xticks([-130.05, -130.025, -130, -129.975, -129.95])
ax2.set_xlabel('Longitude', fontsize=10)

# 修正x轴刻度格式,禁用科学计数法
for ax in [ax1, ax2]:
    ax.xaxis.set_major_formatter(ScalarFormatter(useOffset=False))
    ax.ticklabel_format(style='plain', axis='x')

# 添加统一色条,关联两个子图
fig.colorbar(b[3], ax=[ax1, ax2], shrink=0.80, label='Observations/day', fontsize=10)

plt.tight_layout() 
plt.show()

关键修改说明

  1. 全局颜色范围计算:通过np.histogram2d提前获取两个子图的计数数据,计算出vmin和vmax,确保两个子图使用相同的颜色标尺。
  2. 共享色条添加:使用fig.colorbar(..., ax=[ax1, ax2])将色条绑定到两个子图,自动布局在整体右侧。
  3. x轴格式修正:通过ScalarFormatter(useOffset=False)和ticklabel_format(style='plain')强制x轴刻度使用常规小数格式,避免科学计数法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 12:54:23