用不同的坐标系统对图形元素进行定位

时间:2022-07-24
本文章向大家介绍用不同的坐标系统对图形元素进行定位,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

当我们在绘制图形元素时,需要通过x轴和y轴的坐标来指定具体的位置,这里的x轴和y轴就是我们最常用的坐标系统。其实在matplotlib中,还有很多其他的坐标系统, 常用的坐标系统主要包括以下3类

1. data,其实就是最常用的x轴和y轴了,通过指定xlim和ylim范围内的数值来指定元素的位置,

2. axes,将axes的左下角视为(0, 0), 右上角视为(1,1),从而对元素进行定位

3. figure, 将figure的左下角视为(0, 0), 右上角视为(1,1),从而对元素进行定位

通过transform参数,可以显式指定坐标系统,通过几个例子来看下各自的用法,第一个例子是运用axes坐标系统,快速在axes的中心绘制一个元素,代码如下

>>> x = np.linspace(0, 3 * np.pi, 50)
>>> y = np.sin(x)
>>> plt.plot(x, y)
>>> ax=plt.gca()
>>> plt.text(x=0.5, y=0.5, s='text',transform=ax.transAxes)
>>> plt.show()

通过ax.transAxes指定使用axes坐标系统,(0.5, 0.5)就是图片的中心,输出结果如下

第二个例子,在axes边框之外标记文字,代码如下

>>> x = np.linspace(0, 3 * np.pi, 50)
>>> y = np.sin(x)
>>> plt.plot(x, y)
>>> fig=plt.gcf()
>>> plt.text(x=0.5, y=0.95, s='sin', bbox=dict(boxstyle='round',facecolor='0.8'),transform=fig.transFigure)
>>> plt.show()

通过fig.transFigure指定使用figure坐标系统, 输出结果如下

第三个例子,在两幅图像之间绘制连线,代码如下

>>> x = np.linspace(0, 3 * np.pi, 50)
>>> fig, (ax1, ax2) = plt.subplots(2, 1)
>>> ax1.plot(x, np.sin(x))
>>> ax2.plot(x, np.cos(x))
>>>
>>> con = ConnectionPatch(
... xyA=(np.pi, np.cos(np.pi)),
... coordsA=ax2.transData,
... xyB=(2 * np.pi, np.sin(2 * np.pi)),
... coordsB=ax1.transData)
>>>
>>> ax2.add_artist(con)
>>> plt.show()

通过ax.transData指定使用data坐标系统, 输出结果如下

针对不同场景,选取最适合的坐标系统,可以极大提高画图的效率。