Gnuplotdagi logaritmik miqyosda histogram

Gistapolyot yordamida histogramni ikkala o'qi logaritmik miqyosda tuzish kerak. Log10da teng ravishda joylashtirilgan qutilarga muhtojman. Y o'qi bo'yicha logaritmik o'lchovni ishlatish muammo emas. Asosiy masala x o'qi ustidagi qutini yaratadi. Masalan, log10da 10 ta qutini ishlatib, dastlabki to'plamlar [1], [2], [3] .... [10 - 19] [20-29] ..... [100 190] . Men tarmoq ustida qidirdim, lekin biron-bir amaliy echimni topa olmadim. Agar gnuplotda buni amalga oshirish juda murakkab bo'lsa, buni amalga oshirish uchun boshqa dastur/tilni taklif qila olasizmi?

Kimdir so'raganidek, nima qilishim kerakligini aniqroq aytib beraman. Menda shunday (katta) ro'yxat mavjud:

1   14000000
2   7000000
3   6500000
.
.
.
.
6600    1
8900    1
15000   1
19000   1

Misol uchun, 14 milionli ip manzillar 1 paket, 7 million 2 ta paket yuborganligini ko'rsatadi. 1 ip manzili 6600 paketni yuborgan ..., 1 ip manzili 19000 ta paket jo'natgan. Ikkala burchakdagi qiymatlarni ham ko'rishingiz mumkin, shuning uchun uni logaritmik o'lchovsiz tuzish mumkin emas.

Men buni tezda bajarishim kerak bo'lgan birinchi narsalar ro'yxatni tuzish edi, chunki u gnuplot qutilari yordamida har ikki eksa logscale sozlamalari bilan belgilanadi. Natija tushunarli, ammo juda mos emas. Darhaqiqat, qutilar x o'qi bo'ylab tobora ko'proq noziklashib borgan edi, chunki, aniqki, 10-100 da 1-10 punktlarga qaraganda ko'proq ball mavjud! Shunday qilib, ikkinchi o'n yillikdan keyin haqiqiy mojaro bo'ldi.

3
Men yaxshi tushunish uchun savolni tahrirladim. @Blender bu kutubxonada buni qilish mumkinligiga ishonchingiz komilmi?
qo'shib qo'ydi muallif markusian, manba
Men faqat maplotlib @Blender haqida gapirganimdan foydalanganman va aynan shu narsa kerak edi!
qo'shib qo'ydi muallif markusian, manba
Python bilan Matplotlib. Bu ajoyib vosita.
qo'shib qo'ydi muallif Blender, manba
Histogramni logaritmik x o'qi bilan uyg'otmoqchi bo'lgan ma'lumotlar qanday? Ehtimol, boshqa bir yondashuv ma'lumotlaringizni tuzish uchun mantiqan to'g'ri keladi !?
qo'shib qo'ydi muallif Woltan, manba

3 javoblar

Har ikki eksa logaritmik darajada kattalashtirilgan va xatolikka yo'l qo'yadigan histogramni tuzishga harakat qildim

Log scale on X is incompatible with histogram plots.

Shunday qilib, gnuplot histogramlar bilan x o'qi bo'yicha log fayli qo'llab-quvvatlamaydi.

5
qo'shib qo'ydi
OK, bilish muhim narsa!
qo'shib qo'ydi muallif markusian, manba
Bu, albatta, to'g'ri emas. GnuPlot, log-loglarni qo'llab-quvvatlaydi. Log-log o'lchamlarini set logscale orqali o'rnatishingiz mumkin va keyin faylingizni plot "file.txt" w p buyrug'i bilan tuzishingiz mumkin. "File.txt" har bir satrda (x va y) ikkita qiymatga ega ekanligini va bu faylda x = 0 yoki y = 0 bo'lgan satr mavjud emas, chunki u erda logaritma aniqlanmagan. Bundan tashqari, qutilar bilan rejalashtirish hatto hiyla-nayrangdir. Agar xrange [1: m] shaklida bo'lsa, funktsiyasi faqat bilan ishlaydi va 1 dan m gacha bo'lgan barcha qiymatlar beriladi va nolga teng emas. Aks holda, 0 hajmidagi qutilari => Xato yaratilishi kerak.
qo'shib qo'ydi muallif MightyMouse, manba
Quyidagi misolimni qarang.
qo'shib qo'ydi muallif MightyMouse, manba

GnuPlot-dagi log-log shkalasida joylashish bu ishda boshqa postga zid ravishda amalga oshiriladi.

GnuPlot-da log-log skalasini set logscale buyrug'i bilan o'rnatishingiz mumkin. Keyinchalik, taxmin, x-o'qi va y-o'qining ijobiy (aniq bo'lmagan) qiymatlari bo'lgan faylga ega. Masalan, quyidagi fayl joriy fayl hisoblanadi:

1 0.5
2 0.2
3 0.15
4 0.05

Log-log skalasini o'rnatgandan so'ng, faylni buyruq bilan tuzish mumkin: plot "file.txt" w p , albatta, file.txt faylning nomi. Ushbu buyruq bal bilan chiqish hosil qiladi.

Shuningdek, chizilgan qutilar juda qiyin va ehtimol tavsiya etilmaydi. Birinchidan, x-diapazoni set xrange [1: 4] formasi buyrug'i bilan cheklash va faqatgina qutilar bilan qurish kerak. Aks holda, x-diapazoni aniqlanmagan bo'lsa, xato qaytariladi. Menimcha, bu hodisada chizma (tegishli x-qiymatlar uchun) ba'zi qutilarga o'lchov logi (0) ega bo'lishini talab qiladi, bu albatta aniqlanmagan va shuning uchun xatolik qaytariladi.

Umid qilamanki, bu boshqalarga ham yordam beradi.

4
qo'shib qo'ydi

Siz Matplotlib ni Python ? Matplotlib - chindan ham chiroyli chizilgan kutubxona va Pythonning sodda sintaksisi bilan ishlatilganda, narsalarni juda oson tuzish mumkin:

import matplotlib.pyplot as plot

figure = plot.figure()
axis = figure.add_subplot(1 ,1, 1)
axis.set_yscale('log')

# Rest of plotting code
1
qo'shib qo'ydi
Fikr uchun minnatdorman matplotlib va ​​kerakli narsani qilaman. Logaritmik qutilarga ega bo'lish uchun logspace-dan foydalangan edim. Endi men nima uchun norme = hist funksiyasi True ishlayotganini anglamayapman.
qo'shib qo'ydi muallif markusian, manba
Bu chalkash kalit so'z bo'lib, numpy (matplotlib raqamli backend) ning keyingi yirik versiyasida chiqariladi. Hujjatlar boshqa biror narsani ishlatishni taklif qiladi: noreferrer"> docs. scipy.org/doc/numpy/reference/generated/…
qo'shib qo'ydi muallif Blender, manba