日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

Python matplotlib的spines模块怎么使用

發布時間:2023/12/15 综合教程 34 生活家
生活随笔 收集整理的這篇文章主要介紹了 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()方法獲取figureaxes對象,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 有:

    • &lsquo;outward&rsquo;: 將 spine 從數據區移出指定的點數。(負值是指 spine inwards。)

    • &lsquo;axes&rsquo;: 將 spine 放到定義的 Axes 坐標系中,(0, 1)

    • &lsquo;data&rsquo;: 將 spine 放到定義的 data 坐標系中。

    此外,速記符號定義了特殊的位置:

    • &lsquo;center&rsquo; -> (&lsquo;axes&rsquo;, 0.5)

    • &lsquo;zero&rsquo; -> (&lsquo;data&rsquo;, 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模块怎么使用的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。