Построение двух столбцов фрейма данных в seaborn

#python #matplotlib

#питон #сюжет #сиборн

Вопрос:

Я пытаюсь создать гистограмму в seaborn, которая отображает значения двух переменных(Вес, дисперсия) для каждой строки (фактора) в моем фрейме данных. Вот как выглядят мои данные:

 Factor Weight Variance  Growth 10% 0.15  Value 20% 0.35  

Вот мой код:

 fig=plt.figure(figsize=(10,10))  ax1=fig.add_subplot(221)  sns.barplot(x=df.index, y=df[['Weight', 'Variance']], ax=ax1)  

Вышесказанное выдает ошибку каждый раз, когда я не могу отладить. Чего я пытаюсь добиться, так это иметь один график, который показывает две цветные полосы для каждого фактора; вес в одном цвете (например, красный) и дисперсия в другом цвете (например, синий).

У кого-нибудь есть предложения или потенциальные обходные пути?

Спасибо

Комментарии:

1. В чем ошибка?

2. Ошибка значения: не удается скопировать последовательность размером 2 на ось массива размером 9

3. вам нужно привести свои данные в длинную (аккуратную) форму, а затем построить график с hue переменной

4. Как вы ожидаете, что seaborn и matplotlib будут интерпретировать текстовые строки как значения y (например, '10%' )?

Ответ №1:

Помимо приведения ваших данных в аккуратный формат, вам необходимо переформатировать текстовые данные (проценты) в числовые типы данных. Поскольку это не имеет никакого отношения к диаграммам, я предполагаю, что вы можете позаботиться об этом самостоятельно и вместо этого сосредоточиться на построении графиков и структурах данных:

 df = pandas.DataFrame({  'Factor': ['Growth', 'Value'],  'Weight': [0.10, 0.20],  'Variance': [0.15, 0.35] }) fig, ax1 = pyplot.subplots(figsize=(10, 10)) tidy = df.melt(id_vars='Factor').rename(columns=str.title) seaborn.barplot(x='Factor', y='Value', hue='Variable', data=tidy, ax=ax1) seaborn.despine(fig)  

введите описание изображения здесь

Комментарии:

1. Неплохо. Если бы вы могли показать, как выглядит аккуратный фрейм данных, я думаю, это помогло бы!

2. @jrjc Я создаю его в своем коде. Оператору достаточно просто распечатать его.

3. @PaulH спасибо, что помог. Я не знал, что мне пришлось использовать команду reset_index для удаления данных. И да, данные все время были в числовой форме, это была просто человеческая ошибка с моей стороны, когда я вводил их в диалоговое окно.

4. Я пытаюсь использовать этот пример для аналогичного упражнения по построению графика. Однако, когда я запускаю точный код, показанный выше, с одним небольшим изменением, я удалил заключительную скобку из этой строки: рис., ax1 = pyplot. subplotsfigsize=(10, 10)), я получаю следующую ошибку: Ошибка атрибута: объект ‘int’ не имеет атрибута ‘bar’.

5. @rocksNwaves Мы знаем, что его данные недолгие из-за целей операции и проблем, с которыми они столкнулись. Другими словами, если имена столбцов содержат информацию о том, что такое «значение», и плавление фрейма данных решает проблему, то данные не являются «длинными».