更改组图

时间:2016-03-19 19:36:11

标签: python pandas matplotlib

我有这样的df:

    Year  Month  Day  FID__x  Fuzzy_Anomaly
0   1984      5   17       3       0.048220
1   1984      7    4       3      -0.199825
2   1984      9    6       3      -0.528545
3   1985      5   20       3      -0.176771
4   1985      6   21       3      -0.345946
5   1986      7   26       3      -0.139717
6   1986      8   27       3      -0.071766
7   1987      8   30       3      -0.560004
8   1987      9   15       3      -0.498678
9   1987     10    1       3      -0.484233
10  1988      7   31       3      -0.243202
11  1989      7    2       3      -0.006413
12  1990      6   19       3      -0.538433

我希望刻度线是YearMonthDay的组合,间隔为5(我甚至没有尝试添加间隔要求下文)

我正在使用此代码进行绘图:

import matplotlib.pyplot as plt
from matplotlib.backends.backend_pdf import PdfPages

with PdfPages(r'F:\Sheyenne\Fishnet_ROI\graphs\delete.pdf') as pdf:
   for i, group in df.groupby('FID__x'):
       plt.figure()
       Hurst_plots=group.plot(x=['Year', 'Month', 'Day'], y='Fuzzy_Anomaly',title=str(i)).get_figure()
       plt.legend(loc='upper center', bbox_to_anchor=(0.5, 1.05), ncol=3,
          fancybox=True, shadow=True)
       labels=['19840517', '19840704', '19840906', '19850520', '19850621', '19860726', '19860827', '19870830', '19870915', '19871001', '19880731', '19890702', '19900619']
       plt.xticks(labels)
       plt.ylabel('Values')
       plt.xlabel('Year')
       pdf.savefig(Hurst_plots)  
       plt.close(Hurst_plots)

但结果图完全为空。

2 个答案:

答案 0 :(得分:0)

我强烈建议您在尝试绘制数据之前先将数据格式化为您想要的格式。因此,我们假设您有一个名为df的数据框,其中包含您列出的列(年,月,日,FID__x,模糊_Anomaly)。

首先创建一个新列,它是三个与日期相关的列的组合:

df['Date'] = df.apply(lambda row: '{}-{}-{}'.format(row['Year'], row['Month'], row['Day']), axis=1)

然后将Date列设置为索引:

df.set_index('Date', inplace=True)

可以轻松创建您正在制作的情节:

df.groupby('FID__x')['Fuzzy_Anomaly'].plot()

Date将自动成为您的x轴,它将指定适当的时间间隔并很好地格式化日期。然后,您可以像现在一样应用其他标签。

答案 1 :(得分:0)

我故意更改了您的数据集,因此它将包括1984年到2011年之间的年份。

In [9]: df
Out[9]:
    Year  Month  Day  FID__x  Fuzzy_Anomaly
0   1984      5   17       3       0.048220
1   1985      5   20       3      -0.199825
2   1985      9    6       3      -0.528545
3   1985     10   20       3      -0.176771
4   1992      6   21       3      -0.345946
5   1994      7   26       3      -0.139717
6   1996      8   27       3      -0.071766
7   1998      8   30       3      -0.560004
8   2000      9   15       3      -0.498678
9   2003     10    1       3      -0.484233
10  2006      7   31       3      -0.243202
11  2009      7    2       3      -0.006413
12  2011      6   19       3      -0.538433

In [10]: xticks = [y for y in range(df.Year.min(), df.Year.max(), 5)]

In [11]: df.plot(x='Year', y='Fuzzy_Anomaly', xticks=xticks)
Out[11]: <matplotlib.axes._subplots.AxesSubplot at 0x48e0e80>

PS我更新了数据集,现在您在Year

中有重复项

Plot