Гистограмма с числовой осью X в gnuplot? - PullRequest
3 голосов
/ 07 августа 2010

У меня есть этот файл как data.dat:

Xstep Y1 Y2 Y3 Y4
332 1.22 0.00 0.00 1.43
336 5.95 12.03 6.11 10.41
340 81.05 81.82 81.92 81.05
394 11.76 6.16 10.46 5.87
398 0.00 0.00 1.51 1.25
1036 0.03 0.00 0.00 0.00

Я могу построить эти данные в виде гистограммы с помощью этого сценария, hist-v1.gplot (используя set style data histogram):

set xlabel "X values"
set ylabel "Occurence"
set style data histogram
set style histogram cluster gap 1
set style fill solid border -1
set term png
set output 'hist-v1.png'
set boxwidth 0.9
# attempt to set xtics so they are positioned numerically on x axis:
set xtics ("332" 332, "336" 336, "340" 340, "394" 394, "398" 398, "1036" 1036)  
# ti col reads the first entry of the column, uses it as title name 
plot 'data.dat' using 2:xtic(1) ti col,  '' u 3 ti col, '' u 4 ti col, '' u 5 ti col

И вызывая:

gnuplot hist-v1.gplot && eog hist-v1.png

это изображение генерируется: image hist-v1.png http://img202.imageshack.us/img202/3974/histv1.png

Однако вы можете заметить, что ось X не масштабируется численно -он понимает значения X как категории (т. е. это ось категорий).

Я могу получить более числовую ось X с помощью следующего сценария, hist-v2.gplot (используя with boxes):

set xlabel "X values"
set ylabel "Occurence"
# in this case, histogram commands have no effect
set style data histogram
set style histogram cluster gap 1
set style fill solid border -1
set term png
set output 'hist-v2.png'
set boxwidth 0.9
set xr [330:400]
# here, setting xtics makes them positioned numerically on x axis:
set xtics ("332" 332, "336" 336, "340" 340, "394" 394, "398" 398, "1036" 1036)  
# 1:2 will ONLY work with proper xr; since we have x>300; xr[0:10] generates "points y value undefined"!
plot 'data.dat' using 1:2 ti col smooth frequency with boxes, '' u 1:3 ti col smooth frequency with boxes

И по телефону:

gnuplot hist-v2.gplot && eog hist-v2.png

генерируется это изображение: image hist-v2.png http://img266.imageshack.us/img266/6717/histv2.png

К сожалению, бары здесь перекрываются, так что это сложночитать график.

Есть ли способ сохранить ось X числовой шкалы, как в hist-v2.png, но сохранить 'бары' рядом с, как в hist-v1.png?В этой теме " Re: гистограмма с ошибкой даты по оси x " говорится, что вы не можете:

Но будет трудно извлечь дату с координатой x из файла данных,...

но тогда это относится к другой проблеме ...

Спасибо,

Приветствия!

Ответы [ 2 ]

2 голосов
/ 08 августа 2010

Хорошо, после прочтения справки gnuplot, кажется, что стиль гистограммы будет '' всегда '' интерпретировать ось x как последовательные записи / категории - так что действительно, кажется, нет никакого способа получить числовую осьсо стилем гистограммы.

Однако оказывается, что $ может ссылаться на столбец, и они могут быть использованы для фактического «перемещения» баров во втором примере (стиль frequency with boxes);так с этим кодом как hist-v2b.gplot:

set xlabel "X values"
set ylabel "Occurence"
set style fill solid border -1
set term png
set output 'hist-v2.png'
set boxwidth 0.9
set xr [330:400]
# here, setting xtics makes them positioned numerically on x axis:
set xtics ("332" 332, "336" 336, "340" 340, "394" 394, "398" 398, "1036" 1036)  
# 1:2 will ONLY work with proper xr; since we have x>300; xr[0:10] generates "points y value undefined"!
plot 'data.dat' using ($1-0.5):2 ti col smooth frequency with boxes, '' u ($1-0.25):3 ti col smooth frequency with boxes, '' u ($1+0.25):4 ti col smooth frequency with boxes, '' u ($1+0.5):5 ti col smooth frequency with boxes

И по вызову:

gnuplot hist-v2b.gplot && eog hist-v2b.png

генерируется это изображение: image hist-v2b.png http://img823.imageshack.us/img823/805/histv2b.png

... что, во-первых, мне очень хотелось.

Просто небольшая заметка - я изначально хотел использовать скрипт со встроенными данными;для такой установки ее нужно записать как

plot '-' using ($1-0.5):2 ti col smooth frequency with boxes, '-' u ($1-0.25):3 ti col smooth frequency with boxes
Xstep Y1 Y2 Y3 Y4
332 1.22 0.00 0.00 1.43
336 5.95 12.03 6.11 10.41
340 81.05 81.82 81.92 81.05
394 11.76 6.16 10.46 5.87
398 0.00 0.00 1.51 1.25
1036 0.03 0.00 0.00 0.00
end
Xstep Y1 Y2 Y3 Y4
332 1.22 0.00 0.00 1.43
336 5.95 12.03 6.11 10.41
340 81.05 81.82 81.92 81.05
394 11.76 6.16 10.46 5.87
398 0.00 0.00 1.51 1.25
1036 0.03 0.00 0.00 0.00
end

... то есть данные должны вводиться несколько раз, как это поступает из stdin - эта проблема обсуждается в gnuplot - делать несколько графиков из файла данных с помощью встроенных команд .

Приветствия!

PS: поскольку на диаграмме достаточно места, она будетбыло бы хорошо, если бы мы могли как-то указать отдельные диапазоны оси x;это обсуждается в:

1 голос
/ 17 сентября 2011

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

enter image description here

...