前面学习过隐藏坐标轴的方式来实现三Y轴的显示,并没有移动过坐标轴的位置,但是有时候需要移动坐标到某些位置,这样看曲线更加方便,比如像下图:
这时看到抛物线曲线分布在Y轴的两边,Y轴就是一条对称轴,分析起来就更方便了。本文将要介绍怎么样来实现坐标轴的移动。
要实现坐标轴的移动,首先要理解matplotlib里坐标轴的布局,如下图所示:
从图中可以看到,默认是有四个坐标轴线,简称为spines,在python里就是放到一个spines的字典里,这四个轴通过top、bottom、left、right来访问,比如要访问上面的坐标轴,通过spines[“top”]
就可以访问了。要想实现前面的图那样显示坐标轴,主要要解决两个问题,第一个问题,就是要隐藏上面和右边两条没有用到的坐标轴;第二个问题是移动左边和下面的坐标轴的位置。
隐藏的问题,在前面的文章已经学习过,这个比较容易实现,就是调用set_visible()函数就可以解决了,代码如下:
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.ticker import FuncFormatter, MaxNLocator
#
fig, ax = plt.subplots() #创建子图
#
x = np.linspace(0, 4*np.pi, 200)
y = np.sin(x)
#
ax.plot(x, y, lw = 3, color = 'b')
#隐藏右边和上边
ax.spines['right'].set_visible(False)
ax.spines['top'].set_visible(False)
plt.show()
这时运行代码之后,看到的结果如下图:
目前只剩下左边和下面的坐标轴了,只需要对坐标轴进行移动,就解决问题了。接着下来通过调用set_position函数就可以移动剩下的坐标轴,不过它的参数有几种方式,先来看第一种方式,根据数据的位置来调整坐标轴,意思就是说,把坐标轴原点移动到X轴上和Y轴上标记的刻度位置,比如说把左边的Y轴移动X轴的0.5位置,调用下面的代码:
ax.spines['left'].set_position(("data", 0.5))
使用元组(“data”, 0.5)来描述,第一个元素表示它是根据数据位置0.5来移动。
同理,把下面的X轴移动1的位置,调用下面的代码:
ax.spines['bottom'].set_position(("data", 1))
通过这两行代码,就可以确定坐标轴原点的位置在数据(0.5,1)地方,如下图:
整个例子的代码如下:
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.ticker import FuncFormatter, MaxNLocator
#
fig, ax = plt.subplots() #创建子图
#
x = np.linspace(0, 4*np.pi, 200)
y = np.sin(x)
#
ax.plot(x, y, lw = 3, color = 'b')
#隐藏右边和上边
ax.spines['right'].set_visible(False)
ax.spines['top'].set_visible(False)
#
ax.spines['left'].set_position(("data", 0.5))
ax.spines['bottom'].set_position(("data", 1))
plt.show()