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