2017-04-25 70 views
3

我知道,有可能通過手動設置他們改變軸標籤。 (例如: - Modify tick label textMatplotlib:自動修改軸標籤

然而,這顯然只有當你知道你想要什麼標籤,這是不適合我的情況下工作。

這裏是想什麼,我要完成一個例子: 我有兩個numpy的數組:x包含1和366之間的數字(但不一定是全部),較2016年「Y」天包含一些其他的號碼。我想提出的散點圖「Y」與「X」:

import numpy as np 
import matplotlib.pyplot as plt 
x = np.array([27, 38, 100, 300]) 
y = np.array([0.5, 2.5, 1.0, 0.8]) 
plt.scatter(x, y) 

毫不奇怪,這產生在0與蜱的圖表,50,100,...,350我想將這些刻度標籤更改爲單獨的日期。 (例如,在50刻度會被貼上類似「2月19日」)。假設我有一個函數tick_to_date一種能將數字0爲日期字符串,所以它會是容易的,我手動更改所有的蜱我圖形。 (如果您需要佔位符功能:tick_to_date = lambda x: ("day " + str(x))

ax = plt.gca() 
ax.set_xticklabels([tick_to_date(tick.get_text()) for tick in ax.get_xticklabels()]) 

但是,這隻能做一次。如果我現在放大,或進行改變蜱任何行動,新的刻度標記都不會是什麼,我想他們是。

理想的情況下,而不是手動設置的標籤,我會告訴軸線總是用我自己的tick_to_date功能改造刻度標記。另外,調用每次蜱改變時,上面一行代碼,但我不知道會這麼好。這些可能/可行/愉快可用嗎?

回答

3

如果我真正瞭解你的問題,你是從matplotlib.ticker尋找function formatter

import numpy as np 
import matplotlib.pyplot as plt 
from matplotlib import ticker 

# I added 'y' to fit second argument (position) of FuncFormatter 
tick_to_date = lambda x,y: ("day " + str(x)) 

x = np.array([27, 38, 100, 300]) 
y = np.array([0.5, 2.5, 1.0, 0.8]) 
plt.scatter(x, y) 

ax = plt.gca() 
# tick_to_date will affect all tick labels through MyFormatter 
myFormatter = ticker.FuncFormatter(tick_to_date) 
# apply formatter for selected axis 
ax.xaxis.set_major_formatter(myFormatter) 
plt.show()