Shift бар расположения на мультибар бар - PullRequest
0 голосов
/ 06 марта 2020

много поисков не дали рабочего решения проблемы python matplotlib. Я уверен, что упускаю что-то простое ...

MWE:

import pandas as pd
import matplotlib.pyplot as plt

#MWE plot
T = [1, 2, 3, 4, 5, 6]
n = len(T)
d1 = list(zip([500]*n, [250]*n))
d2 = list(zip([250]*n, [125]*n))

df1 = pd.DataFrame(data=d1, index=T)
df2 = pd.DataFrame(data=d2, index=T)

fig = plt.figure()
ax = fig.add_subplot(111)

df1.plot(kind='bar', stacked=True, align='edge', width=-0.4, ax=ax)
df2.plot(kind='bar', stacked=True, align='edge', width=0.4, ax=ax)    
plt.show()

Генерирует: Смещенный график

Независимо от того, какие параметры Я играюсь с тем, что первый бар обрезается слева. Если я строю только один столбец (то есть не кластеры столбцов), столбцы не обрезаются, и фактически с обеих сторон есть хорошее ровное пространство.

Я жестко закодировал данные для этого MWE; однако я пытаюсь найти общий способ c для обеспечения правильного выравнивания, поскольку я, скорее всего, произведу МНОЖЕСТВО этих графиков с различным количеством элементов на оси x и, возможно, различным количеством столбцов в каждом кластере.

Как мне сместить столбцы так, чтобы они правильно располагались по оси x с ровным пробелом?

1 Ответ

1 голос
/ 06 марта 2020

Все зависит от ширины, которую вы кладете на свои участки. Положите немного xlim.

import pandas as pd
import matplotlib.pyplot as plt

#MWE plot
T = [1, 2, 3, 4, 5, 6]
n = len(T)
d1 = list(zip([500]*n, [250]*n))
d2 = list(zip([250]*n, [125]*n))

df1 = pd.DataFrame(data=d1, index=T)
df2 = pd.DataFrame(data=d2, index=T)

fig = plt.figure()
ax = fig.add_subplot(111)

df1.plot(kind='bar', stacked=True, align='edge', width=-0.4, ax=ax)
df2.plot(kind='bar', stacked=True, align='edge', width=0.4, ax=ax)   
plt.xlim(-.4,5.4) 
plt.show()

Example

Надеюсь, что это работает!

...