内容简介: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对象,来完成刻线位置和标签这些属性的设置。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Head First HTML and CSS
Elisabeth Robson、Eric Freeman / O'Reilly Media / 2012-9-8 / USD 39.99
Tired of reading HTML books that only make sense after you're an expert? Then it's about time you picked up Head First HTML and really learned HTML. You want to learn HTML so you can finally create th......一起来看看 《Head First HTML and CSS》 这本书的介绍吧!