Matplotlib,用像素位置覆盖Y位置

时间:2017-01-17 19:06:02

标签: python matplotlib

我正在尝试使用Matpltlib绘制以下图表: enter image description here

我希望彩色圆点与图表底部保持恒定距离。 然而,正如您所看到的那样,它们会跳到整个地方,因为它们的y坐标以y值给出,并且y轴在每个图表中都不同。有没有办法从x轴以像素为单位定义y位置?无需借助%(图表的顶部 - 图表的底部)将是理想的。谢谢!

1 个答案:

答案 0 :(得分:5)

您可以绘制轴坐标中的点而不是数据坐标。轴坐标范围从0到1(左下角到右上角)。

为了使用轴坐标,您需要为图的Axes.transAxes参数提供transform - 另请参阅transformation tutorial

这是一个最小的例子:

import matplotlib.pyplot as plt

plt.plot([1,5,9], [456,894,347], "r-", 
         label="plot in data coordinates")
plt.plot([0.2,0.3,0.7], [0.2,0.2,0.5], "bo", 
         transform=plt.gca().transAxes, label="plot in axes coordinates")
plt.legend()
plt.show()

<小时/> 如果要在数据坐标中指定水平坐标,在轴坐标中指定垂直坐标,则可以使用blended transformation

matplotlib.transforms.blended_transform_factory(ax.transData, ax.transAxes)

这可以使用如下。

import matplotlib.pyplot as plt
import matplotlib.transforms as transforms

ax = plt.gca()
plt.plot([12,25,48], [456,894,347], "r-", 
         label="plot in data coordinates")
plt.plot([0.2,0.3,0.7], [0.2,0.2,0.5], "bo", 
         transform=ax.transAxes, label="plot in axes coordinates")
#blended tranformation:
trans = transforms.blended_transform_factory(ax.transData, ax.transAxes)
plt.plot([15,30,35], [0.75,0.25,0.5], "gs", markersize=12,
         transform=trans, label="plot x in data-,\ny in axes-coordinates")

plt.legend()
plt.show()