python - 将文本添加到轴间箭头
问题描述
昨天我问了一个基于误解的问题。我现在更清楚我实际上在问什么。
我想在两个轴之间绘制一个箭头,并在它旁边有文本,就像我在这里手动绘制的一样:
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()
可以使用 .在一个轴内将带有文本的箭头放在旁边ax.annotate()
。可以使用 来在轴之间绘制箭头ConnectionPatch
。但是,文档说:
ConnectionPatch 就像一个没有文本的注释。虽然在大多数情况下建议使用注释功能,但当您想要连接不同轴上的点时,ConnectionPatch 很有用。
因此,听起来 API 并未以用户友好的方式涵盖这两者(轴间箭头和文本)。
好的……但至少有一种可口的方式来解决这个问题,对吧?我昨天的问题的答案是基于我的误解。所以,我希望有一个基于我重新提出的问题的更好的解决方案。
那么,是否有一种可靠的方法可以将文本添加到轴间箭头(如ConnectionPatch
),而无需摆弄坐标ax.text
或诸如此类的废话?
解决方案
“坐标摆弄”解决方案需要很少的代码并且非常灵活:
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()
推荐阅读
- python - 如何在不导入的情况下输入提示
- vert.x - 在具有全双工 ReadStream 和 WriteStream 的 GRPC 的情况下发送错误
- javascript - 尽管 http 200 服务器发送事件错误
- python - 未定义符号:_ZTVN10__cxxabiv120__si_class_type_infoE:当通过 python 导入 c++ 方法时
- sql - Oracle 序列 - 如果序列生成表中已经存在的数字会发生什么
- cytoscape.js - Border-Shadow 并减小 cytoscape 中父元素 css 的大小
- python - 如何使用`ColumnTransformer`?
- excel - VBA - 从多个文本文件中导入 n 行
- floating-point - 什么是矢量浮点 (VFP)?
- javascript - 在父刷新 React Native 时更新子组件数据