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

Python?matplotlib的spines模塊實(shí)例詳解

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

spines 模塊詳解

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

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

Spine 類

Spine 類的定義

一個 axis spine – 標(biāo)注數(shù)據(jù)區(qū)域邊界的 line。

Spines 是連接 axis tick 標(biāo)記的直線,并且標(biāo)注數(shù)據(jù)區(qū)域的邊界??梢酝ㄟ^ set_position 將它放置在任意的位置。

默認(rèn)的位置是:('outward', 0)。

Spines 是 Patch的子類,并且繼承了Patch的大多數(shù)行為。

Spines 繪制 a line, a circle, 或者 an arc,取決于調(diào)用了 set_patch_line, set_patch_circle, or set_patch_arc 中的哪一個。默認(rèn)是 Line。

class matplotlib.spines.Spine(axes, spine_type, path, **kwargs)

基類:matplotlib.patches.Patch

Spine 類參數(shù)

axesAxes

容納該 Spine 的 Axes 實(shí)例。

spine_type

str, spine 的類型,‘left’/‘right’/‘top’/‘bottom’/‘circle’。

spine 的類型分為兩大類:

  • 直線型的,包括 ‘left’/‘right’/‘top’/‘bottom’;
  • ‘circle’ 類型, 包括 arc, circle;

path

用于繪制該 spine 的 Path 實(shí)例。

注意:

  • Spine 本質(zhì)就是一條線。用于連接 axis 的 tick,并標(biāo)記數(shù)據(jù)區(qū)域。
  • Spine 首先是為 _axes 子包在創(chuàng)建 Axes 時提供創(chuàng)建 axis spine 的工具。
  • 更重要的用途是提供了一系列方法供一般用戶設(shè)置、控制 axes 的 axis spines 的外觀和行為。
  • 為 axes 創(chuàng)建附加的 axis,或稱之為"寄生軸"提供工具。

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

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

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

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

直線類型的 spine 默認(rèn)的長度由 axes 的數(shù)據(jù)邊界決定。

創(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)]) #兩個頂點(diǎn)的 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, 的參數(shù)會覆蓋 path 的參數(shù)定義
spine.set_patch_arc((0.25,0.25),0.4,15,75)

ax.add_patch(spine)

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

plt.show()

默認(rèn)的 Spine 對象的存儲和調(diào)用

在 matplotlib, 創(chuàng)建 axes 時自動創(chuàng)建的 spines 被保存在一個 OrderDict 中。即使設(shè)置 axis 不可見,axes.Spines 對象依然存在。

Axes 的 projection 不同, OrderDict 的 keys 也不同:

  • 笛卡爾坐標(biāo)系的 OrderDict.keys() = odict_keys([‘left’, ‘right’, ‘bottom’, ‘top’])
  • polar 坐標(biāo)系的 OrderDict.keys() = odict_keys([‘polar’, ‘start’, ‘end’, ‘inner’])

在matplotlib的圖中,可以通過ax = plt.gca()方法獲取figureaxes對象,gca‘get current axes’的縮寫。axes默認(rèn)有四個 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()) #返回當(dāng)前 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 中的單個對象,并設(shè)置它的屬性。

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 設(shè)置為紅色
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 實(shí)例

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)

設(shè)置 spine 對象的位置。

position 通過 (position type, amount) 元組定義。

position types 有:

  • ‘outward’: 將 spine 從數(shù)據(jù)區(qū)移出指定的點(diǎn)數(shù)。(負(fù)值是指 spine inwards。)
  • ‘axes’: 將 spine 放到定義的 Axes 坐標(biāo)系中,(0, 1)
  • ‘data’: 將 spine 放到定義的 data 坐標(biāo)系中。

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

  • ‘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*)

設(shè)置 spine 的邊界。

Parameters:

low

float or None, optional

spine 的下界。傳遞 None,保留原 limit 不改變。

