2010-08-07 6 views
3

У меня этот файл как data.dat:Гистограмма с числовой осью х в gnuplot?

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 

Я Plot эти данные как гистограмму с помощью этого сценария, 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: Histogram with x axis date error» говорит, что вы не можете:

Но это будет трудно вытащить й-координату даты из файла данных, ...

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

Спасибо,

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

ответ

2

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

Однако выясняется, что $ может ссылаться на столбец, и они могут использоваться для фактического «перестановки» баров во втором (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 

... то есть, данные должны быть введены несколько раз, так как она поступает из стандартного ввода - эта проблема обсуждается в gnuplot - do multiple plots from data file with built-in commands.

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

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

1

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

enter image description here

+0

Большое спасибо за размещение решение, @hsxz - ура! – sdaau

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

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