Гістаграма ў лагарыфмічнай шкале ў Gnuplot

Я павінен пабудаваць гістаграму ў лагарыфмічнай маштабе па абедзвюх восях з дапамогай GNUPLOT. Мне трэба, каб кантэйнеры быць раўнамерна размеркаваны ў log10. З дапамогай лагарыфмічнай шкалы на восі ў не з'яўляецца праблемай. Асноўная праблема заключаецца ў стварэнні кошыка на восі х. Напрыклад, пры выкарыстанні 10 бункераў ў log10, першыя кантэйнеры будуць [1], [2], [3] .... [10 - 19] [20 - 29] ..... [100 190] і г.д. , Я шукаў у сеткі, але я не мог знайсці практычнае рашэнне. Калі рэалізаваць яго ў Gnuplot занадта шмат складана маглі б вы прапанаваць якой-небудзь іншай праграмнае забеспячэнне/мову, каб зрабіць гэта?

Як нехта спытаў я растлумачу больш канкрэтна, што мне трэба рабіць. У мяне ёсць (велізарны) спіс, як гэта:

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

Гэта паказвае, што, напрыклад, 14 Milions з IP-адрасоў паслаў 1 пакет, 7 Milions 2 пакета .... 1 IP адрас пасланага 6600 пакетаў, ..., 1 IP адрас паслаў 19000 пакетаў. Як вы можаце бачыць значэння па абедзвюх восях даволі высокія, таму я не магу пабудаваць яго без лагарыфмічнай шкалы.

Першае, што я спрабаваў, таму што мне трэба было зрабіць гэта хутка намышляе гэты спіс, як гэта з устаноўкай Gnuplot logscale па абедзвюх восях з дапамогай скрынкі. Вынік зразумелы, але не занадта дарэчы. На самай справе, скрынкі станавіліся ўсё больш і больш тонкія ладзіцца на восі х, таму што, відавочна, ёсць больш ачкоў у 10-100, чым у 1-10! Так яна стала блытанінай пасля другога дзесяцігоддзя.

3
Я рэдагаваў пытанне для лепшага разумення. @Blender вы ўпэўненыя, што гэта магчыма зрабіць з гэтай бібліятэкай?
дададзена аўтар markusian, крыніца
Я проста выкарыстаў maplotlib @Blender тлумачыць, і гэта менавіта тое, што мне трэба!
дададзена аўтар markusian, крыніца
Matplotlib з Python. Гэта дзіўны інструмент.
дададзена аўтар Blender, крыніца
Якія дадзеныя ў вас ёсць, што вы хочаце пабудаваць гістаграму з лагарыфмічнай восі х? Можа быць, іншы падыход мае сэнс пабудаваць вашыя дадзеныя!?
дададзена аўтар Woltan, крыніца

3 адказы

Я паспрабаваў пабудова гістаграмы з абедзвюма восямі быць Лагарыфмічны маштабуецца і GNUPLOT праз памылку

Log scale on X is incompatible with histogram plots.

Такім чынам, аказваецца, што GNUPLOT не падтрымлівае лагарыфмічнай шкалы на восі х з гістаграм.

5
дададзена
Добра, што гэта важная рэч, каб ведаць!
дададзена аўтар markusian, крыніца
Гэта, вядома, не так. GNUPLOT, робіць падтрымку участкаў лог-лог. Вы можаце ўсталяваць билогарифмическое маштабаванне праз набор logscale , а затым вы можаце пабудаваць свой файл з дадзенымі з дапамогай каманды ўчастак «file.txt» ш р . Здагадка, што «file.txt» мае два значэння для кожнага радка (х і ў), і няма ніякай лініі ў гэтым файле, які мае й = 0 або Y = 0, так як лагарыфм не вызначаны там. Акрамя таго, пабудова з скрынкамі яшчэ складаней. Ён можа працаваць <�я> толькі калі The xrange мае выгляд [1: м], а таксама ўсе значэння х паміж 1 і м прыведзены і ня роўны нулём. У адваротным выпадку, скрынкі памеру 0 павінны быць згенераваныя => Памылка.
дададзена аўтар MightyMouse, крыніца
Глядзіце мой прыклад рашэння ніжэй.
дададзена аўтар MightyMouse, крыніца

Змову ў лагарыфмічнай маштабе ў GNUPLOT цалкам выканальнае супярэчыць іншаму пасадзе ў гэтай тэме.

Можна ўсталяваць маштаб лагарыфмічнай ў GNUPLOT з дапамогай каманды ўсталяваць logscale . Тады здагадка, што ў нас ёсць файл з станоўчым (строго не роўна нулю) значэнні як у восі х, а таксама восі у. Напрыклад, наступны файл з'яўляецца сапраўдным файлам:

1 0.5
2 0.2
3 0.15
4 0.05

Пасля ўстаноўкі маштабу лагарыфмічнай можна пабудаваць файл з дапамогай наступнай каманды: <�Код> ўчастак «file.txt» ш р , дзе, вядома, file.txt гэтае імя файла. Гэтая каманда будзе генераваць выхадны сігнал з кропкамі.

Варта таксама адзначыць, што пабудова скрынкі з'яўляецца складаным і, верагодна, не рэкамендуецца. Адным з першых павінен абмежаваць xrange з дапамогай каманды кшталту набор xrange [1: 4] і толькі затым ўчастак з скрынкамі. У адваротным выпадку, калі х-дыяпазон не вызначаны, вяртаецца памылка. Я мяркую, што ў гэтым выпадку сюжэт патрабуе (для адпаведных значэнняў х) некалькі скрынь, каб мець памер часопіса (0), што, вядома, не вызначана і, такім чынам, вяртаецца памылка.

Спадзяюся, што гэта ясна, і гэта будзе таксама дапамагаць іншым.

4
дададзена

Вы спрабавалі Matplotlib з Python ? Matplotlib гэта сапраўды добрая бібліятэка замалёўкі і пры выкарыстанні простага сінтаксісу Python, вы можаце пабудаваць рэчы даволі лёгка:

import matplotlib.pyplot as plot

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

# Rest of plotting code
1
дададзена
Дзякуючы каментар я пачаў выкарыстоўваць Matplotlib і гэта менавіта тое, што мне было трэба. Я таксама выкарыстоўваў logspace мець лагарыфмічныя бункера. Цяпер я спрабую зразумець, чаму нармаванае = True функцыі чужога не падобна на працу.
дададзена аўтар markusian, крыніца
Гэта зман ключавых слоў і будуць выдаленыя ў наступнай асноўнай версіі Numpy (лікавым бэкэнд Matplotlib в). Дакументацыя мяркуе выкарыстоўваць нешта іншае: дакументы. scipy.org/doc/numpy/reference/generated/…
дададзена аўтар Blender, крыніца