Я хотел бы создать сгруппированную столбчатую диаграмму, которая показывает настроенный индекс даты и времени - просто показывает месяц и год вместо полных дат. Я хочу, чтобы столбцы были сгруппированы, а не сложены.
Я предположил, что pandas мог бы легко справиться с этим, используя:
import pandas as pd
import matplotlib.pylab as plt
import matplotlib.dates as mdates
testdata = pd.DataFrame({"A": [1, 2, 3]
,"B": [2, 3, 1]
, "C": [2, 3, 1]}
,index=pd.to_datetime(pd.DatetimeIndex(
data=["2019-03-02", "2019-04-01","2019-05-01"])))
ax = testdata.plot.bar()
Это создает сюжет, который я хочу, я просто хотел бы изменить дату на что-то более простое, например март 2019 г. , Апрель 2019 года, май 2019 года. ![grouped Bar charts but the x-Axis labels suck](https://i.stack.imgur.com/A9H1M.png)
Я предполагал, что использование пользовательского форматера даты будет работать, поэтому я попытался
ax.xaxis.set_major_locator(mdates.MonthLocator())
ax.xaxis.set_major_formatter(mdates.DateFormatter('%b %Y'))
Но чем больше не осталось моих ярлыковполностью. И этот вопрос подразумевает, что у панд и DateFormatter есть немного сложные отношения. Поэтому я попытался сделать это с основами Matplotlib:
fig, ax = plt.subplots()
width = 0.8
ax.bar(testdata.index, testdata["A"])
ax.bar(testdata.index, testdata["B"])
ax.bar(testdata.index, testdata["C"])
ax.xaxis.set_major_locator(mdates.MonthLocator())
ax.xaxis.set_major_formatter(mdates.DateFormatter('%b %Y'))
plt.show()
Теперь представление даты соответствует ожидаемому (хотя пробел может быть уменьшен), но данные перекрываются, что не помогает. ![enter image description here](https://i.stack.imgur.com/C83nb.png)
Определение ширины и вычитание ее из значений x (как обычно предлагается) не поможет из-за использования DateTime-Index, который я использую. Я получаю сообщение об ошибке, что вычитание DatetimeIndes и float не поддерживается.
fig, ax = plt.subplots()
width = 0.8
ax.bar(testdata.index-width, testdata["A"])
ax.bar(testdata.index, testdata["B"])
ax.bar(testdata.index+width, testdata["C"])
ax.xaxis.set_major_locator(mdates.MonthLocator())
ax.xaxis.set_major_formatter(mdates.DateFormatter('%b %Y'))
plt.show()
Так что теперь у меня заканчиваются идеи и надежда на ввод