内容简介:1.剖析plt和坐标轴对象ax的关系2.主刻度与次刻度的概念3.格式生成器与定位器的概念
0.本集概览
1.剖析plt和坐标轴对象ax的关系
2.主刻度与次刻度的概念
3.格式生成器与定位器的概念
4.数值型主次刻度与自定义格式生成器函数举例
5.日期型主次刻度举例
这一集,我们专门来谈谈坐标轴的有关内容。
1.plt和坐标轴对象ax的关系
先看以下两段代码,他们实现的是同样的功能:绘制正余弦两个子图:
代码一:
import numpy as np import matplotlib.pyplot as plt x = np.linspace(0,10,1000) plt.subplot(2, 1, 1) plt.plot(x, np.sin(x)) #用plt绘制第一个子图 plt.subplot(2,1,2) plt.plot(x,np.cos(x)) #用plt绘制第二个子图 plt.show()
代码二:
import numpy as np import matplotlib.pyplot as plt x = np.linspace(0,10,1000) fig, ax = plt.subplots(2,1) ax[0].plot(x, np.sin(x)) #用对应的坐标轴对象画第一个子图 ax[1].plot(x, np.cos(x)) #用对应的坐标轴对象画第二个子图 plt.show()
可以看出,这两段代码所达到的效果是一样的。 代码段一采用的是MATLAB风格的接口 ,这是由于Matplotlib最初是作为MATLAB替代品的历史缘故。MATLAB风格的 工具 位于pyplot 即plt接口中,因此我们可以采用plt.plot函数来进行绘图。这种接口最重要的特征就是“有状态”:他表征当前所位于的子图状态,并持续跟踪当前的图形和坐标轴。并可以通过plt.gcf()获取当前的活动Figure对象,利用plt.gca()获取当前活动的axes坐标轴对象。
而 代码段二所采用的是完全不同的第二种模式,即面向对象接口 ,他在绘图的过程之中不再受到当前所谓“活动”图形及坐标轴的限制,因为他一次性就从subplots函数中获取了表征所有坐标轴的ax数组和Figure对象。
补充一点,坐标轴对象ax包含了横轴、纵轴所包围的区域内的一切(各坐标轴、刻度、标签、图形等)
我最后来说说plt和ax二者的联系,plt的绝大多数方法都有ax的对应版本,有的一模一样,有的稍作改变:
plt.plot() = ax.plot() plt.legend() = ax.legend() plt.xlabel()/ylabel()/xlim()/ylim()/title() = ax.setxlabel()/setylabel()/setxlim()/set_ylim()/set_title()
当然,如果用ax来设置这些参数的话,可以放在一个函数中,用多个关键字进行表征和设置
import numpy as np import matplotlib.pyplot as plt x = np.linspace(0,10,1000) ax = plt.axes() ax.plot(x,np.sin(x)) ax.set(xlim=(0,10), ylim=(-2,2), xlabel='x', ylabel='sin(x)',title='plot sin(x)') plt.show()
值得一提的是,在代码段一中我们还可以通过ax = plt.subplot(2, 1, 1)或ax = plt.gca()这两种方法来获得当前的坐标轴对象ax。
2.主刻度与次刻度的概念
强化了坐标轴ax的概念之后,我们再进入今天另一个重要的话题,坐标轴的主次刻度。
每一个坐标轴都有主要刻度线与次要刻度线。主要刻度更大更显著,而次要刻度往往更小。主刻度都显示为一个较大的刻度线和标签,而次要刻度都显示为一个较小的刻度线,而不显示标签。主次刻度这件事儿, 大家想想我们用过的尺子就知道了 ,厘米的地方刻度要长而明显,并且有数字标识,而毫米的地方刻度则要短,并且没有数字标识。这么做既能满足刻度线的完整性,又能突出刻度标识的重点。
我们先举一个例子:
import numpy as np import matplotlib as mpl import matplotlib.pyplot as plt from matplotlib.ticker import MultipleLocator, FormatStrFormatter fig = plt.figure() xmajorLocator = MultipleLocator(20) # 将x主刻度标签设置为20的倍数 xmajorFormatter = FormatStrFormatter('%1.1f') # 设置x轴标签文本的格式 xminorLocator = MultipleLocator(5) # 将x轴次刻度标签设置为5的倍数 ymajorLocator = MultipleLocator(0.5) # 将y轴主刻度标签设置为0.5的倍数 ymajorFormatter = FormatStrFormatter('%1.1f') # 设置y轴标签文本的格式 yminorLocator = MultipleLocator(0.1) # 将此y轴次刻度标签设置为0.1的倍数 ax = plt.subplot(111) ax.xaxis.set_major_locator(xmajorLocator) ax.xaxis.set_major_formatter(xmajorFormatter) ax.yaxis.set_major_locator(ymajorLocator) ax.yaxis.set_major_formatter(ymajorFormatter) # 显示次刻度标签的位置,没有标签文本 ax.xaxis.set_minor_locator(xminorLocator) ax.yaxis.set_minor_locator(yminorLocator) ax.xaxis.grid(True, which='major') # x坐标轴的网格使用主刻度 ax.yaxis.grid(True, which='minor') # y坐标轴的网格使用次刻度 t = np.arange(100) s = np.sin(0.1*np.pi*t)*np.exp(-t*0.01) plt.plot(t,s,'--r*') plt.show()
这个例子中,我们设置了主刻度线和次刻度线,其中x轴主刻度线是20的整数倍,并且标明了刻度值,而次要刻度线是5的整数倍,省去了刻度值。y轴同理。
3.格式生成器与定位器
这里的核心是定位器和格式生成器两个概念,我们先分别生成X轴的主定位器、主格式生成器,再生成X轴的次定位器(由于X轴次要坐标没有刻度值,所以省去了次要格式生成器)
然后再利用坐标轴ax的xaxis.set_major_locator、xaxis.set_major_formatter和xaxis.set_minor_locator方法,分别对定位器和格式生成器进行赋值。
总结一下:我们就是通过定义每个坐标轴的locator和formatter对象,来完成刻线位置和标签这些属性的设置。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。