Python 官方文档:入门教程 => 点击学习
目录spines 模块详解Spine 类Spine 类的定义Spine 类参数创建 Spine 对象的实例创建直线型 Spine 并添加到 axesspine_type=&lsquo
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模块详解内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!
--结束END--
本文标题: Python matplotlib的spines模块实例详解
本文链接: https://www.lsjlt.com/news/119752.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-03-01
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
一口价域名售卖能注册吗?域名是网站的标识,简短且易于记忆,为在线用户提供了访问我们网站的简单路径。一口价是在域名交易中一种常见的模式,而这种通常是针对已经被注册的域名转售给其他人的一种方式。
一口价域名买卖的过程通常包括以下几个步骤:
1.寻找:买家需要在域名售卖平台上找到心仪的一口价域名。平台通常会为每个可售的域名提供详细的描述,包括价格、年龄、流
443px" 443px) https://www.west.cn/docs/wp-content/uploads/2024/04/SEO图片294.jpg https://www.west.cn/docs/wp-content/uploads/2024/04/SEO图片294-768x413.jpg 域名售卖 域名一口价售卖 游戏音频 赋值/切片 框架优势 评估指南 项目规模 安全指南 Osprey 游戏分析 游戏调试 游戏图形 游戏物理 开源库
0