Python Pandas Масштаб журнала гистограмм
Я делаю довольно простую гистограмму с помощью pandas, используя
results.val1.hist(bins=120)
который отлично работает, но я действительно хочу иметь шкалу журнала на оси y, которую я обычно (возможно, неправильно) сделал следующим образом:
fig = plt.figure(figsize=(12,8))
ax = fig.add_subplot(111)
plt.plot(np.random.rand(100))
ax.set_yscale('log')
plt.show()
Если я заменил команду plt
командой pandas, поэтому у меня есть:
fig = plt.figure(figsize=(12,8))
ax = fig.add_subplot(111)
results.val1.hist(bins=120)
ax.set_yscale('log')
plt.show()
приводит к многочисленным копиям одной и той же ошибки:
Jan 9 15:53:07 BLARG.local python[6917] <Error>: CGContextClosePath: no current point.
Я получаю гистограмму логарифмической шкалы, но она имеет только верхние строки баров, но нет вертикальных полос или цветов. Я делаю что-то ужасно неправильно или это просто не поддерживается pandas?
EDIT:
Из кода Paul H я заменил
Добавленный вызов bottom=0.1
to hist
устраняет проблему, я думаю, что есть какой-то деление на нуль или что-то в этом роде.
Спасибо
Ответы
Ответ 1
Трудно диагностировать без каких-либо данных. Для меня работает следующее:
import numpy as np
import matplotlib.pyplot as plt
import pandas
series = pandas.Series(np.random.normal(size=2000))
fig, ax = plt.subplots()
series.hist(ax=ax, bins=100, bottom=0.1)
ax.set_yscale('log')
![enter image description here]()
Ключ здесь состоит в том, что вы передаете ax
функции гистограммы, и вы указываете bottom
, поскольку в шкале журнала нет нулевого значения.
Ответ 2
Я бы рекомендовал использовать параметр log=True
в функции гистограммы pyplot:
import matplotlib.pyplot as plt
plt.hist(df['column_name'], log=True)
Ответ 3
Решение Jean PA является самым простым, наиболее правильным для этого вопроса. Написание этого ответа, поскольку у меня нет комментариев для комментариев.
Для построения гистограммы прямо из pandas, некоторые из аргументов передаются методу matplotlib.hist в любом случае, поэтому:
results.val1.hist(bins = 120, log = True)
Сделал бы то, что вам нужно.