Я пытаюсь создать графику с тремя гистограммами, например:
У меня на самом деле два вопроса:
1) Я пытаюсь использовать параметр 'position' в DataFrame Pandas, но столбцы все еще перекрываются.Есть ли другая альтернатива, кроме уменьшения ширины столбцов?
2) Три бара имеют три общие категории (B, C, D, E), как я могу иметь легенду, которая содержит только фактическиешесть разных категорий?
Мой DataFrame:
A B C D E F
0 0.108858 0.265929 0.537369 2.183963 1.353575 2.938775
1 0.375641 0.198720 0.266806 0.409179 0.286645 0.636405
2 1.179256 0.808986 0.171202 0.946194 0.506783 2.121366
3 1.510399 1.218619 0.307752 0.819865 1.283067 0.213556
И мой тестовый код:
import matplotlib
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
df = pd.DataFrame(abs(np.random.randn(4, 6)), columns=list('ABCDEF'))
print(df)
colors1 = ['#a50f15', '#9ecae1', '#6baed6', '#3182bd']
colors2 = ['#fb6a4a', '#9ecae1', '#6baed6', '#3182bd']
colors3 = ['#fcbba1', '#9ecae1', '#6baed6', '#3182bd']
fig, ax = plt.subplots(figsize=(8,6))
df.plot(ax=ax, y=['A', 'B', 'C', 'D'], kind='bar', stacked=True, width=0.15, color=colors1, position=0)
df.plot(ax=ax, y=['E', 'B', 'C', 'D'], kind='bar', stacked=True, width=0.15, color=colors2, position=0.5)
df.plot(ax=ax, y=['F', 'B', 'C', 'D'], kind='bar', stacked=True, width=0.15, color=colors3, position=1)
ax.legend(ncol=3)
plt.tight_layout()
plt.show()