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