Как отобразить панель ошибок в линейном графике из фреймов данных - PullRequest
2 голосов
/ 24 апреля 2020

У меня есть два кадра данных, df_avg и df_sem, которые содержат средние значения и стандартные ошибки средних, соответственно. Например:

        KPCmb1      KPCmb1IA    KPCmb2      KPCmb3      KPCmb4      KPCmb5      KPCmb6
temp                            
19.99   15.185905   24.954296   22.610052   29.249107   26.151815   34.374257   36.589218
20.08   15.198452   24.998227   22.615342   29.229325   26.187794   34.343738   36.596730
20.23   15.208917   25.055061   22.647499   29.234424   26.193382   34.363549   36.580033
20.47   15.244485   25.092773   22.691421   29.206816   26.202425   34.337385   36.640839
20.62   15.270921   25.145798   22.720752   29.217821   26.235101   34.364162   36.600030

и

        KPCmb1      KPCmb1IA    KPCmb2      KPCmb3      KPCmb4      KPCmb5      KPCmb6
temp                            
19.99   0.342735    0.983424    0.131502    0.893494    1.223318    0.536450    0.988185
20.08   0.347366    0.983732    0.136239    0.898661    1.230763    0.534779    0.993970
20.23   0.348641    0.981614    0.134729    0.898790    1.227567    0.529240    1.005609
20.47   0.350937    0.993973    0.138411    0.881142    1.237749    0.526841    0.991591
20.62   0.345863    0.983064    0.132934    0.883863    1.234746    0.533048    0.987520

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

Я могу добиться этого с помощью следующего кода: df_avg.plot(yerr=df_sem), но это не позволяет мне изменять многие аспекты графика, такие как DPI, метки и тому подобное.

Поэтому я попытался создать график, используя в качестве альтернативы следующий код:

plt.figure()
x = df_avg.index
y = df_avg
plt.errorbar(x,y,yerr=df_sem)
plt.show()

Но это дает мне ошибку: ValueError: shape mismatch: objects cannot be broadcast to a single shape

Как мне go сделать тот же график, который я могу использовать для построения pandas с построением matplotlib?

Спасибо!

1 Ответ

2 голосов
/ 24 апреля 2020

Вы можете сделать просто for l oop:

for col in df_avg.columns:
    plt.errorbar(df_avg.index, df_avg[col], yerr=df_sem[col], label=col)

plt.legend()

Выход:

enter image description here

...