基于双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
相关产品推荐
相关产品推荐

