天天看點

用不同的坐标系統對圖形元素進行定位

當我們在繪制圖形元素時,需要通過x軸和y軸的坐标來指定具體的位置,這裡的x軸和y軸就是我們最常用的坐标系統。其實在matplotlib中,還有很多其他的坐标系統, 常用的坐标系統主要包括以下3類

1. data,其實就是最常用的x軸和y軸了,通過指定xlim和ylim範圍内的數值來指定元素的位置,

2. axes,将axes的左下角視為(0, 0), 右上角視為(1,1),進而對元素進行定位

3. figure, 将figure的左下角視為(0, 0), 右上角視為(1,1),進而對元素進行定位

通過transform參數,可以顯式指定坐标系統,通過幾個例子來看下各自的用法,第一個例子是運用axes坐标系統,快速在axes的中心繪制一個元素,代碼如下

>>> x = np.linspace(0, 3 * np.pi, 50)
>>> y = np.sin(x)
>>> plt.plot(x, y)
>>> ax=plt.gca()
>>> plt.text(x=0.5, y=0.5, s='text',transform=ax.transAxes)
>>> plt.show()      

通過ax.transAxes指定使用axes坐标系統,(0.5, 0.5)就是圖檔的中心,輸出結果如下

用不同的坐标系統對圖形元素進行定位

第二個例子,在axes邊框之外标記文字,代碼如下

>>> x = np.linspace(0, 3 * np.pi, 50)
>>> y = np.sin(x)
>>> plt.plot(x, y)
>>> fig=plt.gcf()
>>> plt.text(x=0.5, y=0.95, s='sin', bbox=dict(boxstyle='round',facecolor='0.8'),transform=fig.transFigure)
>>> plt.show()      

通過fig.transFigure指定使用figure坐标系統, 輸出結果如下

用不同的坐标系統對圖形元素進行定位

第三個例子,在兩幅圖像之間繪制連線,代碼如下

>>> x = np.linspace(0, 3 * np.pi, 50)
>>> fig, (ax1, ax2) = plt.subplots(2, 1)
>>> ax1.plot(x, np.sin(x))
>>> ax2.plot(x, np.cos(x))
>>>
>>> con = ConnectionPatch(
... xyA=(np.pi, np.cos(np.pi)),
... coordsA=ax2.transData,
... xyB=(2 * np.pi, np.sin(2 * np.pi)),
... coordsB=ax1.transData)
>>>
>>> ax2.add_artist(con)
>>> plt.show()      

通過ax.transData指定使用data坐标系統, 輸出結果如下

用不同的坐标系統對圖形元素進行定位

針對不同場景,選取最适合的坐标系統,可以極大提高畫圖的效率。

·end·

繼續閱讀