昨天我基于一个误解问了a question。我现在知道我到底在问什么。
我想在两个轴之间绘制一个箭头,并在其旁边放置文本,就像我在此处手动绘制一样:
import matplotlib.pyplot as plt
from matplotlib import patches
import numpy as np
fig = plt.figure()
X, Y = np.mgrid[-1:1:.1, -1:1:.1]
Z = X+Y
ax1 = fig.add_subplot(311)
ax2 = fig.add_subplot(313)
ax1.contourf(X, Y, Z)
ax2.contourf(X, Y, -Z)
con = patches.ConnectionPatch((0,0),
(0,0),
coordsA="data",
coordsB="data",
arrowstyle="<|-",
mutation_scale=20,
axesA=ax2,
axesB=ax1)
ax2.add_artist(con)
fig.show()
{strong> {1>}可以在一个箭头旁边内带有文本箭头。轴之间的绘制箭头可以使用ax.annotate()
完成。但是,文档说:
ConnectionPatch就像没有文本的注释。虽然在大多数情况下建议使用注释功能,但要连接不同轴上的点时,ConnectionPatch很有用。
因此,听起来这两种API(轴间箭头和文本)都没有以用户友好的方式被API覆盖。
好的...但是必须至少有一种可口的方法来实现这一目标,对吧?昨天我对这个问题的回答是基于我的误解。因此,我希望有一个更好的解决方案,基于我重新设计的问题。
因此,是否有一种健壮的方法可将文本添加到轴间箭头(如ConnectionPatch
),而又不摆弄坐标和ConnectionPatch
或此类废话?
答案 0 :(得分:2)
“协调摆弄”解决方案需要很少的代码,并且非常灵活:
import matplotlib.pyplot as plt
from matplotlib import patches
import numpy as np
fig = plt.figure()
X, Y = np.mgrid[-1:1:.1, -1:1:.1]
Z = X+Y
ax1 = fig.add_subplot(311)
ax2 = fig.add_subplot(313)
ax1.contourf(X, Y, Z)
ax2.contourf(X, Y, -Z)
xy1, xy2 = (0,0), (0,0)
con = patches.ConnectionPatch(xy2,
xy1,
coordsA="data",
coordsB="data",
arrowstyle="<|-",
mutation_scale=20,
axesA=ax2,
axesB=ax1)
ax2.add_artist(con)
# calculate center of inter-axes arrow in figure pixels
xy = np.mean([ax1.transData.transform(xy1), ax2.transData.transform(xy2)],
axis=0)
plt.annotate(" arrow label", xy, xycoords='figure pixels', va='center')
plt.show()