Gnuplot меняет цвет баров в гистограмме

Можно ли изменить цвет столбцов в Gnuplot script динамически? У меня есть следующий script

reset
fontsize = 12
set term postscript enhanced eps fontsize
set output "bargraph_speedup.eps"
set style fill solid 1.00 border 0
set style histogram
set style data histogram
set xtics rotate by -45
set grid ytics linestyle 1
set xlabel "Benchmarks" font "bold"
set ylabel "Relative execution time vs. reference implementation" font "bold"
set datafile separator ","
plot 'bm_speedup.dat' using 2:xtic(1) ti "Speedup" linecolor rgb "#00FF00"

который генерирует этот график:

Generated plot

Можно ли сделать цвет баров, которые ниже нуля красного?

Спасибо,
Свен

Ответы

Ответ 1

Вы можете воспроизвести это поведение с помощью стиля boxes:

Мои тестовые данные:

zip 2
baz 2
bar -1
cat 4
foo -3

И затем построим график с помощью gnuplot:

set style line 1 lt 1 lc rgb "green"
set style line 2 lt 1 lc rgb "red"
set style fill solid
plot 'test.dat'  u (column(0)):2:(0.5):($2>0?1:2):xtic(1) w boxes lc variable
#                  #xval:ydata:boxwidth:color_index:xtic_labels

Ответ 2

Вы можете разбить файл данных на две части, положительные значения и отрицательные, и разделить их отдельно:

plot 'bm_speedup_pos.dat' using 2:xtic(1) ti "Faster" linecolor rgb "#00FF00", \
     'bm_speedup_neg.dat' using 2:xtic(1) ti "Slower" linecolor rgb "#FF0000"

Или, если вам нужно всего лишь создать несколько графиков, несколько раз, общий метод состоит в том, чтобы генерировать необработанный график в gnuplot, а затем обрабатывать его в редакторе изображений для настройки цветов. Если вы идете по этому маршруту, я предлагаю, чтобы gnuplot генерировал график в формате SVG, что даст вам гораздо лучшие графики, чем любые форматы растровых изображений.

Ответ 3

Не похоже, что гистограмма позволяет вам это сделать. Может быть так:

set boxwidth 0.3
f(v)=v<0?1:2
plot 'bm_speedup.dat' using 0:2:(f($2)):xticlabels(1) with boxes ti "Speedup" lc variable

Ответ 4

На самом деле вы также можете использовать переменную linecolor rgb и указать цвет следующим образом:

plot 'bm_speedup.dat' using 2:xtic(1):($2 >= 0 ? 0x00FF00 : 0xFF0000) ti Speedup lc rgb variable