在上一课,已经了解了基本的绘图方法,特别是熟悉了如何对坐标系做各种各样的设置,那是可视化的基础。本课要在上一课内容的基础上,进一步丰富坐标系内图像的设置。
注意,没有使用曲线这个词,显然包括但不限于曲线。
1.4.1 标注
如果在坐标系中绘制了多条曲线,会用图例表示出每条曲线的含义,这是一种区分方式;另外一种方式是直接对每条曲线进行标注,或许这样更直接明了。此外,有时候对于坐标系中某些特殊点也会进行标注。
%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(0, 10, 0.005)
y = np.exp(-x/2) * np.sin(2*np.pi*x)
fig, ax = plt.subplots()
ax.plot(x, y)
ax.set_xlim(0, 10)
ax.set_ylim(-1, 1)
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.xaxis.set_ticks_position('bottom')
ax.spines['bottom'].set_position(('data',0))
ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position('zero')
#以下标注
x1 = 1.25
y1 = np.exp(-x1/2) * np.sin(2*np.pi*x1)
ax.scatter([x1,], [y1,], 50, color='blue') #①
ax.plot([x1, x1], [0, y1], color='blue', linewidth=2.5, linestyle="--") #②
ax.plot([0, x1], [y1, y1], color='blue', linewidth=2.5, linestyle='--') #③
ax.annotate(r'$e^{-\frac{x}{2}}sin(2\pi{x}), x=1.25$',
xy=(x1, y1), xycoords='data',
xytext=(+30, +0.6), textcoords='offset points', fontsize=16,
arrowprops=dict(arrowstyle="->", connectionstyle="arc3,rad=.2")) #④
输出结果:
image先看输出的结果,相比以往绘制的类似图,此处做了两处改变,一处是坐标系,现在把 x 轴设置到了 y=0 的位置,这种设置方法的解释请参考上一课的内容;另外一处是增加了标注,即图中看到的,除了曲线和坐标轴之外,都属于标注的部分。这些内容是通过代码中写有注释的那一行以下的代码实现的,一共4行,下面逐一进行解释。
① 的目的在于呈现图中的坐标点,即那个蓝色的圆点。scatter 是实现散点图的方法(函数),后面会对此进行详细讲解。请注意这里的参数 [x1,], [y1,]。如果用数学方式表示,应该画出的点是 (x1, y1),这是一个坐标点。scatter 方法的参数跟以前学习过的 plot 一样,都要输入表示横轴的数据集和表示纵轴的数据集,那么,就要把 x1 和 y1 分别放到两个序列中,于是就有了参数 [x1,], [y1,]。
② 和 ③ 的作用就从坐标点 (x1, y1) 分别向 x 轴、y 轴画出垂直的虚线。
④ 是标注文字说明,此处使用 ax.annotate 方法,也可以用 plt.annotate 函数。
- r'e−x2sin(2πx),x=1.25<math xmlns="http://www.w3.org/1998/Math/MathML"><msup><mi>e</mi><mrow class="MJX-TeXAtom-ORD"><mo>−</mo><mfrac><mi>x</mi><mn>2</mn></mfrac></mrow></msup><mi>s</mi><mi>i</mi><mi>n</mi><mo stretchy="false">(</mo><mn>2</mn><mi>π</mi><mrow class="MJX-TeXAtom-ORD"><mi>x</mi></mrow><mo stretchy="false">)</mo><mo>,</mo><mi>x</mi><mo>=</mo><mn>1.25</mn></math>':这是所显示的内容,在 Matplolib 中,支持 LaTex 编辑显示公式。
- xy=(x1, y1):说明被标注点的坐标。
- xycoords='data':标注内容指向的点,默认值是 'data',也可以选其他值,更多内容请阅读这里。
- xytext=(+30, +0.6):上述文本内容的显示位置。
- arrowprops=dict(arrowstyle="->", connectionstyle="arc3,rad=.2"):箭头的设置。
在坐标系内能够绘制的图像,除了曲线之外,还有很多其他类型的图像,如散点图。
1.4.2 散点图
散点图很重要,是因为在科学研究中,特别是规律探索的过程中,散点图是一种常用的图像。通常发现科学规律的过程是这样进行的:
- 设计实验,通过实验测量得到数据;
- 将数据在坐标系内做散点图;
- 观察散点图的特点,推断可能的函数关系,即规律;
- 再用实验验证规律是否正确,也包括理论上的检验,总之,只要没有发现不符合上述规律的实验数据,就姑且认为该规律是成立的。
当然,上面的过程是以得到一个函数为例说明,有时候画出散点图,或许也不是为了得到某一个函数。
网友评论