2013-04-04 2 views
2

Я использую Gnuplot для генерации гистограммы, но мне нужно покрасить некоторые из них другим цветом, если значение превышает/под определенным значением. Например, если значение < 10, окрасьте конкретную гистограмму зеленым цветом. Если значение> 10, значение < 20, окрасьте конкретную гистограмму желтого цвета. Если значение> 20, красная гистограмма цвета.Цветные полоски разных цветов для некоторых конкретных значений в Gnuplot

Так что я хочу, чтобы граф быть похожим на это:

х. y. цвет

1. 4. зеленый

2. 15. желтый

3. 40. red

Значения (x и y) поступают из базы данных, поэтому я не могу сообщить Gnuplot, какие значения x я хочу раскрасить, так как значения будут меняться время от времени.

Могу ли я выполнить это с помощью Gnuplot (And php)?

Спасибо!

ответ

5

Вы можете использовать следующий GNUPLOT скрипт:

set style fill transparent solid 0.5 noborder 
set boxwidth 0.95 relative 
set palette model RGB defined (0 "green", 1 "yellow", 2 "red") 
plot 'path\to\your\file' using 1:2:($2<=10 ? 0 : $2<=20 ? 1 : 2) with boxes palette 

Содержимое моего тестового файла являются

1 4 
2 15 
3 40 

и результат я получаю

enter image description here

+0

Пробовали ли вы это? Я получаю кучу розовых коробок ... – mgilson

+0

@mgilson Да, я попробовал, и вы видите мой результат на http://imgur.com/6ZsnvVt. Я использовал данные OP. Моя система - Win7, Gnuplot 4.6 – halex

+0

вы правы! Я должен был попробовать это на другой машине. На моем ноутбуке я все еще использую gnuplot4.4 в качестве установки по умолчанию (хотя у меня также есть 4.6, чтобы играть с ним). В этом случае я даже повышу значение – mgilson

2

Учитывая этот файл данных:

1 4 green 
2 15 yellow 
3 40 red 

Следующая строка работает:

plot for [color in "green red yellow"] 'test.dat' using 1:(strcol(3) eq color ? $2:NaN):(0.95) with boxes lc rgb color 
+0

У меня есть небольшое улучшение для вашего кода: в его текущей форме ящики не окрашены в нужный цвет, который у вас есть в третьем столбце, но тот, который должен быть зеленый - красный, желтый - синий, а красный - зеленый :). Вы можете изменить цвета, соответствующие добавлению 'lc rgb color' в конце вашей строки кода. – halex

+0

@halex - Да, это то, что я хотел делать все время ... Кажется, я не обращал внимания на мои тесты. Благодарю. – mgilson

+0

Наконец, я также даю вам +1 для другого подхода и потому, что неясно, имеет ли OP цвет в качестве третьего столбца. – halex

Смежные вопросы