2017-03-26 15 views
0

我正在爲我的x軸使用具有日期時間值的numpy數組。雖然xData有空隙,matplot找到了填充它們的方法。我不想要那種行爲。我想要x軸繪製數組「日期」中的確切條目。有什麼建議麼?帶有datetime&numpy數組的Python Matlabplot:如何跳過劇情日?

import numpy as np 
import datetime 
import matplotlib.pyplot as plt 
import matplotlib.dates as mdates 

dates = np.array([datetime.datetime(2017, 3, 24, 14, 52),datetime.datetime(2017, 3, 24, 14, 56),datetime.datetime(2017, 3, 26, 16, 0),datetime.datetime(2017, 3, 26, 16, 4)]) 
yData = np.ones(len(dates)) 

fig = plt.figure(figsize=(6,6)) 
ax = plt.subplot(111) 
li, = ax.plot(dates,yData) 
plt.gcf().subplots_adjust(bottom=0.3) 

ax.get_xaxis().tick_bottom() 
xfmt = mdates.DateFormatter('%Y-%m-%d-%H:%M') 
ax.xaxis.set_major_formatter(xfmt) 
locs, labels = plt.xticks() 
plt.setp(labels, rotation=90) 

fig.canvas.draw() 
plt.show() 
+0

這是否解決您的問題? http://stackoverflow.com/questions/13576805/matplotlib-hiding-specific-ticks-on-x-axis –

回答

1

xticks可以通過plt.xticks設置。所以

plt.xticks(dates, rotation=90) 

會設置從dates陣列這些值的xticks。

完整代碼,其中我改變日期的位,使得它們不重疊

import numpy as np 
import datetime 
import matplotlib.pyplot as plt 
import matplotlib.dates as mdates 

dates = np.array([datetime.datetime(2017, 3, 24, 14, 52), 
        datetime.datetime(2017, 3, 24, 23, 56), 
        datetime.datetime(2017, 3, 26, 8, 0), 
        datetime.datetime(2017, 3, 26, 19, 4)]) 
yData = np.ones(len(dates)) 

fig = plt.figure(figsize=(6,6)) 
ax = plt.subplot(111) 
li, = ax.plot(dates,yData, marker="o", linestyle="-") 
plt.gcf().subplots_adjust(bottom=0.3) 

ax.get_xaxis().tick_bottom() 
xfmt = mdates.DateFormatter('%Y-%m-%d-%H:%M') 
ax.xaxis.set_major_formatter(xfmt) 
plt.xticks(dates, rotation=90) 


fig.canvas.draw() 
plt.show() 

產生

enter image description here

+0

需要用直線連接點。這裏的問題是添加到「日期」數組之外的x軸的額外「日期」。 – user7769718

+0

從中你可以瞭解到在問題中對問題的準確性有多重要。我編輯了答案。 – ImportanceOfBeingErnest

+0

謝謝。 plt.xticks(日期,旋轉= 90)而不是「標籤」的確有訣竅。 但是,有沒有辦法消除差距?實際上,這種差距是一個完整的週末,以5秒爲增量48小時。 – user7769718

1

在端我能夠使用以去除間隙由@ImportanceOfBeingErnest提供的帖子和那些線程中的黑客。我不得不把日期作爲索引來處理,只保留它們用於標記和簡化操作。這是最終的代碼:

import numpy as np 
import datetime 
import matplotlib.pyplot as plt 
import matplotlib.dates as mdates 

dates = np.array([datetime.datetime(2017, 3, 24, 14, 52), 
        datetime.datetime(2017, 3, 24, 23, 56), 
        datetime.datetime(2017, 3, 26, 8, 0), 
        datetime.datetime(2017, 3, 26, 19, 4)]) 
dates_indx = range(len(dates)) 
dates_strings = [dt.strftime('%Y-%m-%d-%H:%M') for dt in dates] 

yData = np.ones(len(dates)) 

fig = plt.figure(figsize=(6,6)) 
ax = plt.subplot(111) 
li, = ax.plot(dates_indx,yData, marker = 'o', linestyle="-") 
plt.gcf().subplots_adjust(bottom=0.3) 

ax.get_xaxis().tick_bottom() 
plt.xticks(dates_indx,dates_strings) 
plt.xticks(dates_indx, rotation=90) 

fig.canvas.draw() 
plt.show(block=False)