Построение гистограммы на логарифмической шкале с помощью Matplotlib
Я работаю с DataFrame в Pandas и у меня есть следующая последовательность значений в серии:
x = [2, 1, 76, 140, 286, 267, 60, 271, 5, 13, 9, 76, 77, 6, 2, 27, 22, 1, 12, 7, 19, 81, 11, 173, 13, 7, 16, 19, 23, 197, 167, 1]
Мне было указано построить два гистограммы в Jupyter Notebook с использованием Python 3.6. Я использовал следующий код для первой гистограммы:
x.plot.hist(bins=8)
plt.show()
Я выбрал 8 корзин, так как это, на мой взгляд, выглядело лучше всего. Также мне было указано построить еще одну гистограмму, используя логарифм от x
:
x.plot.hist(bins=8)
plt.xscale('log')
plt.show()
Однако эта гистограмма выглядит УЖАСНО. Я не понимаю, что делаю не так? Я пробовал изменять настройки графика, но все, что я пытался, только ухудшало внешний вид гистограммы. Например, я пробовал вот это:
x.plot(kind='hist', logx=True)
У меня не было никаких других указаний, кроме как "построить логарифм X
в виде гистограммы". Чтобы было понятно, я импортировал Pandas, NumPy и Matplotlib и указал, что график должен отображаться встраиваемым (inline).
Помогите, пожалуйста! Как мне правильно построить логарифмическую гистограмму, чтобы она выглядела более адекватно?
1 ответ(ов)
Согласно моим экспериментам, использование функции np.histogram
может быть излишним, поскольку крайние значения массива x
являются точно минимальным и максимальным, и для их вычисления нет необходимости вызывать np.histogram
.
В примере кода ниже демонстрируется, как использовать логарифмические интервалы для построения гистограммы без необходимости в дополнительном вычислении:
import numpy as np
from matplotlib import pyplot as plt
def plot_loghist(x, bins):
logbins = np.logspace(np.log10(np.min(x)), np.log10(np.max(x)), bins + 1)
plt.hist(x, bins=logbins)
plt.xscale('log')
plot_loghist(np.random.rand(200), 10)
Этот код генерирует случайные значения и строит их гистограмму с использованием логарифмических интервалов, что позволяет избежать лишних вычислений.
Улучшение размера/интервала подграфиков при использовании большого количества подграфиков
Различие между типами str и object в Pandas
Как подогнать синусоиду к данным с помощью pylab и numpy?
Как исправить ошибку IndexError: недопустимый индекс для скалярной переменной
Цветовой график 2D массива в matplotlib