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
Здравей havogt ... Забравих да добавя 6-та колона в моя набор от данни. Работи след това. Благодаря отново! - person user5150183; 24.07.2015

Благодаря много за страхотния отговор! Ето какво в крайна сметка направих:

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