5

是否有matplotlib类似于 MATLAB 的line extensions的功能?

我基本上是在寻找一种将线段扩展到绘图的方法。我现在的情节是这样的。

在查看了另一个问题并应用了公式之后,我能够把它拿到这里,但它看起来仍然很乱。

有人在这里有神奇的公式吗?

4

2 回答 2

4

去写你自己的,因为我认为这在 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()

在此处输入图像描述

我刚刚意识到你的情节上有一些红点,这些重要吗?无论如何,我认为到目前为止您的解决方案缺少的要点是将情节限制设置为以前存在的情节限制,否则,正如您所发现的那样,它们会得到扩展。

于 2013-10-11T13:55:17.760 回答
0

matplotlib 3.3 中的新功能

现在有一种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'))
于 2022-02-12T18:50:58.193 回答