#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 Мы знаем, что его данные недолгие из-за целей операции и проблем, с которыми они столкнулись. Другими словами, если имена столбцов содержат информацию о том, что такое «значение», и плавление фрейма данных решает проблему, то данные не являются «длинными».