【问题标题】:Pandas dataframe groupby plot熊猫数据框分组图
【发布时间】:2019-05-03 23:40:40
【问题描述】:

我有一个结构如下的数据框:

          Date   ticker  adj_close 
0   2016-11-21     AAPL    111.730     
1   2016-11-22     AAPL    111.800    
2   2016-11-23     AAPL    111.230    
3   2016-11-25     AAPL    111.790     
4   2016-11-28     AAPL    111.570    
...          
8   2016-11-21      ACN    119.680            
9   2016-11-22      ACN    119.480              
10  2016-11-23      ACN    119.820              
11  2016-11-25      ACN    120.740 
...             

如何根据 adj_closeDate 的代码进行绘图?

【问题讨论】:

    标签: python pandas matplotlib dataframe


    【解决方案1】:

    简单的情节,

    你可以使用:

    df.plot(x='Date',y='adj_close')
    

    或者你可以预先将索引设置为Date,这样就很容易绘制出你想要的列了:

    df.set_index('Date', inplace=True)
    df['adj_close'].plot()
    

    如果您想要一张带有ticker 的系列的图表

    之前需要groupby

    df.set_index('Date', inplace=True)
    df.groupby('ticker')['adj_close'].plot(legend=True)
    


    如果您想要一个带有单独子图的图表:

    grouped = df.groupby('ticker')
    
    ncols=2
    nrows = int(np.ceil(grouped.ngroups/ncols))
    
    fig, axes = plt.subplots(nrows=nrows, ncols=ncols, figsize=(12,4), sharey=True)
    
    for (key, ax) in zip(grouped.groups.keys(), axes.flatten()):
        grouped.get_group(key).plot(ax=ax)
    
    ax.legend()
    plt.show()
    

    【讨论】:

    • 感谢您的回答。但这不是我想要的。我已经有了。但是,我如何制作每个面板,其中一个面板对应于 adj_close 与日期的代码?
    • 我添加了另一个选项来绘制不同的子图以防万一。
    • 对于子图,sharey=True 似乎无法正常工作。
    【解决方案2】:

    与上面朱利安的回答类似,我在以下方面取得了成功:

    fig, ax = plt.subplots(figsize=(10,4))
    for key, grp in df.groupby(['ticker']):
        ax.plot(grp['Date'], grp['adj_close'], label=key)
    
    ax.legend()
    plt.show()
    

    如果您想在 matlab 中进行更多控制,此解决方案可能更相关。

    解决方案灵感来自:https://stackoverflow.com/a/52526454/10521959

    【讨论】:

    • 嗨,我发现这个解决方案非常有用!但是,当我尝试为每个 x 轴标签并排绘制“条”时。您的上面为标签绘制了一个具有不同颜色的条...有没有一种优雅的方法可以为标签中的每个值并排绘制条?
    • 不确定我是否关注@AlexWalton,您能进一步解释一下吗?
    • 正是我想要的,因为图例是 groupby 列
    • @YaakovBressler 没关系,我将它与 seaborn 和 hue 一起使用,效果很好!
    猜你喜欢
    • 2022-01-12
    • 1970-01-01
    • 1970-01-01
    • 2014-07-11
    • 1970-01-01
    • 2013-02-28
    • 2023-03-28
    相关资源
    最近更新 更多