2016-05-10 47 views
0

我是Juptyer和matplotlib的新手,所以我正在努力調整我的地塊上的x軸範圍。Jupyter matplotlib plot不響應設置xlim或對x軸標籤的修改

這裏是我的代碼:

plt.figure(1) 

l_dt = dt[dt['datatype'] == 2.0] 
if len(l_dt['time'].values) > 1: 
    plt.subplot(223) 
    plt.scatter(l_dt['time'].values, l_dt['measurementvalue'].values) 
    plt.yscale('linear') 
    plt.title('Carbs (g)') 
    plt.grid(True) 

l_dt = dt[dt['datatype'] == 3.0] 
if len(l_dt['time'].values) > 1: 
    plt.subplot(224) 
    plt.scatter(l_dt['time'].values, l_dt['measurementvalue'].values) 
    plt.yscale('linear') 
    plt.title('Activity (mins)') 
    plt.grid(True) 


plt.tight_layout() 
plt.xlim(min(dt['time']), max(dt['time'])) 
plt.show() 

print(min(dt['time'])) 
print(min(dt['time'])) 

這裏是我的輸出:

output

正如你所看到的,即使我的日誌聲明顯示在4月25日一分鐘日期的最大日期5月9日,我看到我的座標軸在一個情況下一直回到三月,儘管這條線在代碼中:

plt.figure(1) 
plt.xlim(min(dt['time']), max(dt['time'])) 

這是我已經試過

  • 我試圖繪製之前移動xlim線,但是這並沒有改變行爲。
  • 我嘗試了每個plt.subplot

感謝您的任何建議之前,移動「XLIM」線。

+0

發佈您的一些數據來創建一個工作示例 –

+0

'plt.xlim(min(dt ['time']),max(dt ['time']))'只會對當前軸進行操作,不是所有的,順便說一句。這就是爲什麼應該避免使用'pyplot'&'pylab'接口來支持面向對象的接口的原因。 –

回答

0

如果我不得不猜測(因爲沒有數據可供玩耍,所以我想這樣做),可以理解的是期望plt.xlim可以設置所有軸的極限。

但是,pyplot接口僅在matplotlib狀態機跟蹤的當前軸上運行。這可能會變得棘手,因爲你和狀態機可能不同意哪個軸是當前軸。

我會修改您例如使用面向對象的接口:

from matplotlib import pyplot 
fig, axes = pyplot.subplots(nrows=2, ncols=2, figsize=(8, 8), sharex=True) 

l_dt = dt[dt['datatype'] == 2.0] 
if len(l_dt['time'].values) > 1: 
    axes[1, 0].scatter('time', 'measurementvalue', data=l_dt) 
    axes[1, 0].set_yscale('linear') 
    axes[1, 0].set_title('Carbs (g)') 
    axes[1, 0].grid(True) 

l_dt = dt[dt['datatype'] == 3.0] 
if len(l_dt['time'].values) > 1: 
    axes[1, 1].scatter('time', 'measurementvalue', data=l_dt) 
    axes[1, 1].set_yscale('linear') 
    axes[1, 1].set_title('Activity (mins)') 
    axes[1, 1].grid(True) 

fig.tight_layout() 
pyplot.show() 

使用sharex=True在創建數字將保持在所有次要情節同步的x軸。