Axis 对象详解之一_创建我们熟悉的笛卡尔坐标系

Axis 对象详解之一_创建我们熟悉的笛卡尔坐标系

在这里插入图片描述
在这里插入图片描述

matplotlib 使用下面的代码创建一个 figure, axes:

import matplotlib.pyplot as plt

fig,ax = plt.subplots()

plt.show()

在这里插入图片描述

就会自动创建左边和底边的 axis,在 matplotlib 内部,这个 axis 是如何创建的呢?

Axes 是最重要的容器对象,包含大部分图形元素:Axis、Tick、Line2D、Text、Polygon等,并设置坐标系统。

所以,matplotlib 库设计了一个 axes 子包,子包提供了如下 5 个模块:

  • __init__.py
  • _axes.py
  • _base.py
  • _secondary_axes.py
  • _subplots.py

在子包的初始化模块 __init__.py 中,导入两个模块:

from ._subplots import *
from ._axes import *

_base.py 模块是一般用户很少直接调用,但却是非常重要的模块。在该模块中提供了 Axes, subplots 中很多对象的基类。

_base.py 中导入 import matplotlib.spines as mspines,在 class _AxesBase(martist.Artist) 类中调用 spines.Spine 对象,提供了创建 axis 的功能。

_subplots.py, _axes 中都调用了 _base._AxesBase类,来创建默认的 Spine (axis)

Spine 是什么?

英汉词典中spine解释为 脊椎,脊柱,中心,搜索 spine 的网络图片,下面这张很好的诠释了 matplotlib 中的 spine 的含义:

在这里插入图片描述

一根主线,连接着一节一节,并标记出每节的位置。这不就是 matplotlib 中的 Axis 吗!

所以, matplotlib 中设计了一个 spines模块,提供了一个 Spine 类和一系列方法,用于创建、定义、控制 matplotlib 的 Axis。

在这里插入图片描述

绘制我们熟悉的笛卡尔坐标系

文章开始两张图,第一张是 matplotlib 默认创建的 axis,第二张是我们初中时熟悉的笛卡尔坐标系的样子。

要创建左边那样的坐标系,就需要使用 spines,结合坐标变换:

import matplotlib.pyplot as plt
import numpy as np


fig, ax = plt.subplots()

ax.spines["left"].set_position(("data", 0))
ax.spines["bottom"].set_position(("data", 0))

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)


x = np.linspace(-1, 1., 100)
ax.plot(x, np.sin(x*np.pi))

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

plt.show()

在这里插入图片描述
下一篇,我们将详细讨论 spines 模块,并示例演示如何使用 spine 实现各种特殊的 axis。


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Python草堂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值