如何用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()
关键细节说明
- 无需数据重构:直接通过双层循环遍历原始的
neutron_diffuseness和neutron_energies列表,逐个绘制能级线,完全保留原始数据结构。 - 标签重叠解决:
- 采用分组偏移:同一diffuseness下,每3个轨道标签微调y轴位置,避免能量接近的标签挤在一起;
- 若仍有重叠,可将标签旋转45度(添加
rotation=45参数到ax.text),进一步减少横向空间占用; - 扩展x轴范围,确保标签不会超出图表边界。
- 能级图常规优化:反转y轴,让能量更低(更负)的能级位于图表下方,符合核物理能级图的展示习惯。
内容的提问来源于stack exchange,提问作者D.K.
相关产品推荐
相关产品推荐

