The transformation pipeline
转换管道
目录:
1.坐标系 https://mp.csdn.net/postedit/83505486
2.轴坐标 https://mp.csdn.net/postedit/83660100
3. 偏移变换 https://mp.csdn.net/postedit/83660161
4. 转换管道 https://blog.csdn.net/tcy23456/article/details/83660171
在ax.transData
改变我们一直与本教程是包含从管路改造三种不同变换的复合data
- >display
坐标。Michael Droettboom实现了转换框架,注意提供一个干净的API,隔离极坐标和对数图中发生的非线性投影和比例,从平移和缩放时发生的线性仿射变换。这里有一个效率,因为您可以平移和放大影响仿射变换的轴,但您可能不需要计算简单导航事件中可能昂贵的非线性尺度或投影。也可以将仿射变换矩阵相乘,然后在一个步骤中将它们应用于坐标。所有可能的转换都不是这样。
以下是ax.transData
在基本可分轴类中定义实例的方法Axes
:
self.transData = self.transScale + (self.transLimits + self.transAxes)
我们已经transAxes
在Axes坐标中介绍了上面的实例 ,它将轴或子图边界框的(0,0),(1,1)角映射到display
空间,所以让我们看看其他两个部分。
self.transLimits
是将你data
带到axes
坐标的转变 ; 即,它将您的视图xlim和ylim映射到轴的单位空间(transAxes
然后将该单位空间显示为空间)。我们可以在这里看到这一点
In [80]: ax = subplot(111)
In [81]: ax.set_xlim(0, 10)
Out[81]: (0, 10)
In [82]: ax.set_ylim(-1,1)
Out[82]: (-1, 1)
In [84]: ax.transLimits.transform((0,-1))
Out[84]: array([ 0., 0.])
In [85]: ax.transLimits.transform((10,-1))
Out[85]: array([ 1., 0.])
In [86]: ax.transLimits.transform((10,1))
Out[86]: array([ 1., 1.])
In [87]: ax.transLimits.transform((5,0))
Out[87]: array([ 0.5, 0.5])
我们可以使用相同的倒置变换从单位 axes
坐标回到data
坐标.
In [90]: inv.transform((0.25, 0.25))
Out[90]: array([ 2.5, -0.5])
最后一块是self.transScale
属性,它负责数据的可选非线性缩放,例如,用于对数轴。当最初设置Axes时,这只是设置为身份变换,
因为基本matplotlib轴具有线性比例,但是当您调用对数缩放函数 semilogx()
或者将比例显式设置为对数时set_xscale()
,则该 ax.transScale
属性设置为处理非线性投影。比例变换是各自xaxis
和 yaxis
Axis
实例的属性。例如,当您调用时ax.set_xscale('log')
,xaxis会将其比例更新为 matplotlib.scale.LogScale
实例。
对于不可分离的轴PolarAxes,还有一个要考虑的因素是投影变换。在transData
matplotlib.projections.polar.PolarAxes
类似于对典型可分离matplotlib轴,具有一个附加的片transProjection
:
self.transData = self.transScale + self.transProjection + \
(self.transProjectionAffine + self.transAxes)
transProjection处理从空间的投影,例如,地图数据的纬度和经度,或极坐标数据的半径和θ,到可分离的笛卡尔坐标系。包中有几个投影示例,matplotlib.projections
了解更多内容的最佳方法是打开这些包的源代码并查看如何创建自己的包,因为matplotlib支持可扩展的轴和投影。Michael Droettboom提供了一个很好的教程示例,用于创建锤子投影轴; 请参阅 api示例代码:custom_projection_example.py