2016-03-19 81 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