2014-08-06 5 views
2

Ниже приведен код gnuplot, который создает кластерную стеклянную гистограмму.Ярлыки для каждой категории и для каждого столбца для кластеризованной гистограммы сложенной таблицы

set terminal postscript eps enhanced 14 
set datafile separator ";" 
set output 'stacked_boxes.eps' 
set auto x 
set yrange [0:30] 
set xtics 1 
set style fill solid border -1 
num_of_categories=2 
set boxwidth 0.3/num_of_categories 
dx=0.2 
offset=-0.1 
ddx=0.2 
set key off 
plot 'data.explorer0.csv' using ($1+offset):($3+$4) title "explorer0(sync)" linecolor rgb "#cc0000" with boxes, \ 
    ''     using ($1+offset):3 title "explorer0(wait)" linecolor rgb "#ff0000" with boxes, \ 
    'data.explorer1.csv' using ($1+offset+dx):($3+$4) title "explorer1(sync)" linecolor rgb "#cc0000" with boxes, \ 
    ''     using ($1+offset+dx):3 title "explorer1(wait" linecolor rgb "#ff0000" with boxes, \ 
    'data.collector0.csv' using ($1+dx+ddx):($3+$4) title "collector0(post)" linecolor rgb "#00cc00" with boxes, \ 
    ''     using ($1+dx+ddx):3 title "collector0(poll)" linecolor rgb "#00ff00" with boxes, \ 
    'data.collector1.csv' using ($1+dx+ddx+dx):($3+$4) linecolor rgb "#00cc00" with boxes, \ 
    ''     using ($1+dx+ddx+dx):3 notitle linecolor rgb "#00ff00" with boxes here 

Как создать ярлыки как для каждой марки, так и для каждой категории? Четыре бара вместе образуют категорию. Пусть категории (c0, c1, c2) и бары для каждой категории будут (e0, e1, c0, c1).

Участок может быть воспроизведен с помощью следующих файлов данных:

data.explorer0.csv:

#level;explorerid;sync;wait;etc 
"0";"e0";"2";"2" 
"2";"e0";"4";"4" 
"4";"e0";"6";"6" 

data.explorer1.csv:

#level;explorerid;sync;wait;etc 
"0";"e1";"7";"5" 
"2";"e1";"6";"10" 
"4";"e1";"5";"5" 

data.collector0.csv:

#level;collectorid;sync;wait;etc 
"0";"c0";"2";"2" 
"2";"c0";"4";"4" 
"4";"c0";"6";"6" 

data.collector1.csv:

#level;collectorid;sync;wait;etc 
"0";"c1";"5";"5" 
"2";"c1";"8";"10" 
"4";"c1";"9";"5" 

stacked clustered plot

+0

Christoph, не понял, что я уже писал это. Я все еще смотрел пару ссылок, которые говорят об этом и пробовали. Позвольте мне изменить вопрос и добавить файлы данных, а также – Sandeep

+0

Исправленный вопрос. Надеюсь, это понятно. Что касается ярлыков для бара, они упоминаются как файл. Но это не обязательно, что мы читаем его из файла. – Sandeep

+0

Да, теперь его ясный :). Возможно ли вам переставить ваши файлы данных (например, один файл данных для одной категории, а не один для штрих-типа?) Это позволит вам использовать стиль построения гистограммы, который делает мысли намного проще. Вы в Linux? В этом случае это также можно было бы сделать «на лету». – Christoph

ответ

1

Я нашел источник вашего сценария: Gnuplot Histogram Cluster (Bar Chart) with One Line per Category :) Я думал о решении, как solution 2 упоминается в этом ответе, но это не работает правильно с красными и зелеными цветами ниже друг друга плюс укладка данных.

Сценарий, который вы опубликовали, нуждается только в очень небольших модификациях. Чтобы поместить метки, содержащиеся во втором столбце, в виде xticklabels, вы можете использовать функцию xtic в операторе using.

Этикетки категории могут быть размещены правильно только с set labels. X-координата метки задается в единицах первой оси x, y-значение как абсолютное значение в символьных единицах. Кроме того, вам необходимо вручную увеличить нижнее поле, чтобы сделать пространство для ярлыков категорий, которые не учитываются в автоматических расчетах полей. Это делается с помощью set bmargin 3, который устанавливает нижнее поле в три высоты символов.

Вот Измененный скрипт

set terminal postscript eps enhanced 14 
set datafile separator ";" 
set output 'stacked_boxes.eps' 
set auto x 
set yrange [0:30] 
set xtics 1 nomirror 
set style fill solid border -1 
num_of_categories=2 
set boxwidth 0.3/num_of_categories 
dx=0.2 
offset=-0.1 
ddx=0.2 
set key off 

set bmargin 3 
set label center "cat0" at first 0+offset/2+dx+ddx/2, char 1 
set label center "cat1" at first 2+offset/2+dx+ddx/2, char 1 
set label center "cat2" at first 4+offset/2+dx+ddx/2, char 1 

plot 'data.explorer0.csv' using ($1+offset):($3+$4):xtic(2) title "explorer0(sync)" linecolor rgb "#cc0000" with boxes, \ 
    ''     using ($1+offset):3 title "explorer0(wait)" linecolor rgb "#ff0000" with boxes, \ 
    'data.explorer1.csv' using ($1+offset+dx):($3+$4):xtic(2) title "explorer1(sync)" linecolor rgb "#cc0000" with boxes, \ 
    ''     using ($1+offset+dx):3 title "explorer1(wait" linecolor rgb "#ff0000" with boxes, \ 
    'data.collector0.csv' using ($1+dx+ddx):($3+$4):xtic(2) title "collector0(post)" linecolor rgb "#00cc00" with boxes, \ 
    ''     using ($1+dx+ddx):3 title "collector0(poll)" linecolor rgb "#00ff00" with boxes, \ 
    'data.collector1.csv' using ($1+dx+ddx+dx):($3+$4):xtic(2) linecolor rgb "#00cc00" with boxes, \ 
    ''     using ($1+dx+ddx+dx):3 notitle linecolor rgb "#00ff00" with boxes 

и его выход с помощью GNUPLOT 4.6.5:

enter image description here

+0

Кристоф, спасибо. Он работает отлично. – Sandeep

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

  • Нет связанных вопросов^_^