Python matplotlib的spines模块怎么使用
本篇內容主要講解“Pythonmatplotlib的spines模塊怎么使用”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Pythonmatplotlib的spines模塊怎么使用”吧!
spines 模塊詳解
matplotlib 設計了一個 spines模塊,用于在創建 axes 時生成 Spine對象(坐標軸線)。
spines模塊定義了一個 Spine 類,為類定義了 25 個方法,其中有 3 個是 classmethod。
Spine 類
Spine 類的定義
一個 axis spine – 標注數據區域邊界的 line。
Spines 是連接 axis tick 標記的直線,并且標注數據區域的邊界。可以通過 set_position 將它放置在任意的位置。
默認的位置是:('outward', 0)。
Spines 是 Patch的子類,并且繼承了Patch的大多數行為。
Spines 繪制 a line, a circle, 或者 an arc,取決于調用了 set_patch_line, set_patch_circle, or set_patch_arc 中的哪一個。默認是 Line。
classmatplotlib.spines.Spine(axes,spine_type,path,**kwargs)
基類:matplotlib.patches.Patch
Spine 類參數
axesAxes
容納該 Spine 的 Axes 實例。
spine_type
str, spine 的類型,‘left’/‘right’/‘top’/‘bottom’/‘circle’。
spine 的類型分為兩大類:
-
直線型的,包括 ‘left’/‘right’/‘top’/‘bottom’;
-
‘circle’ 類型, 包括 arc, circle;
path
用于繪制該 spine 的 Path 實例。
注意:
-
Spine 本質就是一條線。用于連接 axis 的 tick,并標記數據區域。
-
Spine 首先是為 _axes 子包在創建 Axes 時提供創建 axis spine 的工具。
-
更重要的用途是提供了一系列方法供一般用戶設置、控制 axes 的 axis spines 的外觀和行為。
-
為 axes 創建附加的 axis,或稱之為"寄生軸"提供工具。
我們只能設置讓 Axes 的默認 axis Spines 不可見,不能真的刪除 axes 自動創建的 axis spines 對象。
創建 Spine 對象的實例
實例化 matplotlib.spines.Spine 類即創建一個 Spine 對象,axes, spine_type, path 是必需參數。
spine_type 是 'left'/'right'/'top'/'bottom'之一,即直線類型時, path 只能是兩個 vertices。理由很簡單,兩點決定一條直線。
直線類型的 spine 默認的長度由 axes 的數據邊界決定。
創建直線型 Spine 并添加到 axes
importmatplotlib.pyplotasplt
importnumpyasnp
frommatplotlib.pathimportPath
frommatplotlib.spinesimportSpine
fig=plt.figure(figsize=(6.4,4.8))
ax=plt.axes(polar=False)
x=np.linspace(-1,1.,100)
ax.plot(x,np.sin(x*np.pi))
path=Path([(0,0),(0.2,0.0)])#兩個頂點的path,
#否則會出發聲明錯誤AssertionError:unexpectedverticesshape
spine=Spine(ax,'right',path)
spine.set_color('r')
ax.add_patch(spine)
plt.savefig('spines131.png',facecolor='w')
plt.show()
spine_type=‘circle’
importmatplotlib.pyplotasplt
importnumpyasnp
frommatplotlib.pathimportPath
frommatplotlib.spinesimportSpine
fig=plt.figure(figsize=(6.4,4.8))
ax=plt.axes(polar=False)
x=np.linspace(-1,1.,100)
ax.plot(x,np.sin(x*np.pi))
path=Path([(-0.75,-0.75),(-0.25,0.5),(0.2,0.05),(0,-0.25)])
#path的vertices>=3時,spine_type只能是'circle'
spine=Spine(ax,'circle',path)
spine.set_color('r')
#set_patch_arc(self,center,radius,theta1,theta2)
#set_patch_circle(self,center,radius)
#set_patch_arc,circle,的參數會覆蓋path的參數定義
spine.set_patch_arc((0.25,0.25),0.4,15,75)
ax.add_patch(spine)
plt.savefig('spines132.png',facecolor='w')
plt.show()
默認的 Spine 對象的存儲和調用
在 matplotlib, 創建 axes 時自動創建的 spines 被保存在一個 OrderDict 中。即使設置 axis 不可見,axes.Spines 對象依然存在。
Axes 的 projection 不同, OrderDict 的 keys 也不同:
-
笛卡爾坐標系的 OrderDict.keys() = odict_keys([‘left’, ‘right’, ‘bottom’, ‘top’])
-
polar 坐標系的 OrderDict.keys() = odict_keys([‘polar’, ‘start’, ‘end’, ‘inner’])
在matplotlib的圖中,可以通過ax = plt.gca()方法獲取figure的axes對象,gca是‘get current axes’的縮寫。axes默認有四個 Spine對象,兩個橫軸和兩個豎軸,分別是 top、bottom、left、right。
importmatplotlib.pyplotasplt
importnumpyasnp
fig=plt.figure(figsize=(9.6,4.8))
ax=plt.subplot(121)
ax=plt.subplot(122,projection='polar')
N=100
theta=np.linspace(0.0,2*np.pi,N,endpoint=True)
ax.plot(theta,theta/6,'--',lw=2)
ax.plot(theta,theta/6,'--',lw=2)
print(plt.gca())#返回當前axes,如果需要則創建一個
print(ax.spines.keys())
print(ax.spines.keys())
plt.savefig('spines21.png',facecolor='w',dpi=200)
plt.show()
PolarAxesSubplot(0.547727,0.125;0.352273x0.755) odict_keys(['left','right','bottom','top']) odict_keys(['polar','start','end','inner'])
print(ax.spines)
OrderedDict([('left',<matplotlib.spines.Spineobjectat0x000001C6228F11C0>),('right',<matplotlib.spines.Spineobjectat0x000001C6228F1C40>),('bottom',<matplotlib.spines.Spineobjectat0x000001C6228F1BB0>),('top',<matplotlib.spines.Spineobjectat0x000001C6228E7F10>)])
可以通過 axes.Spines['key'] 來獲取 axes.spines 中的單個對象,并設置它的屬性。
importmatplotlib.pyplotasplt
importnumpyasnp
frommatplotlib.pathimportPath
frommatplotlib.spinesimportSpine
fig=plt.figure(figsize=(6.4,4.8))
ax=plt.axes(polar=False)
x=np.linspace(-1,1.,100)
ax.plot(x,np.sin(x*np.pi))
ax.spines['left'].set_color('r')#left'sSpine設置為紅色
ax.spines['left'].set_linewidth(5)#left's線寬
ax.spines['top'].set_visible(False)#top'sSpine不可見
print(ax.spines['bottom'])#axes.spines['key']返回的是Spine實例
plt.savefig('spines22.png',facecolor='w')
plt.show()
Spine
Spine 對象的方法
對于一般用戶,最重要的就是 spine.set_方法:
-
set_position()
-
set_color()
-
set_bounds()
-
set_patch_arc()
-
set_patch_circle()
-
set_pathc_line()
set_position(self,position)
設置 spine 對象的位置。
position 通過 (position type, amount) 元組定義。
position types 有:
-
‘outward’: 將 spine 從數據區移出指定的點數。(負值是指 spine inwards。)
-
‘axes’: 將 spine 放到定義的 Axes 坐標系中,
(0, 1) -
‘data’: 將 spine 放到定義的 data 坐標系中。
此外,速記符號定義了特殊的位置:
-
‘center’ -> (‘axes’, 0.5)
-
‘zero’ -> (‘data’, 0.0)
移動 axis 到 (0, 0) 位置
aimportmatplotlib.pyplotasplt
importnumpyasnp
frommatplotlib.pathimportPath
frommatplotlib.spinesimportSpine
fig=plt.figure(figsize=(9.6,4.8))
ax=plt.subplot(121)
ax2=plt.subplot(122)
x=np.linspace(-1,1.,100)
ax.plot(x,np.sin(x*np.pi))
ax2.plot(x,np.sin(x*np.pi),c='r')
#移動left和bottomspines到(0,0)位置
ax.spines["left"].set_position(("data",0))
ax.spines["bottom"].set_position(("data",0))
#隱藏top和rightspines.
ax.spines["top"].set_visible(False)
ax.spines["right"].set_visible(False)
ax.plot(1,0,">k",transform=ax.get_yaxis_transform(),clip_on=False)
ax.plot(0,1,"^k",transform=ax.get_xaxis_transform(),clip_on=False)
plt.savefig('spines32.png',facecolor='w')
plt.show()
set_bounds()
set_bounds(*self*,*low=None*,*high=None*)
設置 spine 的邊界。
Parameters:
low
float or None, optional
spine 的下界。傳遞 None,保留原 limit 不改變。
也可以在第一個位置參數傳遞 (low, high) tuple.
high
float or None, optional
spine 的上界。傳遞 None,保留原 limit 不改變。
importnumpyasnp
importmatplotlib.pyplotasplt
np.random.seed(19680801)
x=np.linspace(0,2*np.pi,50)
y=np.sin(x)
fig,ax=plt.subplots()
ax.plot(x,y)
ax.set_xlim((0,2*np.pi))
ax.set_xticks([0,np.pi,2*np.pi])
ax.set_xticklabels(['0',r'$\pi$',r'2$\pi$'])
ax.set_ylim((-1.5,1.5))
ax.set_yticks([-1,0,1])
ax.spines['left'].set_bounds((-1,1))
ax.spines['right'].set_visible(False)
ax.spines['top'].set_visible(False)
ax.yaxis.set_ticks_position('left')
ax.xaxis.set_ticks_position('bottom')
plt.savefig('spines33.png',facecolor='w')
plt.show()
用法示例
創建多個 yaxis
importmatplotlib.pyplotasplt
importnumpyasnp
frommatplotlib.pathimportPath
frommatplotlib.spinesimportSpine
importrandom
fig,host=plt.subplots(figsize=(6.4,4.8),tight_layout=True)
parasite1=host.twinx()
parasite2=host.twinx()
x=np.arange(0,3,0.25)
parasite2.spines["right"].set_position(("axes",1.2))
parasite2.spines["right"].set_visible(True)
p1,=host.plot(x,x*np.sin(x),"b-")
p2,=parasite1.plot(x,x**2*np.sin(x),"r--")
p3,=parasite2.plot(x,x*np.sin(x)*25,"g-.")
host.set_xlim(0,2)
host.set_ylim(0,2)
parasite1.set_ylim(0,4)
parasite2.set_ylim(1,65)
tkw=dict(size=4,width=1.5)
host.tick_params(axis='y',colors=p1.get_color(),**tkw)
parasite1.tick_params(axis='y',colors=p2.get_color(),**tkw)
parasite2.tick_params(axis='y',colors=p3.get_color(),**tkw)
host.tick_params(axis='x',**tkw)
plt.savefig('spines41.png',facecolor='w')
plt.show()
偏移 axis
importmatplotlib.pyplotasplt
importnumpyasnp
frommatplotlib.pathimportPath
frommatplotlib.spinesimportSpine
fig=plt.figure(figsize=(9.6,4.8))
#灰色的矩形區域是Axes區域
ax=plt.subplot(121,facecolor=[0.85,0.85,0.85])
ax2=plt.subplot(122,facecolor=[0.85,0.85,0.85])
x=np.linspace(-1,1.,100)
ax.plot(x,np.sin(x*np.pi))
ax2.plot(x,np.sin(x*np.pi),c='r')
#偏移ax的left和bottomspinesoutward20points
#默認的axis是緊貼axes的
ax.spines['left'].set_position(('outward',20))
ax.spines['bottom'].set_position(('outward',20))
ax.spines['right'].set_visible(False)
ax.spines['top'].set_visible(False)
ax.yaxis.set_ticks_position('left')
ax.xaxis.set_ticks_position('bottom')
plt.savefig('spines42.png',facecolor='w')
plt.show()
多 vertices 的 path
importmatplotlib.pyplotasplt
importnumpyasnp
frommatplotlib.pathimportPath
frommatplotlib.spinesimportSpine
fig=plt.figure(figsize=(6.4,4.8))
ax=plt.axes(polar=False)
path_data=[
(0.018,-0.11),
(-0.031,-0.051),
(-0.115,0.073),
(-0.03,0.073),
(-0.011,0.039),
(0.043,0.121),
(0.075,-0.005),
(0.035,-0.027),
(0.018,-0.11)]
path=Path(path_data)
x=np.linspace(-1,1.,100)
ax.plot(x,np.sin(x*np.pi)/7)
spine=Spine(ax,spine_type='circle',path=path)
ax.add_patch(spine)
spine.set_color('r')
spine.register_axis(ax.xaxis)
plt.savefig('spine43.png',facecolor='w')
plt.show()
總結
以上是生活随笔為你收集整理的Python matplotlib的spines模块怎么使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Promise 基础用法
- 下一篇: Flash怎么模仿制作出具有卡通风格的飞