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

Matplotlib绘制HR赫罗图时X、Y轴双不同刻度色标的实现问题

HR赫罗图双色标实现方案

你原有代码的核心问题是两次scatter调用会重叠覆盖点的显示,且直接调用plt.colorbar默认关联最后一次绘制的图形元素,导致两个色标都对应Y轴数值,无法分别绑定X、Y轴的刻度映射。

修改后可运行代码

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.cm import ScalarMappable

# 读取数据,无需循环转换列表,直接获取Series值即可
data = pd.read_csv('Sagittarius_star_cloud.csv')
X = data['bp_rp'].values
Y = data['gp'].values

fig = plt.figure(figsize=(10, 8))
ax = fig.add_subplot(111)
# HR图星等轴反转符合天文使用习惯
plt.ylim(max(Y), min(Y))

# 绘制散点,这里点的颜色选择绑定X轴的BP-RP色指数,可根据需求调整绑定对象
sc = plt.scatter(x=X, y=Y, c=X, cmap='Spectral_r', s=5, alpha=0.7)

# 生成绑定X轴数值的水平色标(刻度完全对应X轴取值)
cbar_x = plt.colorbar(sc, orientation="horizontal", pad=0.15)
cbar_x.set_label("BP-RP 色指数")

# 构造绑定Y轴数值的垂直色标(刻度完全对应Y轴取值)
norm_y = plt.Normalize(Y.min(), Y.max())
sm_y = ScalarMappable(norm=norm_y, cmap='Spectral_r')
sm_y.set_array([])
cbar_y = plt.colorbar(sm_y, orientation="vertical", pad=0.1)
cbar_y.set_label("G波段视星等")

# 轴标签设置(可选,贴合HR图场景)
ax.set_xlabel("BP-RP 色指数")
ax.set_ylabel("G波段视星等")
ax.set_title("人马座星团赫罗图")

plt.show()

核心修改说明

  • 优化了数据读取逻辑,无需循环遍历生成X、Y列表,直接调用.values属性即可拿到numpy数组,运行效率更高
  • 避免重复绘制散点导致的覆盖问题,仅绘制一次散点,通过ScalarMappable单独构造Y轴对应的颜色映射对象,不会影响散点本身的显示
  • 两个色标分别绑定X、Y轴的数值范围,刻度完全对应两个轴的取值,符合赫罗图的颜色标注需求
  • 增加了pad参数调整色标和主图的间距,避免和轴标签重叠,可根据实际显示效果调整数值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 07:57:03