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

如何用gnuplot绘制类似示例图的能级图?附相关数据集

绘制能级图的实现方案

核心思路

不需要重构现有数据,直接遍历原始列表绘制每条能级线,通过微调标签位置解决重叠问题。下面是基于Matplotlib的实现代码:

import matplotlib.pyplot as plt

# 给定的数据
orbitals = ['1s1/2', '1p3/2', '1p1/2', '1d5/2','1d3/2','2s1/2','1f7/2','1f5/2','2p3/2','2p1/2',
            '1g9/2','1g7/2','2d5/2','2d3/2','3s1/2','1h11/2','1h9/2','2f7/2','1i13/2']

neutron_energies = [
    [-1.227,-39.078,-38.630,-34.666,-33.512,-32.237,-29.683,-27.441,-25.945,-24.930,-24.211,-20.484,-19.296,-17.191,-17.014,-18.309,-12.704,-12.388,-12.017],
    [-1.261,-39.036,-38.583,-34.610,-33.445,-32.184,-29.614,-27.357,-25.890,-24.872,-24.130,-20.385,-19.246,-17.139,-16.977,-18.219,-12.597,-12.348,-11.919],
    [-1.295,-38.995,-38.536,-34.554,-33.379,-32.130,-29.544,-27.273,-25.835,-24.815,-24.050,-20.287,-19.196,-17.089,-16.941,-18.129,-12.491,-12.309,-11.821],
    [-1.329,-38.953,-38.489,-34.497,-33.312,-32.077,-29.475,-27.188,-25.780,-24.757,-23.969,-20.189,-19.146,-17.038,-16.905,-18.039,-12.385,-12.271,-11.724],
    [-1.362,-38.911,-38.441,-34.440,-33.244,-32.023,-29.405,-27.103,-25.725,-24.699,-23.889,-20.091,-19.096,-16.988,-16.869,-17.950,-12.279,-12.233,-11.628]
]

neutron_diffuseness = [0.52, 0.53, 0.54, 0.55, 0.56]

# 初始化绘图
plt.style.use('seaborn-whitegrid')
fig, ax = plt.subplots(figsize=(10, 12))

# 遍历每个diffuseness值,绘制对应能级
for diff_idx, diff_val in enumerate(neutron_diffuseness):
    current_energies = neutron_energies[diff_idx]
    # 遍历每个轨道,绘制能级线和标签
    for orb_idx, (orb_name, ene) in enumerate(zip(orbitals, current_energies)):
        # 绘制水平能级线,长度为0.01,保证清晰可见
        ax.plot([diff_val - 0.005, diff_val + 0.005], [ene, ene], color='black', linewidth=2)
        
        # 处理标签重叠:同一diff下,每3个标签微调y轴位置,避免拥挤
        y_offset = (orb_idx % 3) * 0.25
        # 在能级线右侧添加轨道标签
        ax.text(diff_val + 0.008, ene + y_offset, orb_name, 
                fontsize=10, ha='left', va='center')

# 图表美化
ax.set_xlabel('Diffuseness', fontsize=12, labelpad=10)
ax.set_ylabel('Neutron Energy (MeV)', fontsize=12, labelpad=10)
ax.set_title('Neutron Energy Levels vs. Nuclear Potential Diffuseness', fontsize=14, pad=15)
ax.set_xlim(0.51, 0.57)  # 扩展x轴范围,避免标签超出边界
ax.invert_yaxis()  # 反转y轴,符合能级图"能量越低越靠下"的常规展示

# 自动调整布局
plt.tight_layout()
plt.show()

关键细节说明

  1. 无需数据重构:直接通过双层循环遍历原始的neutron_diffuseness和neutron_energies列表,逐个绘制能级线,完全保留原始数据结构。
  2. 标签重叠解决:
    • 采用分组偏移:同一diffuseness下,每3个轨道标签微调y轴位置,避免能量接近的标签挤在一起;
    • 若仍有重叠,可将标签旋转45度(添加rotation=45参数到ax.text),进一步减少横向空间占用;
    • 扩展x轴范围,确保标签不会超出图表边界。
  3. 能级图常规优化:反转y轴,让能量更低(更负)的能级位于图表下方,符合核物理能级图的展示习惯。

内容的提问来源于stack exchange,提问作者D.K.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 16:47:07