Неоднородная ось в гистограмме matplotlib - PullRequest
0 голосов
/ 25 июня 2018

Я хотел бы построить гистограмму с неоднородной осью X, используя Matplotlib.Например, рассмотрим следующую гистограмму:

import matplotlib.pyplot as plt
values = [0.68, 0.28, 0.31, 0.5, 0.25, 0.5, 0.002, 0.13, 0.002, 0.2, 0.3, 0.45,
      0.56, 0.53, 0.001, 0.44, 0.008, 0.26, 0., 0.37, 0.03, 0.002, 0.19, 0.18,
      0.04, 0.31, 0.006, 0.6, 0.19, 0.3, 0., 0.46, 0.2, 0.004, 0.06, 0.]
plt.hist(values)
plt.show()

Demo histogram

Первый контейнер имеет высокую плотность, поэтому я хотел бы увеличить его.

В идеале, я хотел бы изменить значения на оси x на что-то вроде [0, 0.005, 0.01, 0.02, 0.05, 0.1, 0.2, 0.5, 1], сохраняя постоянную ширину ячейки в графе (но не численно, конечно).Есть ли простой способ добиться этого?Любые комментарии или предложения приветствуются.

Ответы [ 2 ]

0 голосов
/ 25 июня 2018

Хорошее решение от Андре, но ширина корзины не постоянна. Работа с осью log2 соответствует тому, что я искал. Я использую np.logspace , чтобы сделать ширину бина постоянной на графике.

Вот что я в итоге сделал:

import matplotlib.pyplot as plt
values = [0.68, 0.28, 0.31, 0.5, 0.25, 0.5, 0.002, 0.13, 0.002, 0.2, 0.3, 0.45,
        0.56, 0.53, 0.001, 0.44, 0.008, 0.26, 0., 0.37, 0.03, 0.002, 0.19, 0.18,
        0.04, 0.31, 0.006, 0.6, 0.19, 0.3, 0., 0.46, 0.2, 0.004, 0.06, 0.]
bins = np.logspace(-10, 1, 20, base=2)
bins[0]=0
fig, ax = plt.subplots()
plt.hist(values, bins=bins)
ax.set_xscale('log', basex=2)
ax.set_xlim(2**-10, 1)
plt.show()

Histogram log2

0 голосов
/ 25 июня 2018

Использование бункеров решит проблемы. Контейнеры - это значения, которым вы назначаете значения, например, 0,28. Приведенный ниже код дает вам пример использования корзин:

import matplotlib.pyplot as plt
values = [0.68, 0.28, 0.31, 0.5, 0.25, 0.5, 0.002, 0.13, 0.002, 0.2, 0.3, 0.45,
  0.56, 0.53, 0.001, 0.44, 0.008, 0.26, 0., 0.37, 0.03, 0.002, 0.19, 0.18,
  0.04, 0.31, 0.006, 0.6, 0.19, 0.3, 0., 0.46, 0.2, 0.004, 0.06, 0.]
plt.hist(values, bins=[0, 0.005, 0.01, 0.02, 0.05, 0.1, 0.2, 0.5, 1])
plt.show()

Для более удобного построения графика может быть удобно преобразовать ось x в логарифмическую шкалу:

plt.hist(values, bins=[0, 0.005, 0.01, 0.02, 0.05, 0.1, 0.2, 0.5, 1], log=True)

изменяет масштаб журнала по оси y. Добавление следующей строки в ваш код создаст логарифмическую ось x для вашей гистограммы:

plt.xscale('log') 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...