是否有matplotlib类似于 MATLAB 的line extensions的功能?
我基本上是在寻找一种将线段扩展到绘图的方法。我现在的情节是这样的。
在查看了另一个问题并应用了公式之后,我能够把它拿到这里,但它看起来仍然很乱。
有人在这里有神奇的公式吗?
是否有matplotlib类似于 MATLAB 的line extensions的功能?
我基本上是在寻找一种将线段扩展到绘图的方法。我现在的情节是这样的。
在查看了另一个问题并应用了公式之后,我能够把它拿到这里,但它看起来仍然很乱。
有人在这里有神奇的公式吗?
去写你自己的,因为我认为这在 matplotlib 中不存在。这是一个开始,您可以通过添加半无限等来改进
import matplotlib.pylab as plt
import numpy as np
def extended(ax, x, y, **args):
xlim = ax.get_xlim()
ylim = ax.get_ylim()
x_ext = np.linspace(xlim[0], xlim[1], 100)
p = np.polyfit(x, y , deg=1)
y_ext = np.poly1d(p)(x_ext)
ax.plot(x_ext, y_ext, **args)
ax.set_xlim(xlim)
ax.set_ylim(ylim)
return ax
ax = plt.subplot(111)
ax.scatter(np.linspace(0, 1, 100), np.random.random(100))
x_short = np.linspace(0.2, 0.7)
y_short = 0.2* x_short
ax = extended(ax, x_short, y_short, color="r", lw=2, label="extended")
ax.plot(x_short, y_short, color="g", lw=4, label="short")
ax.legend()
plt.show()

我刚刚意识到你的情节上有一些红点,这些重要吗?无论如何,我认为到目前为止您的解决方案缺少的要点是将情节限制设置为以前存在的情节限制,否则,正如您所发现的那样,它们会得到扩展。
现在有一种axline方法可以轻松扩展任意行:
添加一条无限长的直线。线可以由两个点
xy1定义xy2
plt.axline(xy1=(0, 1), xy2=(1, 0.5), color='r')
或由一个点
xy1和一个定义slope。
plt.axline(xy1=(0, 1), slope=-0.5, color='r')
供参考的样本数据:
import numpy as np
import matplotlib.pyplot as plt
x, y = np.random.default_rng(123).random((2, 100)) * 2 - 1
m, b = -0.5, 1
plt.scatter(x, y, c=np.where(y > m*x + b, 'r', 'k'))