您可以使用外部程序從第一列獲取值,然後根據該值有條件地繪製數據。
例如,使用python3(和Windows風格引號),我們可以做
values = system('python -c "data = sorted(set(x.split()[0] for x in open(\"datafile\",\"r\"))); print(\"\n\".join(data))"')
這將導致變量值包含"data_1 data_2"
。現在,我們可以使用plot for
循環這個變量。我們測試每一行以查看第一列值是否正確。如果不是,我們使用值1/0
,這會導致gnuplot跳過該行。
plot for [w in values] datafile u 2:((strcol(1) eq w)?$3:1/0) with points pt 7 t w

當然,這導致在曲線不連續。如果我們不想要(例如,使用線條樣式),我們可以使用外部程序進行過濾。例如,用awk(與Windows引號)
plot for [w in values] sprintf('< awk "($1==\"%s\")" datafile',w) u 2:3 with lines t w

這裏我們使用sprintf
建立用awk的指數,我們重定向命令正在處理:
< awk "($1==\"data_1\")" datafile
< awk "($1==\"data_2\")" datafile
使用標準的unix命令,我們也可以做(Windows報價)
values = system('awk "{print $1}" datafile | sort | uniq')
這肯定是要走如果OP可以重組文件的方式(和他們說他們可以自由地這樣做)。我想用所提供的文件結構來回答它。然而,這種重組是可能的,這是更簡單的方法。 – Matthew