如何用gnuplot绘制分波态密度(PDOS)?脚本运行异常求助
分波态密度(PDOS)绘制问题修正
我尝试用以下gnuplot脚本绘制分波态密度(PDOS),但实际输出与预期效果不符:
原脚本
set term postscript enhanced colour set output 'pdos.ps' set key box font 'Helvetica, 12' top right noautotitle set grid set xlabel "E-E_f [eV]" font 'Helvetica, 20' set ylabel "PDos(states/ev)" font 'Helvetica, 20' set xzeroaxis set xrange[-6:4] set yrange[*:*] plot 'Co_d.dat' u 1:2 w l lc "green", 'Mn_d.dat' u 1:2 w l lc "red', 'Sb_p.dat' u 1:2 w l lc "#4169E1" set output
效果对比
- 预期效果:呈现三条清晰可区分的曲线,分别对应Co d、Mn d、Sb p轨道的态密度,横轴标注为
E-E_f [eV],纵轴标注PDOS(states/eV),费米能级处有零轴,网格可见,图例明确区分各组分。 - 实际效果:仅显示部分曲线,样式异常,未完整呈现三条PDOS曲线,整体布局不符合预期。
问题排查与修正方案
- 语法错误修复:原脚本中
lc "red'缺少闭合双引号,导致gnuplot解析失败,部分曲线无法正常渲染。 - 图例优化:原脚本使用
noautotitle关闭自动图例,导致无法区分各曲线,建议手动添加标题。 - 脚本可读性优化:用反斜杠换行拆分长命令,提升脚本易读性。
修正后的脚本
set term postscript enhanced colour set output 'pdos.ps' set key box font 'Helvetica, 12' top right set grid set xlabel "E-E_f [eV]" font 'Helvetica, 20' set ylabel "PDOS(states/eV)" font 'Helvetica, 20' set xzeroaxis set xrange[-6:4] set yrange[*:*] plot 'Co_d.dat' u 1:2 w l lc "green" title "Co d", \ 'Mn_d.dat' u 1:2 w l lc "red" title "Mn d", \ 'Sb_p.dat' u 1:2 w l lc "#4169E1" title "Sb p" set output
额外检查项
- 确认
Co_d.dat、Mn_d.dat、Sb_p.dat数据文件格式正确,每行包含两列数值(第一列为能量,第二列为PDOS值),无空行或异常字符。 - 若仍有问题,可尝试单独绘制某一个数据文件,排查是否为数据本身的问题。
内容的提问来源于stack exchange,提问作者Binay Limbu
相关产品推荐
相关产品推荐

