【问题标题】:Plotting on specific column values in Python在 Python 中的特定列值上绘图
【发布时间】:2019-04-09 09:32:43
【问题描述】:

我有每年每个月 (1-12) 小时 (0-23) 重复的值,例如:

Year    Month     HOUR  NAME            RATE
2010    1          0    Big              2  
2010    1          0    Channelview      4
2010    1          0    Cottonwood       12
2010    1          1    Big              4  
2010    1          1    Channelview      9
2010    1          1    Cottonwood       11
.
.
.
2010    2          0    Big              6  
2010    2          0    Channelview      10
2010    2          0    Cottonwood       17
.
.
2013    1          0    Big              4  
2013    1          0    Channelview      9
2013    1          0    Cottonwood       11

我想按 NAME 一年中每个月的小时(x 轴)绘制这个 RATE 数据(y 轴)(持续 7 年)。 .groupby.loc 有没有办法做到这一点,而不必根据年份和月份创建额外的数据框?

【问题讨论】:

    标签: python python-3.x pandas dataframe plot


    【解决方案1】:

    您可以使用groupby

    for name, data in df.groupby('NAME'):
        plt.plot(data['HOUR'], data['RATE'], label=name)
    
    plt.xlabel('Hour')
    plt.ylabel('Rate')
    plt.legend()
    plt.show()
    

    [编辑]根据您的 cmets,要为每个名称创建并保存单独的图,您可以执行以下操作:

    for name, data in df.groupby('NAME'):
        plt.plot(data['HOUR'], data['RATE'], label=name)
        plt.xlabel('Hour')
        plt.ylabel('Rate')
        plt.legend()
        plt.savefig('plot_{}.png'.format(name))
        plt.close()
    

    【讨论】:

    • 太棒了。如果我想将每个地块的每个 NAME 作为一个大的地块集合分开怎么办?缩放非常糟糕,而且我没有 3 个名字(实际上有 20 个),所以它变得非常混乱。
    • 您可以在循环中保存每个绘图,确保在每次迭代时关闭绘图窗口(使用plt.close())。
    • 我尝试在每次循环迭代后关闭,方法是在 plt.plot() 之前添加 plt.figure() 并在之后添加 plt.close()。从逻辑上讲,这是有道理的,但似乎不起作用。它只是为每个图重复相同的 NAME 值,但会更改图例中的实际名称。
    • 它没有。给出与先前更改相同的结果。我还调整了我的问题数据表,这可能有助于澄清问题。一年中的每个月都会重复这个小时,所以我可能需要另一个循环。
    • 经过您的修改,这应该成为一个单独的问题,因为您的问题最初并未解决。
    猜你喜欢
    • 2021-10-09
    • 2023-02-08
    • 2021-10-28
    • 1970-01-01
    • 2021-07-27
    • 2018-12-22
    • 1970-01-01
    • 2018-06-23
    • 1970-01-01
    相关资源
    最近更新 更多