Подтвердить что ты не робот

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 устраняет проблему, я думаю, что есть какой-то деление на нуль или что-то в этом роде.

Спасибо

4b9b3361

Ответ 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)

Сделал бы то, что вам нужно.