七、坐标变换

  1. matplotlib中有四个坐标系:

    • 用户级的data坐标系:坐标转换对象为ax.transData。它是用户级坐标系,由xlimylim控制
    • Axes坐标系:坐标转换对象为ax.transAxes。它是Axes的坐标系,(0,0)Axes的左下角,(1,1)Axes的右上角。
    • Figure坐标系:坐标转换对象为fig.transFigure。它是Figure的坐标系,(0,0)Figure的左下角,(1,1)Figure的右上角。
    • display坐标系:它没有坐标转换对象。它显示的是display的像素坐标系,(0,0)display的左下角,(width,height)display的右上角。

    前面三个坐标系的坐标转换对象有方法执行坐标转换,这些方法接受输入并产生输出:输入为本坐标系内的坐标点,输出为display坐标系中的坐标。(因此display坐标系没有坐标转换对象)。当然他们也有相关方法将来自于display坐标系中的坐标转换回本坐标系内的坐标。

  2. Artist的构造函数中传入transform关键字参数(其值为坐标转换对象),就能够切换坐标系。如:ax.text(0.05,0.95,label,"This is a Text",transform=ax.transAxes),将Text放置于Axes坐标系中的(0.05,0.95)位置处。

    通常不建议直接使用display坐标系。因为它固定了绝对坐标,导致你resize图表时你必须重新定位坐标。所以你必须监听resize事件,非常麻烦。