为什么在 sage / matplotlib 中只显示部分水平线?

Why is horizontal line only partially displayed in sage / matplotlib?

我有以下 sage 代码生成函数的 matplotlib 图:

我还希望在 a = 4.0001 时绘制点 (a, f(a)),以及从 y 轴到该点的红色虚线。这是我为此编写的代码:

f(x) = (x**2 - 2*x - 8)/(x - 4)
g = plot(f, x, -1, 5)

a = 4.0001  
L = plot(f(a), color='red', linestyle="--")
pt = point((a, f(a)), pointsize=25)

g += pt + L
g.show(xmin=0, ymin=0)

但是,这会输出以下图形,其中水平线仅部分显示(它不与点 pt 相交):

为什么这条横线只显示了一部分?

我需要做什么才能正确绘制常数函数的线 y = f(4.0001)

最好使用 matplotlib 的 hlines 函数,为此您只需指定 y 值以及 xminxmax,即

import matplotlib.pyplot as plt
import numpy as np

def f(x):
    return (x**2 - 2*x - 8)/(x - 4)

x = np.linspace(-5,5, 100)
a = 4.001

plt.plot(x, f(x), -1, 5, linestyle='-')
plt.hlines(6, min(x), max(x), color='red', linestyle="--", linewidth=1)
plt.scatter(a, f(a))
plt.xlim([0, plt.xlim()[1]])
plt.ylim([0, plt.ylim()[1]])
plt.show()

哪个会给你


请注意,为了在整个示例中直接使用 matplotlib 而进行了一些调整 - 它们并不重要。

Sage 允许用户在绘图时指定 x 值的范围。

如果没有任何指示,它将绘制从 -1 到 1。

在为 -1 到 5 的 x 值绘制 f 之后:

g = plot(f, x, -1, 5)

为什么不绘制常数 f(a) 也从 -1 到 5:

L = plot(f(a), x, -1, 5, color='red', linestyle="--")

从 (0, f(a)) 到 (a, f(a)) 的直线也可以简单地绘制为:

L = line([(0, f(a)), (a, f(a))], color='red', linestyle='--')