2016-03-19 54 views
0

我有一个DF像这样:改变x蜱标签

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 

,我想刻度线到以5的间隔是YearMonthDay的组合(I没有甚至尝试添加下面的间隔要求)

我与此代码绘制:

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) 

但所得到的图是完全空。

+0

你的意思是说:“间隔5” - 5天,几年,几个月? – MaxU

+0

对不起,5年的间隔,我的真实数据框在1984年到2011年之间有几年,所以在这种情况下2的间隔将更实用 –

+0

但在这种情况下,只有两个xaxis - 这是你想要的吗? – MaxU

回答

0

我强烈建议您在尝试绘制数据之前先将数据格式化为您想要的格式。因此,我们假设您有一个名为df的数据框,其中包含您列出的列(年,月,日,FID__x,Fuzzy_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轴,它将分配适当的时间间隔并很好地格式化日期。然后,您可以像以前一样应用其他标签。

+0

有没有办法为我的分组情节做到这一点?当我想为每个图形绘制单独的图形时,这会将我所有的'FID__x'绘制在同一个图形上(图形)。 –

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岁之间

+0

是的,这就是我想要我的轴看起来,但这不会与我提供的原始数据。因为'Year'中没有重复项,所以它的曲线很好,但是我需要基于'Year','Month'和'Day'绘制曲线,而不仅仅是'Year'。 –

+0

@StefanoPotter,你测试了吗? – MaxU

+0

@StefanoPotter @StefanoPotter,我已经更新了我的答案 - 我已经放了一些重复项,但我没有更改代码... – MaxU