我需要在图中标记某些值而不更改轴限制,例如,我想要一条垂直线
x=pi/2
来标记
max(cos(x))
但我不想找出适当的
y
限制,我只想我的垂直线从轴的 33% 到 67%。因此,按照 matplotlib 中的
垂直和水平线
,我正在使用
axvline
现在,我想
用
垂直
注释垂直线
旁边的文本(因此
annotate
已消失)。
因此我需要使用
text
(参见,例如,
在垂直线旁边添加文本
)。
唉,|| |需要
text
和
x
在
y
数据
坐标中。是的,“
可以使用
变换
参数
来更改坐标系”,但我需要
数据和
x
轴坐标!
y
那么,怎么做我用竖排文本注释
?
axvline
with vertical text?
可以组合使用
axvline
、
text
和一些精心计算的坐标来实现。
axvline
会给提供绘制线,而
text
会让在指定位置添加文本。诀窍在于使用
轴坐标
来定位文本,轴坐标的范围是从 0(轴的底部/左侧)到 1(轴的顶部/右侧)。
以下是一个示例:
import matplotlib.pyplot as plt
import numpy as np
# 示例数据
x = np.linspace(0, 2*np.pi, 100)
y = np.cos(x)
fig, ax = plt.subplots()
ax.plot(x, y)
# 绘制 axvline
x_val = np.pi/2
ax.axvline(x=x_val, ymin=0.33, ymax=0.67, color='r')
# 添加垂直文本
ax.text(x_val, 0.5, "max(cos(x))", rotation=90, ha='right', va='center', transform=ax.get_xaxis_transform())
plt.show()
说明:
-
axvline
: -
x=x_val
: 设置垂直线的 x 坐标。 -
ymin=0.33, ymax=0.67
: 定义垂直线在 y 轴上的范围(33% 到 67%)。 -
text
: -
x_val
: 将文本水平放置在垂直线的 x 坐标处。 -
0.5
: 将文本垂直放置在轴高度的中间(可以根据需要调整此值)。 -
rotation=90
: 将文本旋转 90 度使其垂直。 -
ha='right', va='center'
: 相对于指定点对齐文本。 -
transform=ax.get_xaxis_transform()
: 这是关键部分! 此转换会告诉 matplotlib 使用 x 轴的坐标系来放置文本。这意味着 x 坐标将参考数据坐标,而 y 坐标将参考轴坐标(从 0 到 1)。
此方法使可以在不手动计算数据坐标的情况下将垂直文本放置在
axvline
旁边。