使用Axes大小的固定分数注释点偏移

时间:2017-04-27 10:46:56

标签: matplotlib

我正在尝试在matplotlib中创建一组Axes.annotate()。我希望这些注释从点(类似于textcoords='offset pixels')偏移,但在‘axes fraction’而不是绝对像素数。

使用数据坐标的问题是,当使用对数(或其他)比例时,它会变得混乱。

offset pixels的问题是,如果更改图形的大小或dpi,外观会发生变化。

以下是尝试重述问题:

fig, axs = plt.subplots(1,2)
axs[0].plot([1,2],[10,100])
axs[1].semilogy([1,2],[10,100])
for ax in axs:
    ax.annotate('', xy=(1,10), xytext=(1,50), textcoords=('data', 'offset pixels'),arrowprops={'arrowstyle':'-', 'lw':3})
plt.show()

fig, axs = plt.subplots(1,2, dpi=200)
axs[0].plot([1,2],[10,100])
axs[1].semilogy([1,2],[10,100])
for ax in axs:
    ax.annotate('', xy=(1,10), xytext=(1,50), textcoords=('data', 'offset pixels'),arrowprops={'arrowstyle':'-', 'lw':3})
plt.show()

enter image description here enter image description here

我希望注释线的长度相同(相对于图的大小),无论图形的大小或轴的缩放。

这可能吗?

1 个答案:

答案 0 :(得分:0)

如果要以轴分数为单位指定注释偏移量,只需执行此操作即可。以下产生了20%轴分数的线。

ax.annotate('', xy=(1,10), xytext=(1,0.2), textcoords=('data', 'axes fraction')

enter image description here enter image description here