2012-03-22 6 views
3

Я пытаюсь иметь две серии данных, построенных на одном графике в виде блоков в gnuplot. Сценарий выглядит так:Два участка «с коробками» рядом друг с другом с gnuplot

set terminal postscript eps enhanced color 
set title "Distribution of the extrepreneur PnL. Loan $6." 
set output 'pnl_loan6.eps' 


#set xrange [0:] 
set xlabel "Discounted profit" 

set style fill solid 0.8 border -1 
plot 'pnl_loan6.txt' using 1:2 title 'PnL high risk (xi=1)' with boxes,\ 
    'pnl_loan6.txt' using 1:3 title 'PnL high risk (xi=1.5)' with boxes 

однако две серии перекрываются. Вместо перекрытия я хотел бы, чтобы одна серия рисовала его поле в левой половине существующего поля, а другая в правой половине, чтобы они эффективно чередовались. Как мне это сделать?

EDIT:

  1. Я попытался гистограммы, но это не выглядит очень хорошо. Экстрим не был тем, чем я был, и между колоннами были пробелы.
  2. Пример данные (первые 20 столбцов из 100):

данные:

-10.000000 20251.000000 31825.000000 
-4.892638 26743.000000 21310.000000 
0.214725 20362.000000 14590.000000 
5.322087 13023.000000 9645.000000 
10.429449 7730.000000 6347.000000 
15.536812 4636.000000 4331.000000 
20.644174 2714.000000 2964.000000 
25.751536 1647.000000 2121.000000 
30.858899 1044.000000 1586.000000 
35.966261 648.000000 1106.000000 
41.073624 396.000000 873.000000 
46.180986 257.000000 685.000000 
51.288348 166.000000 471.000000 
56.395711 101.000000 369.000000 
61.503073 83.000000 321.000000 
66.610435 52.000000 260.000000 
71.717798 40.000000 184.000000 
76.825160 30.000000 172.000000 
81.932522 21.000000 143.000000 
87.039885 11.000000 116.000000 
+0

Какие данные вы замышляет? (есть ли содержимое в первом поле ваших последовательных целых файлов данных? Если бы у меня был небольшой файл данных для работы, я мог бы дать вам более полный и проверенный ответ) – mgilson

+0

@mgilson, см. edit. – Grzenio

ответ

9

Я не совсем уверен, что вы после этого, но, возможно, это немного hackerish подхода будет делать трюк:

set style fill solid 0.8 border -1 
set boxwidth 0.5 relative 
plot 'pnl_loan6.txt' using ($1+1.27684075):2 title 'PnL high risk (xi=1)' with boxes,\ 
    'pnl_loan6.txt' using ($1-1.27684075):3 title 'PnL high risk (xi=1.5)' with boxes 

Разница в сценарий является

  1. установки ширины рамки делает 0,5 относительную
  2. компенсирует графики на половину расстояния по оси x (это работает только потому, что масштабирование по оси x равноудалено.

В любом случае это Результирующий график:

enter image description here

PS: Вы могли бы хотеть думать о логарифмическом масштабировании по оси у с set logscale y что привело бы к этому сюжету:

enter image description here

+0

Это именно то, что я хочу! Где находятся константы '+ -1.27684075'? Могут ли они измениться, если данные будут изменены? – Grzenio

+0

Константы поступают из ваших данных. Ваши данные разнесены с дельта x = 5.1. Таким образом, ширина каждой ячейки составляет половину этого расстояния (~ 2,55). Вышеупомянутый скрипт перемещает первые поля на половину ширины окна слева (-1.27), а второй - половину ширины окна справа (1.27). Таким образом, константы будут изменять значение, если изменяется интервал изменения x-данных. – mgilson

+0

Можно использовать команду 'stats' (я люблю ее) для автоматического извлечения этой информации:' stats 'file.txt', используя 1 каждый :::: 1 nooutput; ofs = 0,25 * (STATS_max - STATS_min); plot ... используя ($ 1-ofs) ... '. – Christoph

0

Вы можете попробовать histogram стиль ... или, может быть set boxwidth.

EDIT

Для boxwidth см ответа Woltan в - После просмотра вашего файла данных, это, вероятно, лучший подход.

Вы можете сделать:

set style histogram cluster gap 0 
plot "datafile.dat" u 2:xtic(1) with histogram ... 

Однако, вы должны были бы гораздо переполнена осью й в данном случае - Но в том случае, когда вы хотите, чтобы маркировать ось со строками, этот метод отлично работает ,

Одно последнее замечание: Это, вероятно, хорошая идея, чтобы сделать что-то вроде следующего -

set style fill solid 0.8 border -1 
set boxwidth 0.5 relative 
plot 'datafile.dat' using ($1+1.27684075):2 title 'PnL high risk (xi=1)' with boxes,\ 
    '' using ($1-1.27684075):3 title 'PnL high risk (xi=1.5)' with boxes lc rgb "#0000ff" 

Это меняет цвет зеленых коробок на синий (# 0000FF) с ~ 5% людей красный/зеленый цвет. (Возможно, вы можете использовать «синий» вместо «# 0000ff», но последний более общий).

+0

Привет, я пробовал стиль гистограммы, но, похоже, что-то другое. Не могли бы вы привести пример этой ширины? Как указать, что я хочу половину оригинала? Плюс мне нужно переместить один влево, а другой - вправо? – Grzenio

0

В этих ссылках также есть простое приятное решение использования «с коробками» вместо гистограммы для обоих, когда есть только одна группа данных, и когда их больше. Он работал очень хорошо для меня, и не все те, трудно понять смещение расчета, предложенный в принятом ответе:

http://gnuplot-surprising.blogspot.ca/2011/09/plot-histograms-using-boxes.html

+0

Решение в блоге в значительной степени идентично принятому решению. – Grzenio

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