您现在的位置是:网站首页> 编程资料编程资料
Python matplotlib的spines模块实例详解_python_
2023-05-25
311人已围观
简介 Python matplotlib的spines模块实例详解_python_
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。
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,并标记数据区域。
- 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
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() 
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, 创建 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()方法获取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', ), ('right', ), ('bottom', ), ('top', )]) 可以通过 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 从数据区移出指定的点数。(负值是指 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,
相关内容
- Python进阶篇之正则表达式常用语法总结_python_
- 详解Django中CSRF和CORS的区别_python_
- Python利用matplotlib绘制圆环图(环形图)的实战案例_python_
- 利用Python实现网站自动签到_python_
- 关于python中的setup.py_python_
- python常见运算符及用法小结_python_
- python 实现打印扫描效果详情_python_
- 如何在Python中利用matplotlib.pyplot画出函数图详解_python_
- 使用Python matplotlib绘制简单的柱形图、折线图和直线图_python_
- OpenCV实现相机标定_python_
点击排行
本栏推荐
