📌  相关文章
📜  如何使用 Matplotlib 将原点放在图形的中心?(1)

📅  最后修改于: 2023-12-03 15:23:56.354000             🧑  作者: Mango

如何使用 Matplotlib 将原点放在图形的中心?

在 Matplotlib 中,坐标轴默认是以左下角为原点(0,0)的,这在某些情况下会导致可视化的困难,特别是当需要绘制圆形图时。

下面介绍几种方式,将原点放在图形的中心。

方式一:设置坐标轴范围

代码如下:

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(-np.pi, np.pi, 100)
y = np.sin(x)

plt.plot(x, y)

plt.xlim(-np.pi, np.pi)
plt.ylim(-1, 1)

plt.gca().spines['right'].set_color('none')
plt.gca().spines['top'].set_color('none')
plt.gca().xaxis.set_ticks_position('bottom')
plt.gca().yaxis.set_ticks_position('left')

plt.show()

首先使用 xlimylim 将坐标轴的范围设为 $[-\pi,\pi]$ 和 $[-1,1]$。

然后将其余的两个四周的坐标轴设置为透明,使得坐标轴只剩下一个x轴和一个y轴。

这样,就可以实现将原点放在图形的中心。

方式二:使用 ax.spines调整坐标轴

代码如下:

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(-np.pi, np.pi, 100)
y = np.sin(x)

fig, ax = plt.subplots()

ax.plot(x, y)

ax.spines['left'].set_position('center')
ax.spines['bottom'].set_position('center')

ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')

ax.xaxis.set_ticks_position('bottom')
ax.yaxis.set_ticks_position('left')

plt.show()

这个方法与第一个方法有相似之处,也是将四周的坐标轴设置为透明的。

不同的是,我们使用 ax.spines 来设置坐标轴的属性,并使用 set_position('center') 来将坐标轴的位置调整到中间。

方式三: 使用 pcolormesh 和 GridSpec

代码如下:

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec

x = np.linspace(-np.pi, np.pi, 100)
y = np.linspace(-1, 1, 100)

X, Y = np.meshgrid(x, y)
Z = np.sin(np.sqrt(X ** 2 + Y ** 2))

fig = plt.figure(constrained_layout=True)
spec = gridspec.GridSpec(ncols=1, nrows=1, figure=fig)
ax = fig.add_subplot(spec[0, 0])
ax.set_aspect('equal')
im = ax.pcolormesh(X, Y, Z, cmap='RdBu')

ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')

ax.xaxis.set_ticks_position('bottom')
ax.yaxis.set_ticks_position('left')

plt.colorbar(im)
plt.show()

利用 pcolormesh 函数构建一个 $100\times100$ 的网格,使用 set_aspect('equal') 来将坐标轴的宽度与高度调整一致。

最后也是将四周的坐标轴设置为透明的。

总结

上述三种方法都可以实现将原点放在图形的中心,具体选用哪一种方法,可以视具体场景而定,但无论选择哪种方法,注意将四周的坐标轴设置为透明是必要的。