Линейный график панд без линий и погрешностей (от группового с вырезом) - PullRequest
1 голос
/ 14 июня 2019

Попытка добавить полосы ошибок на линейный график панд, похоже, сводит на нет предыдущую информацию, представленную в качестве аргументов.В частности, кажется, что игнорируется выбор не включать строки.Я пытаюсь создать линейный график без каких-либо линий, но с ошибками.См. MWE ниже:

import pandas as pd
import numpy as np
from datetime import datetime as dt

dates = np.array([dt(2012, 9, 27, 8, 52, 21),
       dt(2012, 10, 6, 5, 4, 15),
       dt(2012, 10, 7, 4, 53, 4),
       dt(2012, 10, 9, 7, 21, 18),
       dt(2012, 10, 10, 5, 4, 8),
       dt(2012, 10, 11, 4, 58, 43),
       dt(2012, 10, 12, 11, 15, 25),
       dt(2012, 10, 13, 10, 45, 23),
       dt(2012, 10, 20, 6, 0, 25),
       dt(2012, 10, 22, 7, 41, 38)])

values = np.array([5.61006523, 5.39632183, 5.49317193, 5.42327983, 5.4623386, 
                   5.42444747, 5.60362929, 5.57041331, 5.34893575, 5.48222005])

date_bins = np.array([dt(2012, 9, 29, 14),
                      dt(2012, 10, 10, 14),
                      dt(2012, 10, 14, 14),
                      dt(2012, 10, 23, 14)])

df1 = pd.DataFrame({'date':dates, 'value': values})
df2 = pd.DataFrame({'bin_dates':date_bins})

lookup = df1.groupby(pd.cut(df1['date'], df2['bin_dates'])).agg({'value':['mean','std']})
lookup.columns = ['mean_val','std_val']

lookup[['mean_val']].plot(kind='line',style='o',yerr=lookup[['std_val']].values.T)

Результат с ошибками (игнорируйте ужасную маркировку оси X): with error bars

Результат без ошибок: without error bars

Кто-нибудь знает обходной путь для этого?Самый близкий, с которым я столкнулся, - это обходной путь, который удерживает линии на месте здесь .Кроме того, он остался без ответа здесь .Есть идеи?

Ответы [ 2 ]

1 голос
/ 14 июня 2019

Не прибегая к matplotlib, мне приходит в голову обходное решение - удалить объект линии, используя экземпляр оси ax, возвращаемый из df.plot()

ax = lookup[['mean_val']].plot(kind='line', style='o', yerr=lookup[['std_val']].values.T)
ax.lines[0].remove()

enter image description here

0 голосов
/ 14 июня 2019

Основываясь на ответе Шелдора , мы можем добавить точки данных обратно вверху, циклически возвращаясь к цветам и перераспределяя данные без полос ошибок.

ax = lookup[['mean_val']].plot(kind='line',style='o',yerr=lookup[['std_val']].values.T,legend=False)
ax.lines[0].remove()
ax.set_prop_cycle(None)
lookup[['mean_val']].plot(kind='line',style='o',ax=ax)

В результате: enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...