Почему pandas df.plot.bar () не принимает массив по ширине? - PullRequest
0 голосов
/ 30 апреля 2018

Согласно документации , bar и barh matplotlib принимают одно значение или массив значений ширины, по одному на каждую полосу. Я видел примеры этого вокруг. Тем не менее, он не работает при использовании оболочки pandas, и трассировка стека показывает, что арифметика, которая проверяет X-пределы (Y-пределы, соответственно, для barh), не может обрабатывать несколько значений ширины. В чем дело?

import pandas as pd
import matplotlib.pyplot as plt

# Minimum reproducible bug
df = pd.DataFrame({'value': [3,5,4], 'width': [0.1, 0.5, 1.0]})
plt.close('all')
fig, ax = plt.subplots(1,3)
df.plot.barh(ax=ax[0], width=0.9, stacked=True)  # Base case
df.plot.bar(ax=ax[1], width=df.width.values)     # Throws error after drawing bars, before setting x-limits
df.plot.barh(ax=ax[2], width=df.width.values)    # (Analogous to above)

1 Ответ

0 голосов
/ 03 мая 2018

Так что я думаю, что очевидный обходной путь - использовать matplotlib напрямую, потому что он обрабатывает несколько значений ширины / высоты, как и ожидалось.

import pandas as pd
import matplotlib.pyplot as plt

df = pd.DataFrame({'value': [3,5,4], 'width': [0.1, 0.5, 1.0]})

fig, ax = plt.subplots(1,3)
ax[0].barh(df.index, df.value, height=df.width)
ax[1].bar(df.index, df.value, width=df.width)
ax[2].barh(df.index, df.value, height=df.width)
plt.show()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...