Мне нужно, чтобы ящики были равномерно размещены в log10. Есть ли что-то, что можно сделать?
Ответ 1
используйте logspace() для создания геометрической последовательности и передайте ее параметру bin. И установите шкалу xaxis, чтобы записать масштаб.
import pylab as pl
import numpy as np
data = np.random.normal(size=10000)
pl.hist(data, bins=np.logspace(np.log10(0.1),np.log10(1.0), 50))
pl.gca().set_xscale("log")
pl.show()
Ответ 2
Самый прямой способ - это просто вычислить log10 пределов, вычислить линейно разнесенные ячейки, а затем преобразовать обратно, увеличив степень до 10, как показано ниже:
import pylab as pl
import numpy as np
data = np.random.normal(size=10000)
MIN, MAX = .01, 10.0
pl.figure()
pl.hist(data, bins = 10 ** np.linspace(np.log10(MIN), np.log10(MAX), 50))
pl.gca().set_xscale("log")
pl.show()
Ответ 3
Следующий код показывает, как вы можете использовать bins='auto' с масштабом журнала.
import numpy as np
import matplotlib.pyplot as plt
data = 10**np.random.normal(size=500)
_, bins = np.histogram(np.log10(data + 1), bins='auto')
plt.hist(data, bins=10**bins);
plt.gca().set_xscale("log")
Ответ 4
В дополнение к тому, что было указано, выполнение этого в pandas данных также работает:
Я бы предупредил, что может быть проблема с нормализацией корзины. Каждый бит больше, чем предыдущий, и поэтому должен быть разделен на его размер, чтобы нормализовать частоты перед построением графика, и кажется, что ни мое решение, ни решение HYRY не учитывают это.