首页 > 解决方案 > 使用循环 Python 绘制重复值

问题描述

我有一些看起来像的数据data = pd.read_csv(....)

Year    Month     HOUR  NAME            RATE
2010    1          0    Big              222  
2010    1          0    Welsch Power     434
2010    1          0    Cottonwood       124
2010    1          1    Big              455  
2010    1          1    Welsch Power     900
2010    1          1    Cottonwood       110
.
.
.
2010    2          0    Big              600  
2010    2          0    Welsch Power     1000
2010    2          0    Cottonwood       170
.
.
2010    3          0    Big              400  
2010    3          0    Welsch Power     900
2010    3          0    Cottonwood       110

如您所见,HOUR (0 - 23) 每月重复一次 (0 - 12)。我需要一种循环值的方法,这样我就可以按每个 NAME的 HOUR (X 轴)每月绘制RATE (Y 轴) 。

我的尝试看起来像:

for name, data in data.groupby('NAME'):
    fig = plt.figure(figsize=(14,23))
    plt.subplot(211)
    plt.plot(data['HOUR'], data['RATE'], label=name)
    plt.xlabel('Hour')
    plt.ylabel('Rate')
    plt.legend()
    plt.show()
    plt.close()

这是可行的,但是因为 HOUR 会重复每个月的变化,所以每次循环时图表都会回到 0。我希望将 12 个月中的每一个作为不同颜色的单独线,用于一个图表上的每个名称,但目前它们看起来像这样:

在此处输入图像描述

标签: pythonpython-3.xpandasdataframematplotlib

解决方案


.pivotDataFrame在 groupby 之后,因此它将每个月绘制为不同的行:

import matplotlib.pyplot as plt

for name, gp in df.groupby(['NAME']):
    fig, ax = plt.subplots()
    gp.pivot(index='HOUR', columns='Month', values='RATE').plot(ax=ax, marker='o', title=name)
    plt.show()

在此处输入图像描述 在此处输入图像描述 在此处输入图像描述


推荐阅读