使用 gnuplot 中的文本列作为绘图参数

Using a text column in gnuplot as a paramter for plotting

我正在使用一个包含 3 列数据的 csv 文件,如下所示:

Country name, Year, Population value
Afghanistan, 2000, 8774440
Afghanistan, 2001, 8774441
Afghanistan, 2002, 8774442
Germany, 2000, 18774440
Germany, 2001, 18774442
Germany, 2002, 18774444

我正在尝试绘制人口增长图,即年作为 x 轴,值作为 y 轴

我是 gnuplot 的新手,想知道是否可以使用第一列绘制第二列和第三列 列的值为 argument/parameter

我知道可以使用 sed 绘制特定行,例如

plot "<(sed -n '0,2p' p.csv)" using 2:3 with lines

但这只有在硬编码到我的脚本中时才有效

我曾尝试使用 awk 使其正常工作,但无济于事

plot " <(awk '{=='Afghanistan'}' p.csv" using 3:4 with lines

任何帮助将不胜感激

不需要 sed 或 awk。您可以使用三元运算符作为过滤器(请参阅 help ternary)。应该有类似的问题(关于按数字过滤),但是,我现在找不到。

代码:

### plot data filtered with ternary operator
reset session

set datafile separator comma

$Data <<EOD
Afghanistan, 2000, 8774440
Afghanistan, 2001, 8774441
Afghanistan, 2002, 8774442
Germany, 2000, 18774440
Germany, 2001, 18774442
Germany, 2002, 18774444
EOD

mySelection = "Afghanistan"
myFilter(n) = strcol(n) eq mySelection ?  : NaN

set format y "%.0f"
set key top left
set xtics 1

plot $Data u 2:(myFilter(1)) w lp pt 7 title mySelection

### end of code

结果: