Использование текстового столбца в gnuplot в качестве параметра для построения графиков - PullRequest
1 голос
/ 24 января 2020

Я использую CSV-файл, содержащий 3 столбца со следующими данными:

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, и мне было интересно, можно ли построить 2-й и 3-й столбцы, используя значение первого столбца в качестве аргумента / параметра

Я знаю, что можно отображать отдельные строки, используя sed, например

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

, но это работает, только когда жестко закодировано в моем скрипте

Я попытался использовать awk, чтобы заставить его работать, но безрезультатно

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

любая помощь будет оценили

1 Ответ

3 голосов
/ 24 января 2020

Нет необходимости в 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 ? $3 : 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

Результат:

enter image description here

...