Итак, у меня есть некоторые данные в двух столбцах в Pandas DataFrame:
Actual Predicted
0 2.8 2.854729
1 2.2 3.081473
2 4.2 3.211041
3 2.9 2.951905
4 3.4 3.211041
5 3.3 2.838533
6 3.5 3.194845
7 3.1 3.000493
8 2.8 3.016689
9 2.8 3.032885
Я хочу научиться отображать свои данные с помощью трех общих библиотек. Все они, кажется, основаны друг на друге, но реализация очень отличается. До сих пор я достиг того же сюжета, используя Pandas и Matplotlib. Путь Pandas был очень легким, а matplotlib - неоправданно сложным (просто мнение).
# Plot with Pandas DataFrame.plot()
df.plot(kind='bar', figsize=(16,10))
# Plot with matplotlib
plt.figure(figsize=(16,10))
plt.bar(df.index - .35/2, df.iloc[:,0], .35, label='Actual')
plt.bar(df.index + .35/2, df.iloc[:,1], .35, label='Predicted')
plt.legend()
Сейчас я пытаюсь выяснить Seaborn, используя их документы, но мне трудно понять, какими должны быть мои значения x и y. На мой взгляд:
x - df.index Поскольку я хочу, чтобы все точки данных были расположены вдоль оси x
y - I хотите, чтобы значения 'y' были двойными: фактическое и прогнозируемое. Не знаю, как это сделать.
hue - df.columns, так как я хочу иметь один столбец, представляющий фактический, и один, представляющий прогнозируемый
Однако это не работает вообще, и ни одна из этих попыток не выполняется:
sns.barplot(x=df.index, y=df.columns, data=df)
sns.barplot(data=df)
Моя интуиция заключается в том, что мне нужно использовать функцию DataFrame.melt (), чтобы получить свои данные в длинный формат для лучшего построения графика, но я попробовал это:
df2 = df.melt(var_name='Type', value_name='Measurement')
df2
Type Measurement
0 Actual 2.800000
1 Actual 2.200000
2 Actual 4.200000
3 Actual 2.900000
4 Actual 3.400000
... ... ...
85 Predicted 2.903317
86 Predicted 3.211041
87 Predicted 2.870925
88 Predicted 3.146257
89 Predicted 3.211041
Но это лишает меня шансов получить правильные столбцы рядом друг с другом, так как он объединяет все «фактические» значения вместе, отдельно от всех «Предсказанные» значения.
Я все равно попробовал в надежде, что это каким-то образом правильно сгруппирует столбики. Я использовал шаблон, который взят из примеров ниже на странице документации для seaborn.barplot, и получил ValueError: Could not interpret input 'Measurement'
:
sns.barplot(x=df.index, y='Measurement', hue='Type')
Так что я думаю, все это сводится к правильному использованию функции плавления, но Я в полной растерянности на данный момент. Мои глаза сейчас кровоточат, потому что документация так запутана. Мне сказали, что Морской Рожок был самым простым способом заговора, и он оказался самым сложным.
Я думаю, мои данные должны выглядеть следующим образом:
Type Measurement
0 Actual 2.800000
Predicted 2.903317
1 Actual 2.200000
Predicted 3.211041
... ... ...
И тогда я мог бы следовать примеру кода для seaborn.barplot ():
sns.barplot(x=df.index, y="Measurement", hue="type", data=df)
Или хотя бы это то, на что я надеюсь ...