最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python?matplotlib的spines模塊實例詳解

 更新時間:2022年08月02日 16:42:03   作者:Python草堂  
作為程序員,經常需要進行繪圖,下面這篇文章主要給大家介紹了關于Python?matplotlib的spines模塊的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下

spines 模塊詳解

matplotlib 設計了一個 spines模塊,用于在創(chuàng)建 axes 時生成 Spine對象(坐標軸線)。

spines模塊定義了一個 Spine 類,為類定義了 25 個方法,其中有 3 個是 classmethod。

Spine 類

Spine 類的定義

一個 axis spine – 標注數據區(qū)域邊界的 line。

Spines 是連接 axis tick 標記的直線,并且標注數據區(qū)域的邊界??梢酝ㄟ^ 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。

class matplotlib.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,并標記數據區(qū)域。
  • Spine 首先是為 _axes 子包在創(chuàng)建 Axes 時提供創(chuàng)建 axis spine 的工具。
  • 更重要的用途是提供了一系列方法供一般用戶設置、控制 axes 的 axis spines 的外觀和行為。
  • 為 axes 創(chuàng)建附加的 axis,或稱之為"寄生軸"提供工具。

我們只能設置讓 Axes 的默認 axis Spines 不可見,不能真的刪除 axes 自動創(chuàng)建的 axis spines 對象。

創(chuàng)建 Spine 對象的實例

實例化 matplotlib.spines.Spine 類即創(chuàng)建一個 Spine 對象,axes, spine_type, path 是必需參數。

spine_type'left'/'right'/'top'/'bottom'之一,即直線類型時, path 只能是兩個 vertices。理由很簡單,兩點決定一條直線。

直線類型的 spine 默認的長度由 axes 的數據邊界決定。

創(chuàng)建直線型 Spine 并添加到 axes

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.path import Path
from matplotlib.spines import Spine

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, 
# 否則會出發(fā)聲明錯誤 AssertionError: unexpected vertices shape
spine = Spine(ax, 'right',path)
spine.set_color('r')

ax.add_patch(spine)

plt.savefig('spines131.png',facecolor='w')

plt.show()

spine_type=‘circle’

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.path import Path
from matplotlib.spines import Spine

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, 創(chuàng)建 axes 時自動創(chuàng)建的 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

import matplotlib.pyplot as plt
import numpy as np

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,如果需要則創(chuàng)建一個

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.Spine object at 0x000001C6228F11C0>), ('right', <matplotlib.spines.Spine object at 0x000001C6228F1C40>), ('bottom', <matplotlib.spines.Spine object at 0x000001C6228F1BB0>), ('top', <matplotlib.spines.Spine object at 0x000001C6228E7F10>)])

可以通過 axes.Spines['key'] 來獲取 axes.spines 中的單個對象,并設置它的屬性。

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.path import Path
from matplotlib.spines import Spine

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's Spine 設置為紅色
ax.spines['left'].set_linewidth(5) #left's 線寬
ax.spines['top'].set_visible(False) #top's Spine 不可見

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 從數據區(qū)移出指定的點數。(負值是指 spine inwards。)
  • ‘axes’: 將 spine 放到定義的 Axes 坐標系中,(0, 1)
  • ‘data’: 將 spine 放到定義的 data 坐標系中。

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

  • ‘center’ -> (‘axes’, 0.5)
  • ‘zero’ -> (‘data’, 0.0)

移動 axis 到 (0, 0) 位置

aimport matplotlib.pyplot as plt
import numpy as np
from matplotlib.path import Path
from matplotlib.spines import Spine

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 和 bottom spines 到 (0,0) 位置
ax.spines["left"].set_position(("data", 0))
ax.spines["bottom"].set_position(("data", 0))
# 隱藏 top 和 right spines.
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 不改變。

import numpy as np
import matplotlib.pyplot as plt

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()

用法示例

創(chuàng)建多個 yaxis

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.path import Path
from matplotlib.spines import Spine
import random


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

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.path import Path
from matplotlib.spines import Spine

fig = plt.figure(figsize=(9.6,4.8))

# 灰色的矩形區(qū)域是 Axes 區(qū)域
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 和 bottom spines outward 20 points
# 默認的 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

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.path import Path
from matplotlib.spines import Spine

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()

axis 是連接 ticks 的線,我們已經可以控制 axis 的 spine,下一篇開始將討論 ticks 對象。

總結

到此這篇關于Python matplotlib的spines模塊的文章就介紹到這了,更多相關matplotlib spines模塊詳解內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

最新評論

芒康县| 昂仁县| 依安县| 榆林市| 安西县| 新绛县| 宁化县| 静安区| 新民市| 苏尼特左旗| 天全县| 佳木斯市| 东至县| 望奎县| 安远县| 商河县| 阿拉尔市| 什邡市| 临城县| 抚州市| 鄢陵县| 通化市| 道真| 四会市| 平度市| 海兴县| 美姑县| 盐津县| 中方县| 清河县| 大同县| 新丰县| 隆化县| 南城县| 颍上县| 乌鲁木齐市| 古丈县| 宾阳县| 福海县| 安塞县| 文昌市|