<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
matplotlib 設計了一個 spines模組,用於在建立 axes 時生成 Spine物件(座標軸線)。
spines模組定義了一個 Spine 類,為類定義了 25 個方法,其中有 3 個是 classmethod。
一個 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。
class matplotlib.spines.Spine(axes, spine_type, path, **kwargs)
基礎類別:matplotlib.patches.Patch
axesAxes
容納該 Spine 的 Axes
範例。
spine_type
str, spine 的型別,‘left’/‘right’/‘top’/‘bottom’/‘circle’。
spine 的型別分為兩大類:
path
用於繪製該 spine 的 Path
範例。
注意:
我們只能設定讓 Axes 的預設 axis Spines 不可見,不能真的刪除 axes 自動建立的 axis spines 物件。
範例化 matplotlib.spines.Spine
類即建立一個 Spine 物件,axes, spine_type, path
是必需引數。
spine_type
是 'left'/'right'/'top'/'bottom'
之一,即直線型別時, path
只能是兩個 vertices。理由很簡單,兩點決定一條直線。
直線型別的 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, # 否則會出發宣告錯誤 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()
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()
在 matplotlib, 建立 axes 時自動建立的 spines 被儲存在一個 OrderDict
中。即使設定 axis 不可見,axes.Spines 物件依然存在。
Axes 的 projection 不同, OrderDict 的 keys 也不同:
在matplotlib的圖中,可以通過ax = plt.gca()
方法獲取figure
的axes
物件,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,如果需要則建立一個 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.set_
方法:
設定 spine 物件的位置。
position
通過 (position type, amount)
元組定義。
position types
有:
(0, 1)
此外,速記符號定義了特殊的位置:
移動 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(*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()
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()
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)) # 灰色的矩形區域是 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 和 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()
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模組詳解內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45