Гистограмма в логарифмическом масштабе в гнуплоте - PullRequest
3 голосов
/ 27 октября 2011

Я должен построить гистограмму в логарифмическом масштабе по обеим осям, используя gnuplot. Мне нужно, чтобы ящики были одинаково разнесены в log10. Использование логарифмической шкалы на оси Y не является проблемой. Основная проблема - создание корзины на оси х. Например, используя 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 миллионов IP-адресов отправили 1 пакет, 7 миллионов 2 пакета .... 1 IP-адрес отправил 6600 пакетов, ..., 1 IP-адрес отправил 19000 пакетов. Как вы можете видеть, значения на обеих осях довольно высокие, поэтому я не могу построить их без логарифмической шкалы.

Первое, что я попробовал, потому что мне нужно было сделать это быстро, было построение этого списка, как это было с настройкой gnuplot logscale на обеих осях с использованием блоков. Результат понятен, но не слишком уместен. Фактически, ящики становились все более и более тонкими, двигаясь прямо по оси x, потому что, очевидно, в 10-100 больше точек, чем в 1-10! Так что после второго десятилетия это стало настоящей неразберихой.

Ответы [ 3 ]

5 голосов
/ 28 октября 2011

Я попытался построить гистограмму с логарифмическим масштабированием обеих осей и gnuplot из-за ошибки

Log scale on X is incompatible with histogram plots.

Похоже, что gnuplot не поддерживает логарифмическую шкалу на оси x с гистограммами.

4 голосов
/ 28 декабря 2012

Построение графиков в масштабе log-log в GnuPlot вполне выполнимо в отличие от других постов в этой теме.

В GnuPlot можно установить масштаб журнала регистрации с помощью команды set logscale. Тогда предполагается, что у нас есть файл с положительными (строго ненулевыми) значениями как по оси x, так и по оси y. Например, следующий файл является допустимым:

1 0.5
2 0.2
3 0.15
4 0.05

После установки масштаба log-log можно вывести файл с помощью команды: plot "file.txt" w p где, конечно, file.txt - это имя файла. Эта команда сгенерирует вывод с точками.

Обратите внимание, что графические поля сложны и, вероятно, не рекомендуется. Сначала нужно ограничить x-диапазон командой вида set xrange [1:4] и только потом строить с помощью ящиков. В противном случае, когда x-диапазон не определен, возвращается ошибка. Я предполагаю, что в этом случае для графика требуется (для соответствующих значений x) для некоторых полей иметь размер log (0), который, конечно, не определен и, следовательно, возвращается ошибка.

Надеюсь, что это ясно, и это также поможет другим.

0 голосов
/ 30 октября 2011

Вы пробовали 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
...