gpt4 book ai didi

python - 在子图之间画一条线

转载 作者:太空宇宙 更新时间:2023-11-03 11:06:23 60 4
gpt4 key购买 nike

我使用 Pyplot 在 Python 中创建了一个具有多个子图的图。

我想画一条不在任何地 block 上的线。我知道如何画一条线,它是情节的一部分,但我不知道如何在情节之间的空白处画线。

谢谢。


感谢您提供链接,但我不希望绘图之间有垂直线。它实际上是其中一个图上方的水平线,表示某个范围。有没有办法在图形上任意画一条线?

最佳答案

首先,一个快速的方法是使用 axvspan,y 坐标大于 1 且 clip_on=False。不过,它绘制的是一个矩形而不是一条线。

举个简单的例子:

import matplotlib.pyplot as plt

fig, ax = plt.subplots()
ax.plot(range(10))
ax.axvspan(2, 4, 1.05, 1.1, clip_on=False)
plt.show()

enter image description here

对于绘制线条,您只需指定要用作plot 的kwarg 的transform(实际上,这同样适用于大多数其他绘图命令) .

要绘制“轴”坐标(例如 0,0 是轴的左下角,1,1 是右上角),请使用 transform=ax.transAxes,然后绘制图形坐标(例如 0,0 是图形窗口的左下角,而 1,1 是右上角)使用 transform=fig.transFigure

正如@tcaswell 所提到的,annotate 使放置文本变得更简单,并且对于注释、箭头、标签等非常有用。您可以使用 annotate 来做到这一点(通过画一条线在一个点和一个空字符串之间),但如果你只想画一条线,那么不画会更简单。

虽然听起来您想要做的事情,但您可能想要做一些不同的事情。

创建一个变换很容易,其中 x 坐标使用一种变换而 y 坐标使用不同的变换。这就是 axhspanaxvspan 在幕后所做的事情。这对于您想要的东西非常方便,其中 y 坐标固定在轴坐标中,而 x 坐标反射(reflect)数据坐标中的特定位置。

以下示例说明了仅在轴坐标中绘制和使用“混合”变换之间的区别。尝试平移/缩放两个子图,并注意会发生什么。

import matplotlib.pyplot as plt
from matplotlib.transforms import blended_transform_factory

fig, (ax1, ax2) = plt.subplots(nrows=2)

# Plot a line starting at 30% of the width of the axes and ending at
# 70% of the width, placed 10% above the top of the axes.
ax1.plot([0.3, 0.7], [1.1, 1.1], transform=ax1.transAxes, clip_on=False)

# Now, we'll plot a line where the x-coordinates are in "data" coords and the
# y-coordinates are in "axes" coords.
# Try panning/zooming this plot and compare to what happens to the first plot.
trans = blended_transform_factory(ax2.transData, ax2.transAxes)
ax2.plot([0.3, 0.7], [1.1, 1.1], transform=trans, clip_on=False)

# Reset the limits of the second plot for easier comparison
ax2.axis([0, 1, 0, 1])

plt.show()

平移前

enter image description here

平移后

enter image description here

请注意,对于底部图(使用“混合”变换),该线位于数据坐标中并随新轴范围移动,而顶部线位于轴坐标中并保持固定。

关于python - 在子图之间画一条线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18192600/

60 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com