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

基于双CSV文件绘制天体物理J-K与光谱型对比散点图

解决J-K与光谱型散点图叠加不同数据集的问题

以下是修改后的代码,实现已知天体(蓝色圆点)和新发现天体(红色三角)在同一图中叠加展示,同时保留误差棒:

import pandas as pd
import matplotlib.pyplot as plt

def convert_spectral_type(st):
    """将M7、L2.5这类光谱型转换为数值"""
    try:
        return float(st[1:])
    except ValueError:
        return float('nan')

# 读取已知天体数据
df_known = pd.read_csv('Known BDs (J-K).csv')
df_known['numeric_spectral'] = df_known['Spectral type'].apply(convert_spectral_type)

# 读取新发现天体数据
df_new = pd.read_csv('New BDs (J-K).csv')  # 替换成你的新数据文件名
df_new['numeric_spectral'] = df_new['Spectral type'].apply(convert_spectral_type)

# 绘制已知天体数据:蓝色圆点,带误差棒
plt.errorbar(
    df_known['numeric_spectral'], 
    df_known['J-K'], 
    yerr=df_known['J-K err'],
    fmt='o', 
    markersize=5, 
    capsize=3,
    color='blue',
    label='已知天体'
)

# 绘制新发现天体数据:红色三角,带误差棒(如果有误差的话,没有可以去掉yerr参数)
plt.errorbar(
    df_new['numeric_spectral'], 
    df_new['J-K'], 
    yerr=df_new.get('J-K err', None),  # 兼容无误差列的情况
    fmt='^', 
    markersize=7, 
    capsize=3,
    color='red',
    label='新发现天体'
)

# 设置图表属性
plt.xlabel('光谱型(数值化)')
plt.ylabel('J-K')
plt.title('J-K与光谱型的散点图(带误差棒)')
plt.grid(True)
plt.legend()  # 显示图例区分两类数据
plt.tight_layout()
plt.show()

关键修改说明:

  • 封装了convert_spectral_type函数,避免重复编写光谱型转换代码,更简洁易维护
  • 分别读取并处理两个数据集,统一生成数值化光谱型列
  • 调用两次plt.errorbar,分别指定不同的颜色、标记样式和标签,实现叠加
  • 添加plt.legend()显示图例,方便区分两类天体
  • 修正了原代码中重复设置xlabel/ylabel的问题
  • 用df.get()处理新数据可能没有误差列的情况,增强代码兼容性

注意事项:

  • 请将df_new = pd.read_csv('New BDs (J-K).csv')中的文件名替换为你实际的新发现天体数据文件名
  • 如果新数据没有J-K误差列,可直接去掉yerr=df_new.get('J-K err', None)这一参数
  • 可根据需求调整标记样式(如fmt='s'为方形)、颜色和标记大小

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 21:00:05