我們可以使用matplotlib.pyplot.locator_params()來控制刻度線定位器的行爲。 即使通常會自動確定標記點的位置,但是如果我們想要繪製較小的標記,則可以控制標記點的數量並使用緊密的視圖:
from pylab import *
import numpy as np
ax = gca()
ax.locator_params(tight = True, nbins = 10)
ax.plot(np.random.normal(10, 0.1, 100))
show()
這應該給我們下面的圖表:然後我們可以使用matplotlib.dates.date2num(),matplotlib等助手函數。 dates.num2date()和matplotlib.dates.drange()在不同的表示之間轉換日期。
我們來看另一個例子:
from pylab import *
import matplotlib as mpl
import datetime
fig = figure()
ax = gca()
start = datetime.datetime(2013, 1, 1)
stop = datetime.datetime(2013, 12, 31)
delta = datetime.timedelta(days = 1)
dates = mpl.dates.drange(start, stop, delta)
values = np.random.rand(len(dates))
ax = gca()
ax.plot_date(dates, values, linestyle= '-', marker='')
date_format = mpl.dates.DateFormatter('%Y-%m-%d')
ax.xaxis.set_major_formatter(date_format)
fig.autofmt_xdate()
show()
上面的代碼會給我們下面的圖表:添加圖例和註釋
圖例和註釋清楚地解釋數據圖。 通過給每個圖表分配一個關於它所代表的數據的簡短描述,我們在閱讀者(觀衆)頭腦中啓用一個更簡單的心智模型。 這個方法將顯示如何註釋我們的數字上的特定點,以及如何創建和定位數據圖例。
讓我們來演示如何添加圖例和註釋:
if __name__ == '__main__':
x1 = np.random.normal(30, 3, 100)
x2 = np.random.normal(20, 2, 100)
x3 = np.random.normal(10, 3, 100)
plt.plot(x1, label = 'plot')
plt.plot(x2, label = '2nd plot')
plt.plot(x3, label = 'last plot')
plt.legend(bbox_to_anchor=(0., 1.02, 1., .102), loc=3,
ncol=3, mode='expand', borderaxespad=0.)
plt.annotate('Important value', (55,20),
xycoords='data',
xytext=(5,38),
arrowprops = dict(arrowstyle = '->'))
plt.show()
上面的代碼會給我們下面的圖:我們所做的就是爲每個繪圖分配一個字符串標籤,因此legend()將嘗試確定要在圖例框中添加的內容。 我們通過定義loc參數來設置圖例框的位置。 這是可選的,但是我們想要指定一個位置,這個位置最不可能用於繪製圖例的圖例。 將位置值設置爲0是非常有用的,因爲它會自動檢測圖形的位置,圖例的位置可以與圖形重疊最小。
所有位置參數字符串在下表中給出:
如果不在圖例中顯示標籤,請將標籤設置爲_nolegend_。
對於圖例,我們定義了ncol = 3的列數,並設置了左下角的位置。 我們指定了一個邊界框(bbox_to_anchor),從位置(0.,1.02)開始,寬度爲1,高度爲0.102。 這些是標準化的座標軸。 參數模式爲“None”或“expand”以允許圖例框水平放大軸區域。 參數borderaxespad定義軸和圖例邊界之間的填充。
對於註釋,我們已經定義了一個字符串在座標xy上的圖上繪製。 座標系指定與數據1相同; 因此,座標系是xycoord ='data'。 文本的起始位置由xytext的值定義。
箭頭從xytext繪製到xy座標,arrowprops字典可以定義該箭頭的許多屬性。 對於這個例子,我們用箭頭來定義箭頭樣式。