Python 通过matplotlib中的箭头连接轴上的一点和另一轴上的另一点

Python 通过matplotlib中的箭头连接轴上的一点和另一轴上的另一点,python,matplotlib,plot,annotate,Python,Matplotlib,Plot,Annotate,使用matplotlib,我制作了一个包含两个轴对象(即两组xy轴)的图形。我想用箭头或线连接两个点,一个从一个轴上拾取,另一个从另一个轴上拾取 我试图通过使用annotate()函数和ConnectionPatch对象来实现这一点,但在这两种方式中,箭头的一部分被轴的“框架”隐藏。请参阅附图,其中我尝试通过ConnectionPatch对象连接两个轴的原点 我还附加了用于生成图形的脚本 是否有办法“向前”箭头(或将轴框架推到后面) 一种简单的方法是将透明参数设置为savefig(),即plt

使用matplotlib,我制作了一个包含两个轴对象(即两组xy轴)的图形。我想用箭头或线连接两个点,一个从一个轴上拾取,另一个从另一个轴上拾取

我试图通过使用annotate()函数和ConnectionPatch对象来实现这一点,但在这两种方式中,箭头的一部分被轴的“框架”隐藏。请参阅附图,其中我尝试通过ConnectionPatch对象连接两个轴的原点

我还附加了用于生成图形的脚本

是否有办法“向前”箭头(或将轴框架推到后面)


一种简单的方法是将透明参数设置为
savefig()
,即
plt.savefig('fig1.png',transparent=1)

或者,您可以仅在第二个图形上使用透明度:

ax2.patch.set\u facecolor('None')

如第21行所示。

这可以通过轴上的z顺序来解决:

import matplotlib.patches
将matplotlib.pyplot作为plt导入#Vanilla matplotlib==2.2.2
图(ax1,ax2)=plt.子批次(1,2)
ax1.集合顺序(1)
ax2.集合顺序(0)
patch=matplotlib.patches.ConnectionPatch(
xyA=(0.0,0.0),
xyB=(0.0,0.0),
coordsA=“数据”,
coordsB=“数据”,
axesA=ax1,
axesB=ax2,
箭头样式=“->”,
clip_on=False,
)
ax1.添加艺术家(补丁)
对于ax-in(ax1、ax2):
ax.轴(“缩放”)
ax1.set_xlim(-0.25,0.75)
ax1.set_ylim(-0.5,0.5)
ax2.set_xlim(0.0,1.0)
ax2.set_ylim(0.0,1.0)
图.savefig(“example1.png”)

谢谢你的回答。两个人都为我工作。但是,我仍然想知道一种控制箭头和轴帧的“zorder”的方法。如果我找到这样的方法,我会在这里报告。酷。非常感谢。您让我意识到,我只需要设置轴对象的zorder,因为ConnectionPatch对象被添加到一个轴对象中。
#!/usr/bin/python
# 
# This script was written by Norio TAKEMOTO 2012-5-7


import matplotlib.pyplot as plt
from matplotlib.patches import ConnectionPatch

# creating a figure and axes.
fig=plt.figure(figsize=(10,5))

ax1=plt.axes([0.05,0.15,0.40,0.80])

plt.xticks([0])
plt.yticks([0])
plt.xlim((-1.23, 1.23))
plt.ylim((-2.34, 2.34))


ax2=plt.axes([0.60,0.15, 0.30, 0.30])

plt.xticks([0])
plt.yticks([0])
plt.xlim((-3.45, 3.45))
plt.ylim((-4.56, 4.56))


# trying to connect the point (0,0) in ax1 and the point (0,0) in ax2
# by an arrow, but some part is hidden. I can't find a solution. Let's
# ask stackoverflow.

#xy_A_ax1=(0,0)
#xy_B_ax2=(0,0)
#
#inv1 = ax1.transData.inverted()
#xy_B_display = ax2.transData.transform(xy_B_ax2)
#xy_B_ax1     = inv1.transform(xy_B_display)
#ax1.annotate('Wundaba', xy=(0, 0), xytext=xy_B_ax1,
#             xycoords='data',textcoords='data', 
#             arrowprops=dict(arrowstyle='->'))


con = ConnectionPatch(xyA=(0, 0), xyB=(0, 0), 
                      coordsA='data', coordsB='data', 
                      axesA=ax1, axesB=ax2,
                      arrowstyle='->', clip_on=False)
ax1.add_artist(con)

plt.savefig('fig1.eps')
plt.savefig('fig1.png')