Измените ширину полос с помощью фрейма данных.функция plot () в matplotlib
Я создаю многослойную линейчатую диаграмму, используя:
DataFrame.plot(kind='bar',stacked=True)
Я хочу управлять шириной баров так, чтобы бары были связаны друг с другом, как гистограмма.
я просмотрел документацию, но безрезультатно-какие-нибудь предложения? Возможно ли сделать это таким образом?
2 ответа:
Для всех, кто сталкивается с этим вопросом:
Начиная с pandas 0.14, построение графиков с барами имеет команду "width": https://github.com/pydata/pandas/pull/6644
Приведенный выше пример теперь можно решить просто с помощью
df.plot(kind='bar', stacked=True, width=1)
, Если думаете, что вы должны "постобработка" в barplot с библиотек matplotlib как панды внутренне устанавливает ширину столбцов.
Прямоугольники, образующие полосы, находятся в объектах-контейнерах. Таким образом, вы должны перебрать эти контейнеры и установить ширину прямоугольников по отдельности:
In [208]: df = pd.DataFrame(np.random.random((6, 5)) * 10, index=list('abcdef'), columns=list('ABCDE')) In [209]: df Out[209]: A B C D E a 4.2 6.7 1.0 7.1 1.4 b 1.3 9.5 5.1 7.3 5.6 c 8.9 5.0 5.0 6.7 3.8 d 5.5 0.5 2.4 8.4 6.4 e 0.3 1.4 4.8 1.7 9.3 f 3.3 0.2 6.9 8.0 6.1 In [210]: ax = df.plot(kind='bar', stacked=True, align='center') In [211]: for container in ax.containers: plt.setp(container, width=1) .....: In [212]: x0, x1 = ax.get_xlim() In [213]: ax.set_xlim(x0 -0.5, x1 + 0.25) Out[213]: (-0.5, 6.5) In [214]: plt.tight_layout()