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

Gnuplot多数据集绘图颜色分配异常问题求助

问题诊断与解决

你的问题核心是第三个grep命令的正则表达式被shell错误解析,导致第三个数据集包含了所有行(包括weekdays的数据),而后绘制的黄色点覆盖了先绘制的红色weekdays点,看起来像是weekdays变成了黄色。

问题原因

在你的plot命令中,第三个数据源的命令是:

"< grep -e '\^' fraction.csv | sed 's/^//'"

由于整个命令被双引号包裹,shell会解析其中的转义字符:\^会被shell直接转换成^,传给grep的实际正则是^——这是行首锚点,会匹配所有非空行(因为每一行都以行首开头)。因此第三个数据集包含了前两个数据集的所有数据,包括weekdays的全部点,而gnuplot绘制时后画的点会覆盖先画的,所以红色的weekdays点被黄色覆盖,看起来消失了。

解决方案

要让grep正确匹配字面量^字符,需要在shell中正确转义反斜杠,避免shell解析它。有两种可行的修改方式:

  1. 在双引号中用双反斜杠转义:
plot "< grep -e '\\^' fraction.csv | sed 's/^//'" using 1:($4) title 'fridays' ls 3 with points

这里\\^会被shell解析成\^,传给grep的正则就是匹配字面量^的正确表达式。

  1. 用单引号包裹grep的匹配模式(更精准):
    如果你的fridays数据是行首以^开头的行,直接用单引号包裹匹配模式,避免shell解析:
plot "< grep -e '^\^' fraction.csv | sed 's/^//'" using 1:($4) title 'fridays' ls 3 with points

单引号会让shell完全不解析内部字符,grep会正确匹配行首为^的行。

验证

修改后,单独执行第三个命令确认输出仅包含fridays的数据集:

# 对应第一种修改方式
grep -e '\\^' fraction.csv | sed 's/^//'
# 对应第二种修改方式
grep -e '^\^' fraction.csv | sed 's/^//'

再运行gnuplot脚本,三个数据集就会分别显示蓝色、红色、黄色,不会出现覆盖问题。

内容的提问来源于stack exchange,提问作者Grace Sawyer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 10:40:28