没有线条和误差线的熊猫线图(来自带剪切的groupby)

时间:2019-06-13 21:25:30

标签: python pandas pandas-groupby

尝试将误差线添加到熊猫线条图中,似乎会否定先前作为参数提供的信息。特别是,似乎忽略了不包含行的选择。我想做的是创建一个没有任何线条的线图,但包括误差线。请参阅下面的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

有人知道解决方法吗?我遇到的最接近的是一种解决方法,可以将行保持在here位置。此外,它没有得到解答here。有任何想法吗?

2 个答案:

答案 0 :(得分:1)

在不求助于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

答案 1 :(得分:0)

在Sheldore的answer的基础上,我们可以通过循环显示颜色并重新绘制数据而没有错误栏来将数据点重新添加到顶部。

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