2017-02-11 110 views
0

我有日期時間系列(稱爲日期)是這樣的:散佈年,每月X軸和天Y軸

0  2012-06-26 
1  2011-02-22 
2  2012-06-06 
3  2013-02-10 
4  2004-01-01 
5  2011-01-25 
6  2015-11-02 

,我想散點圖上日期爲Y軸,月和年X軸。

我打得四處pyplot.plot_date,但不能找出任何解決方案。

它768,16是這樣的this僅與Y軸的日期。

有什麼建議嗎?

+1

不幸的是,目前還不清楚你想達到的目標。既然你有一個單一的時間序列,而分散需要x和y輸入,哪個數據應該在哪裏並不明顯。也許你會選擇一個例子來說明時間序列的第一個日期應該如何出現在圖表中。此外,問題還沒有很好的界定:「沒有什麼適合我的」並不是一個足夠的問題描述。請確保您已閱讀並理解[問]以及如何製作[mcve]。然後相應地編輯你的問題。 – ImportanceOfBeingErnest

+0

我有一系列的事件發生在某些日期,我想將它們表示爲散點圖,Y軸上的日期和X軸上的月份和年份。像[這](http://blog.stephenwolfram.com/data/uploads/2012/03/outgoing-mail-diurnal-image.png),但與Y可 – MuzZzdY

回答

-1

至於你的問題並不完全清楚,我,我想你想散點圖最古老和最近期的年之間的所有輸入日期時間條目(從只給定的輸入選擇)。

而且,這是我在「matplotlib」庫非常的第一次嘗試。所以,我只希望下面的答案能讓你達到預期的結果。

import datetime 
import numpy 
import matplotlib.pyplot as plt 
from matplotlib.dates import MONDAY 
from matplotlib.dates import DateFormatter, MonthLocator, WeekdayLocator 
from matplotlib.dates import date2num 

# Input datetime series. 
dt_series = ["2012-06-26", "2011-02-22", "2012-06-06", "2013-02-10", "2004-01-01", "2011-01-25", "2015-11-02"] 

mondays = WeekdayLocator(MONDAY) 
months = MonthLocator(range(1, 13), bymonthday=1, interval=6) 
monthsFmt = DateFormatter("%b'%y") 

# Loop to create our own X-axis and Y-axis values. 
# mths is for X-axis values, which are months along with year. 
# dates is for Y-axis values, which are dates. 
mths = list() 
dates = list() 
for dt in dt_series: 
    mths.append(date2num(datetime.datetime.strptime(dt.replace('-', ''), "%Y%m%d"))) 
    dates.append(numpy.float64(float(dt.split('-')[2]))) 

fig, ax = plt.subplots(squeeze=True) 
ax.plot_date(mths, dates, 'o', tz=None, xdate=True, ydate=False) 
ax.xaxis.set_major_locator(months) 
ax.xaxis.set_major_formatter(monthsFmt) 
ax.xaxis.set_minor_locator(mondays) 
ax.autoscale_view() 
ax.grid(True) 

fig.autofmt_xdate() 

plt.show() 

我也建議你去通過下面的鏈接,我用我的參考: http://matplotlib.org/examples/pylab_examples/date_demo2.html

謝謝

+0

嗨@MuzZzdY天,你嘗試過這個嗎?這繪製了你所要求的。 –

0

看看到matplotlib,它真的有用。 這也可能幫助你開始繪圖。

dates = [ 
    '2012-06-26', 
    '2011-02-22', 
    '2012-06-06', 
    '2013-02-10', 
    '2004-01-01', 
    '2011-01-25', 
    '2015-11-02', 
] 

year = [] 
month = [] 
day = [] 


# Sorts your data in an useable dataset 
def sort_data(): 
    for i in range(len(dates)): 
     extracted_year = dates[i][0:4] 
     extracted_year = int(extracted_year) 
     year.append(extracted_year) 
    for j in range(len(dates)): 
     extracted_month = dates[j][5:7] 
     extracted_month = int(extracted_month) 
     month.append(extracted_month) 
    for k in range(len(dates)): 
     extracted_day = dates[k][8:10] 
     extracted_day = int(extracted_day) 
     day.append(extracted_day) 

sort_data() 

# Just checking if sort_date() worked correctly 
print(year) 
print(month) 
print(day) 
+0

matplotlib是否需要對數據集進行排序? 我可以用 date.apply(lambda x:x.month)或dates.apply(lambda x:x.year) 來分割它的月份和年份,因爲它是datetime64格式。 但我不引渡如何繪製X上的Y上的日期,月份和年份 – MuzZzdY

0

據我的最好的解決辦法是年份和月份轉換爲花車和天爲int:

from matplotlib import pyplot 
dates = [ 
'2012-06-26', 
'2011-02-22', 
'2012-06-06', 
'2013-02-10', 
'2004-01-01', 
'2011-01-25', 
'2015-11-02',] 

fig, ax = pyplot.subplots() 
ax.scatter(date.apply(lambda x: float(x.strftime('%Y.%m'))),date.apply(lambda x: x.day), marker='o')