matplotlib画图时,默认状态下,坐标轴的原点一般不是0,但是,多数情况下,要求坐标轴的原点在x轴、y轴均处于0的位置,可以用ax.set_xlim、ax.set_ylim来设置。
默认绘图举例的代码如下
import matplotlib.pyplot as plt
import numpy as np
x=np.linspace(1,10,50)
y=x**2
plt.rcParams['axes.spines.left'] = True
plt.rcParams['axes.spines.right'] = False
plt.rcParams['axes.spines.bottom'] = True
plt.rcParams['axes.spines.top'] = False
plt.plot(x,y)
plt.show()
图片如下
可以看到,坐标轴的原点不在0的位置,刻度朝向外侧,刻度标签即数字不是太理想,或者说不是太符合作者的个性化要求。线条较少,没有网格线条,图片比较单调。
用ax.set_xlim和ax.set_ylim,重新规划x轴和y轴的范围,最小值设置为0;ax.axes.set_xticks和ax.axes.set_yticks自定义刻度,即ticks的显示位置;ax.tick_params函数自定义刻度朝内;ax.grid设置图片内部网格,即grid的线条样式(line style),优化后的最终图片如下。
优化图片的操作代码如下
# 创建一个新图表
fig, ax = plt.subplots()
# 用上面的x、y数据重新绘图
ax.plot(x, y)
# 设置坐标轴的标记范围和刻度的位置
ax.set_xlim(0, 12)
ax.set_ylim(0, 100)
ax.axes.set_xticks([0,3,6,9,12])
ax.axes.set_yticks([0,25,50,75,100])
#设置x轴、y轴的刻度方向,均朝向内侧
ax.tick_params(axis='both',direction='in')
#设置网格线的样式,即线条的样式line style
ax.grid(ls='-.')
plt.show()
由上图可见,x轴上,线条的最大值约为10,图片右侧空了一块,不够美观。继续优化,ax.set_xlim(0, 12)中,改为0到10,ax.axes.set_xticks([0,3,6,9,12])中,删除12,不在x轴的12处添加刻度数字,代码及图片如下
# 创建一个新图表
fig, ax = plt.subplots()
# 用上面的x、y数据重新绘图
ax.plot(x, y)
# 设置坐标轴的标记范围和刻度的位置
ax.set_xlim(0, 10)
ax.set_ylim(0, 100)
ax.axes.set_xticks([0,3,6,9])
ax.axes.set_yticks([0,25,50,75,100])
#设置x轴、y轴的刻度方向,均朝向内侧
ax.tick_params(axis='both',direction='in')
#设置网格线的样式,即线条的样式line style
ax.grid(ls='-.')
plt.show()
简单总结:matplotlib的自定义功能比较强大,通过自定义设置,可以实现图片在多个不同特征上的个性化,从而满足杂志、文章、讲课时PPT的要求。