LINUX.ORG.RU

gnuplot,гистограмма с суммированием в логарифмическом масштабе

 


0

1

Здравствуйте уважаемые! Мне необходимо построить в гнуплоте гистограмму данных. Ежели число попадает в определенный столбец его суммировать, однако после этого шкалы прологарифмировать (вот это для меня архиважно!). Вот тут-то и заковыка! По х-ой оси нет ничего проще, а вот по у я суммирую функцией s f. Добавляю по-тихоничку по единичке и тут уж ни logscale его не берет (оно и понятно) ни если просто логарифм брать. Короче привожу код и уповаю...

width=0.5 bin(x, s) = s*int(x/s) set logscale x set boxwidth width set output «0.png» plot '1.txt' u (bin($1,width)):(1.0) s f w boxes fs solid 0.5



Последнее исправление: cetjs2 (всего исправлений: 1)

для кода тут используется: [code]код[/code]

#!/bin/bash

python <<EOF
import random
f = open('data.txt','wb')
for i in xrange(1,10100):
  f.write('%s\n' % str(random.normalvariate(100,10)))
EOF

gnuplot <<EOF
bin(x, s) = s*int(x/s)
unset logscale xy
set table 'tablefilename'
plot 'data.txt' using (bin((\$1), .1)):(1.0) smooth frequency
unset table
set logscale xy
plot 'tablefilename' with boxes
pause 5
EOF

anonymous
()
Ответ на: комментарий от anonymous

Спасибо большое!!! Шкалы строятся как надо)) Но мой гуру недоволен, грит надо чтобы частота тоже прологарифмировалась... А как, я не знаю, логарифм же не аддитивен. И еще требует линию тренда... Помогите пожалуйста, о всезнающие!!

Flirty
() автор топика
Ответ на: комментарий от Flirty
#!/bin/bash

python <<EOF
import random
f = open('data.txt','wb')
for i in xrange(1,10000):
  f.write('%s\n' % str(random.normalvariate(100,20)))
EOF

gnuplot <<EOF
b_width = 0.05
x_width = 0.75 # percent

flog(x, w) = floor(log(x)/w)
binlog(x, w) = exp(w * flog(x,w))
wlog(x, w, xw) = exp(w * (flog(x,w)+xw)) - binlog(x,w)

set table "temp.dat"
plot "data.txt" \
  using (binlog(\$1, b_width)):(1.0) \
  smooth frequency
unset table

set logscale xy
plot "temp.dat" \
  using 1:2:(wlog(\$1, b_width, x_width)) \
  with boxes fs solid 0.5 title "log xy"

pause 5
EOF
anonymous
()
Ответ на: комментарий от Flirty

тренд попробуй сам. это совсем просто. а с формулами советую разобраться. как поймешь, сам сможешь аналогичные вещи делать. начало в функции floor. дальше у boxes третий аргумент.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.