如何设置matplotlib中x,y坐标轴的位置?
在机器学习中经常会使用Sigmoid函数,如果直接使用matplotlib绘图,那么就会像下图这样,原点并没有在(0,0)。
import matplotlib.pyplot as plt
import numpy
x = numpy.linspace(start=-10, stop=10)
y = 1 / (1 + numpy.e ** (-1 * x))
plt.plot(x, y)
plt.title('Sigmoid')
plt.show()
于是,我们希望调整坐标轴的位置,让图像更加的直观。
在matplotlib的图中,默认有四个轴,两个横轴(“top”、“bottom”)和两个竖轴(“left”、“right”),可以通过ax = plt.gca()
方法获取,gca是“get current axes”的缩写。
先将显示的坐标图的上边框和右边框去掉,即设置它们的显示方式为不显示:
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
注:spines译为“脊”,也就是坐标图中的边框。
将坐标图的下边框和左边框作为坐标系的x轴和y轴,并调整坐标轴的位置:
ax.spines['bottom'].set_position(('data', 0))
ax.spines['left'].set_position(('axes', 0.5))
注:设置坐标轴的位置时,“data”表示通过值来设置坐标轴的位置,“axes”表示以百分比的形式设置轴的位置。
ax.spines['bottom'].set_position(('data',0))
表示将x轴设置在y=0处。ax.spines['bottom'].set_position(('axes',0.3))
表示将x轴设置在y轴范围的30%处。
完整代码如下:
import matplotlib.pyplot as plt
import numpy
x = numpy.linspace(start=-10, stop=10)
y = 1 / (1 + numpy.e ** (-1 * x))
ax = plt.gca() # 获取坐标轴
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.spines['bottom'].set_position(('data', 0))
ax.spines['left'].set_position(('axes', 0.5))
plt.plot(x, y)
plt.title('Sigmoid')
plt.show()