Некоторые диаграммы не отображаются при использовании GridSpec of Matplotlib - PullRequest
0 голосов
/ 20 ноября 2018

Это мои панды DataFrame:

Area     Gender Amount
XXX      Men    23495
YYY      Men    9336
ZZZ      Men    8828
TTT      Men    11546
XXX      Women  19798
YYY      Women  8235
ZZZ      Women  9122
TTT      Women  10800

Это мой код для построения нескольких графиков:

import pandas as pd
import bumpy as np
import seaborn as sns
from matplotlib.gridspec import GridSpec
import matplotlib.pyplot as plt

df_men = df[df["Gender"]=="Men"].drop("Gender", axis=1)
df_women = df[df["Gender"]=="Women"].drop("Gender", axis=1)

men_labels = df_men.Area.values
men_counts = df_men.Quantity.values

women_labels = df_women.Area.values
women_counts = df_women.Quantity.values

plt.figure(1, figsize=(20,10))
the_grid = GridSpec(2, 2)
cmap = plt.get_cmap('coolwarm')
colors = [cmap(i) for i in np.linspace(0, 1, 8)]

plt.subplot(the_grid[0, 0], aspect=1, title='Men')
_ = plt.pie(men_counts, labels=men_labels, autopct='%1.1f%%', shadow=True, colors=colors)

plt.subplot(the_grid[0, 1], aspect=1, title='Women')
_ = plt.pie(women_counts, labels=women_labels, autopct='%.0f%%', shadow=True, colors=colors)

plt.subplot(the_grid[1, 0], aspect=1, title='Men')
sns.barplot(x='Quantity', y='Area', data=df_men, palette='coolwarm')

plt.subplot(the_grid[1, 1], aspect=1, title='Women')
sns.barplot(x='Quantity', y='Area', data=df_women, palette='coolwarm')

plt.show()

Проблема в том, что графики 2-го ряда не отображаются правильно,Кажется, что они сплющены, и никаких полос нет.Если я нанесу эти графики отдельно, они хорошо прорисованы.Что не так в моем коде?

Это не работает:

plt.subplot(the_grid[1, 1], aspect=1, title='Women')
sns.barplot(x='Quantity', y='Area', data=df_women, palette='coolwarm')

Но это работает:

sns.barplot(x='Quantity', y='Area', data=df_women, palette='coolwarm')

ОБНОВЛЕНИЕ:

Это вывод df.to_dict().

{'Amount': {0: 23495,
  1: 9336,
  2: 8828,
  3: 11546,
  4: 19798,
  5: 8235,
  6: 9122,
  7: 10800},
 'Gender': {0: 'Men',
  1: 'Men',
  2: 'Men',
  3: 'Men',
  4: 'Women',
  5: 'Women',
  6: 'Women',
  7: 'Women'},
 'Area': {0: 'XXX',
  1: 'YYY',
  2: 'ZZZ',
  3: 'TTT',
  4: 'XXX',
  5: 'YYY',
  6: 'ZZZ',
  7: 'TTT'}}

1 Ответ

0 голосов
/ 20 ноября 2018

Я нашел ответ сам.Решение было удалить aspect=1:

plt.subplot(the_grid[1, 1], aspect=1, title='Women')

Это работает:

plt.subplot(the_grid[1, 1], title='Women')
sns.barplot(x='Quantity', y='Area', data=df_women, palette='coolwarm')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...