使用matplotlib,我正在制作一个包含两个Axes对象的图形(即两组xy轴)。我想连接两个点 - 一个从一个轴中拾取,另一个从另一个轴中拾取---通过箭头或线。
我试图通过使用annotate()函数和ConnectionPatch对象来做到这一点,但是在两种方式中,箭头的一部分被“框架”隐藏了。一个轴。请参阅附图,其中我尝试通过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')
答案 0 :(得分:3)
一种简单的方法是将透明参数设置为savefig()
,即plt.savefig('fig1.png', transparent=1)
:
或者你可以在第二张图上使用透明度:
ax2.patch.set_facecolor('None')
如第21行。
答案 1 :(得分:2)
这可以通过setting轴上的z顺序来解决:
import matplotlib.patches
import matplotlib.pyplot as plt # Vanilla matplotlib==2.2.2
figure, (ax1, ax2) = plt.subplots(1, 2)
ax1.set_zorder(1)
ax2.set_zorder(0)
patch = matplotlib.patches.ConnectionPatch(
xyA=(0.0, 0.0),
xyB=(0.0, 0.0),
coordsA="data",
coordsB="data",
axesA=ax1,
axesB=ax2,
arrowstyle="->",
clip_on=False,
)
ax1.add_artist(patch)
for ax in (ax1, ax2):
ax.axis("scaled")
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)
figure.savefig("example1.png")