Gnuplot中line类型绘图无显示问题求助
Gnuplot line类型子图无显示问题排查
核心原因
你第一个子图用w l(纯线条)绘制,而Gnuplot的线条绘制要求至少两个连续的数据点才能生成可见线条。你的筛选条件($2==-5e-07?$1:1/0)大概率在每个目标数据文件中只匹配到单个数据点:
- 纯线条(
w l)无法基于单个点生成线条,所以子图无显示; - 而
w lp(linepoint)会显示单个点的标记,因此其余子图正常。
验证方法
临时将第一个子图的绘图指令改为w lp,如果能看到对应的数据点,即可确认是单个点导致的线条无法生成。
解决思路
确认匹配行数:用命令行工具统计每个文件中符合
$2==-5e-07的行数,比如:grep "-5e-07" ./phi=0.01/Field/Fields_1.00e+04_800.dat | wc -l如果结果为1,说明确实只有单个点,此时纯线条无法显示,建议改用
w lp或w p(仅点)绘制。处理空白行问题:如果数据文件中存在空白行,Gnuplot会将空白行前后的数据视为独立数据集,可能导致每个数据集中仅一个匹配点。可通过以下指令忽略空白行:
set datafile missing '' # 忽略空白行,将所有数据视为连续数据集添加到
set multiplot之前,再重新运行代码。合并多文件点为线条:如果需要将多个文件的单个点连接成一条线,需调整绘图逻辑,将所有文件的匹配点合并为一个数据集,例如:
p '< for i in 1 2 3 4 5; do grep "-5e-07" ./phi=0.0$i/Field/Fields_1.00e+04_800.dat; done' u 1:4 w l lw 2 t 'All phi'此方法通过shell命令提前提取所有匹配点,再用线条连接。
修改后的示例代码
set datafile missing '' # 忽略空白行 set multiplot layout 2,2 rowsfirst # 改用linepoint确保单个点可见,或根据需求调整 p for [i=1:5] './phi=0.0'.i.'/Field/Fields_1.00e+04_800.dat' u ($2==-5e-07?$1:1/0):4 w lp lw 2 t 'phi=0.0'.i p for [i=1:5] './phi=0.0'.i.'/Field/Fields_1.00e+04_800.dat' u ($2==-5e-07?$1:1/0):3 w lp t 'phi=0.0'.i p for [i=1:5] './phi=0.0'.i.'/Field/Fields_1.00e+04_800.dat' u ($2==-5e-07?$1:1/0):6 w lp t 'phi=0.0'.i p for [i=1:5] './phi=0.0'.i.'/Field/Fields_1.00e+04_800.dat' u ($2==-5e-07?$1:1/0):5 w lp t 'phi=0.0'.i unset multiplot
内容的提问来源于stack exchange,提问作者Suntory
相关产品推荐
相关产品推荐

