IIUC, вы хотите построить подсчет значений для каждого столбца на отдельных вспомогательных участках:
(df.stack().groupby(level=1)
.value_counts()
.unstack(level=0)
.plot.bar(layout=(2,3), subplots=True));
Вывод:
Примечание: для ответа на ваш вопрос почему ... :
for j in myplots:
x = range(len(df[j].value_counts()))
for row in range(2):
for col in range(3):
Поскольку цикл j
является наиболее внешним, вы эффективно рисуетезначения счетчиков каждого столбца (df[j]
) на каждом участке. Вот почему субплоты выглядят одинаково.
Чтобы ваше решение работало, используйте zip
:
rows, cols = 2,3
fig, axes = plt.subplots(rows, cols, sharex='col', sharey='row')
myplots = ['A','B','C','D','E','F']
for j, ax in zip(myplots, axes.ravel()):
df[j].value_counts(sort=False).plot.bar(ax=ax)
Вывод: