gnuplot - условные цвета на графике точек

У меня есть следующие данные:

ClockIndex       Max AvgStd  Avg      Num    Threshold
"ck1 (1.54 GHz)" 35  +16.30   11    11583    X
"ck2 (1.54 GHz)" 28  +16.66   12    10669    -
"ck3 (1.54 GHz)" 29  +14.47    9     8036    -
"ck4 (1.54 GHz)" 35  +18.99   12     5685    -
"ck5 (1.54 GHz)" 9   +6.04     3       11    -

Я рисую столбцы 2, 3, 4 вместе на графике точек, по одной строке на запись.

Используя этот код:

set xtics rotate
set xlabel ""
set ylabel "Levels"
set title "Levels - foo"
set key autotitle columnhead
set term png medium size 1200,600
set grid
set output "foo.png"
plot "foo.rpt" using 2:xticlabels(1) with points pt 13 ps 2 lt rgb "blue",\
"" using 3:xticlabels(1) with points pt 13 ps 2 lt rgb "red",\
"" using 4:xticlabels(1) with points pt 13 ps 2 lt rgb "black

**Цель: если в столбце «Порог» есть «X», я хочу, чтобы точка «Макс.» была зеленой, а не синей.

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

plot "< awk '{if($6 == \"X\") print }' foo.rpt" using 2:xticlabels(1) with points pt 13 ps 2 lt rgb "blue",\
"" using 3:xticlabels(1) with points pt 13 ps 2 lt rgb "red",\
"" using 4:xticlabels(1) with points pt 13 ps 2 lt rgb "black"
"< awk '{if($6 == \"-\") print }' foo.rpt" using 2:xticlabels(1) with points pt 13 ps 2 lt rgb "green",\
"" using 3:xticlabels(1) with points pt 13 ps 2 lt rgb "red",\
"" using 4:xticlabels(1) with points pt 13 ps 2 lt rgb "black"

Я продолжаю получать ошибки, такие как:

"foo_gnuplot", line 11: warning: Skipping data file with no valid points

Любая помощь будет принята с благодарностью! Большое спасибо, что заглянули! :)


person user5150183    schedule 24.07.2015    source источник


Ответы (2)


Вы можете сделать это следующим образом:

plot "foo.rpt" using 2:xticlabels(1) with points pt 13 ps 2 lt rgb "blue",\
"" using 3:xticlabels(1) with points pt 13 ps 2 lt rgb "red",\
"" using 4:xticlabels(1) with points pt 13 ps 2 lt rgb "black",\
"" using (strcol(6) eq "X" )?($2):(1/0):xticlabels(1) with points pt 13 ps 2 lt rgb "green"

(condition)?($plotThisValue):(1/0) — это обычная техника gnuplot для построения условных графиков.

С этим кодом исходная точка заменяется зеленой. (Если вы хотите полностью удалить исходную (теперь скрытую) синюю точку, вы можете использовать ту же технику в первой строке вашей команды построения графика.)

person havogt    schedule 24.07.2015
comment
Большое спасибо, я ценю помощь! - person user5150183; 24.07.2015
comment
Привет, хавогт ... Я забыл добавить 6-й столбец в свой набор данных. Это сработало после этого. Спасибо еще раз! - person user5150183; 24.07.2015

Большое спасибо havogt за отличный ответ! Вот что я в итоге сделал:

plot "foo.rpt" using 3:xticlabels(1) with points pt 13 ps 2 lt rgb "red",\
"" using 4:xticlabels(1) with points pt 13 ps 2 lt rgb "black",\
"" using (strcol(6) eq "X" )?($2):(1/0):xticlabels(1) with points pt 13 ps 2 lt rgb "green"
"" using (strcol(6) eq "-" )?($2):(1/0):xticlabels(1) with points pt 13 ps 2 lt rgb "blue"

Прекрасно работает! Очень ценю помощь!

person user5150183    schedule 24.07.2015