Как иметь логарифмические ячейки в гистограмме Python
насколько я знаю, опция Log=True в функции гистограммы относится только к оси y.
P.hist(d,bins=50,log=True,alpha=0.5,color='b',histtype='step')
Мне нужно, чтобы бункеры были равномерно распределены в log10. Есть ли что-то, что может это сделать?
4 ответа:
используйте logspace () для создания геометрической последовательности и передачи ее в параметр bins. И задать масштаб абсцисс в логарифмическом масштабе.
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()
самый прямой способ-просто вычислить 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()
следующий код показывает, как вы можете использовать
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")
в дополнение к тому, что было заявлено, выполнение этого на панд dataframes работает также:
some_column_hist = dataframe['some_column'].plot(bins=np.logspace(-2, np.log10(max_value), 100), kind='hist', loglog=True, xlim=(0,max_value))
Я бы предупредил, что может возникнуть проблема с нормализацией бункеров. Каждый бин больше предыдущего, и поэтому должен быть разделен на его размер, чтобы нормализовать частоты перед построением графика, и кажется, что ни мое решение, ни решение HYRY не объясняют этого.