我决定玩一下this的示例代码。我成功地找到了如何在两个子图之间绘制一条直线,即使该线超出了其中一个子图的边界。
import matplotlib.pyplot as plt
import matplotlib as mpl
import numpy as np
fig = plt.figure(figsize=(10, 5))
ax1 = fig.add_subplot(121)
ax2 = fig.add_subplot(122)
axs = [ax1, ax2]
# Fixing random state for reproducibility
np.random.seed(19680801)
# generate some random test data
all_data = [np.random.normal(0, std, 100) for std in range(6, 10)]
# plot violin plot
axs[0].violinplot(all_data,
showmeans=False,
showmedians=True)
axs[0].set_title('Violin plot')
# plot box plot
axs[1].boxplot(all_data)
axs[1].set_title('Box plot')
# adding horizontal grid lines
for ax in axs:
ax.yaxis.grid(True)
ax.set_xticks([y + 1 for y in range(len(all_data))])
ax.set_xlabel('Four separate samples')
ax.set_ylabel('Observed values')
for tick in ax.xaxis.get_major_ticks():
tick.label.set_fontsize(20)
plt.setp(axs[0], xticklabels=['x1', 'x2', 'x3', 'x4'])
transFigure = fig.transFigure.inverted()
coord1 = transFigure.transform(ax1.transData.transform([5,10]))
coord2 = transFigure.transform(ax2.transData.transform([2,-10]))
line = mpl.lines.Line2D((coord1[0],coord2[0]),(coord1[1],coord2[1]),
c='k', lw=5, transform=fig.transFigure)
fig.lines.append(line)
是的,那条添加的线很丑,但我只想让它起到功能。
不过,我真正想做的是在子图之间制作一个箭头,但我无法弄清楚如何做到这一点,而不需要自己弄出箭头。有没有一种方法可以使用matplotlib.pyplot.arrow
类来实现这一点呢?
coord1
和coord2
设置的位置要高一点。有没有办法让这些 y 坐标精确呢? - Forklift17matplotlib.patches.FancyArrowPatch
参数shrinkA=0
(尾部)和shrinkB=0
(头部)。默认值出于某种原因为2。回答已相应编辑。 - Biggsystart = [0.5, 1.0]; ax1.plot(*start, marker="x"); end = [0.75, 0.25]; ax2.plot(*end, marker="x"); coord1 = transFigure.transform(ax1.transData.transform(start)); coord2 = transFigure.transform(ax2.transData.transform(end))
),并上传输出图像吗? - Biggsy