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

Gnuplot中line类型绘图无显示问题求助

Gnuplot line类型子图无显示问题排查

核心原因

你第一个子图用w l(纯线条)绘制,而Gnuplot的线条绘制要求至少两个连续的数据点才能生成可见线条。你的筛选条件($2==-5e-07?$1:1/0)大概率在每个目标数据文件中只匹配到单个数据点:

  • 纯线条(w l)无法基于单个点生成线条,所以子图无显示;
  • 而w lp(linepoint)会显示单个点的标记,因此其余子图正常。

验证方法

临时将第一个子图的绘图指令改为w lp,如果能看到对应的数据点,即可确认是单个点导致的线条无法生成。

解决思路

  1. 确认匹配行数:用命令行工具统计每个文件中符合$2==-5e-07的行数,比如:

    grep "-5e-07" ./phi=0.01/Field/Fields_1.00e+04_800.dat | wc -l
    

    如果结果为1,说明确实只有单个点,此时纯线条无法显示,建议改用w lp或w p(仅点)绘制。

  2. 处理空白行问题:如果数据文件中存在空白行,Gnuplot会将空白行前后的数据视为独立数据集,可能导致每个数据集中仅一个匹配点。可通过以下指令忽略空白行:

    set datafile missing ''  # 忽略空白行,将所有数据视为连续数据集
    

    添加到set multiplot之前,再重新运行代码。

  3. 合并多文件点为线条:如果需要将多个文件的单个点连接成一条线,需调整绘图逻辑,将所有文件的匹配点合并为一个数据集,例如:

    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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 07:33:15