也可以在第一個位置參數(shù)傳遞 (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
# 默認(rèn)的 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 的線,我們已經(jīng)可以控制 axis 的 spine,下一篇開始將討論 ticks 對象。

總結(jié)

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

相關(guān)文章

  • pandas.concat實(shí)現(xiàn)DataFrame豎著拼接、橫著拼接方式

    pandas.concat實(shí)現(xiàn)DataFrame豎著拼接、橫著拼接方式

    這篇文章主要介紹了pandas.concat實(shí)現(xiàn)DataFrame豎著拼接、橫著拼接方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • 詳解Python中__str__和__repr__方法的區(qū)別

    詳解Python中__str__和__repr__方法的區(qū)別

    這篇文章主要介紹了__str__和__repr__方法的區(qū)別 ,__str__和__repr__是基本的內(nèi)置方法,使用時的區(qū)別也是Python學(xué)習(xí)當(dāng)中的基礎(chǔ),需要的朋友可以參考下
    2015-04-04
  • Python中文分詞庫jieba(結(jié)巴分詞)詳細(xì)使用介紹

    Python中文分詞庫jieba(結(jié)巴分詞)詳細(xì)使用介紹

    這篇文章主要介紹了Python中文分詞庫jieba(結(jié)巴分詞)提取詞,加載詞,修改詞頻,定義詞庫詳細(xì)使用介紹,需要的朋友可以參考下
    2022-04-04
  • 如何通過python畫loss曲線的方法

    如何通過python畫loss曲線的方法

    這篇文章主要介紹了如何通過python畫loss曲線的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • 淺談圖像處理中掩膜(mask)的意義

    淺談圖像處理中掩膜(mask)的意義

    今天小編就為大家分享一篇淺談圖像處理中掩膜(mask)的意義,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • python django 增刪改查操作 數(shù)據(jù)庫Mysql

    python django 增刪改查操作 數(shù)據(jù)庫Mysql

    下面小編就為大家?guī)硪黄猵ython django 增刪改查操作 數(shù)據(jù)庫Mysql。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-07-07
  • 一文詳解Python中subprocess模塊的用法

    一文詳解Python中subprocess模塊的用法

    Python的subprocess模塊是一個非常強(qiáng)大的工具,用于啟動和與外部進(jìn)程進(jìn)行交互,本文將為大家詳細(xì)介紹?subprocess模塊的各個方面,希望對大家有所幫助
    2023-11-11
  • python批量同步web服務(wù)器代碼核心程序

    python批量同步web服務(wù)器代碼核心程序

    這篇文章主要介紹了python批量同步web服務(wù)器代碼核心程序,需要的朋友可以參考下
    2014-09-09
  • python繪制地震散點(diǎn)圖

    python繪制地震散點(diǎn)圖

    這篇文章主要為大家詳細(xì)介紹了python繪制地震散點(diǎn)圖的相關(guān)方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-06-06
  • Django中select_related和prefetch_related的用法與區(qū)別詳解

    Django中select_related和prefetch_related的用法與區(qū)別詳解

    在實(shí)際的開發(fā)中,模型之間經(jīng)常存在復(fù)雜的關(guān)聯(lián)關(guān)系,下面這篇文章主要給大家介紹了關(guān)于Django中select_related和prefetch_related的用法與區(qū)別的相關(guān)資料,需要的朋友可以參考下
    2022-11-11

最新評論

蛟河市| 宾川县| 聂拉木县| 新和县| 祁阳县| 华容县| 准格尔旗| 宁安市| 招远市| 合肥市| 庄河市| 邮箱| 鹤岗市| 元氏县| 金华市| 泉州市| 金溪县| 乳山市| 襄城县| 龙岩市| 娄烦县| 闻喜县| 静宁县| 延川县| 邵阳县| 诸城市| 景泰县| 绵阳市| 平定县| 五莲县| 两当县| 洱源县| 盘锦市| 常德市| 大城县| 禹城市| 广平县| 九江市| 大化| 讷河市| 安塞县|