📅  最后修改于: 2023-12-03 15:23:56.354000             🧑  作者: Mango
在 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()
首先使用 xlim
和 ylim
将坐标轴的范围设为 $[-\pi,\pi]$ 和 $[-1,1]$。
然后将其余的两个四周的坐标轴设置为透明,使得坐标轴只剩下一个x轴和一个y轴。
这样,就可以实现将原点放在图形的中心。
代码如下:
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')
来将坐标轴的位置调整到中间。
代码如下:
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')
来将坐标轴的宽度与高度调整一致。
最后也是将四周的坐标轴设置为透明的。
上述三种方法都可以实现将原点放在图形的中心,具体选用哪一种方法,可以视具体场景而定,但无论选择哪种方法,注意将四周的坐标轴设置为透明是必要的。