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

时间:2019-03-04 00:42:05

标签: python matplotlib plot graph sage

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

stupid that I can't use LATEX on this site and have to upload a gif :(

我还希望绘制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相交):

graph of function f(x) = (x**2 - 2*x - 8)/(x - 4)

为什么只显示部分水平线?

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

2 个答案:

答案 0 :(得分:1)

使用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()

哪个会给你

HLine with function


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

答案 1 :(得分:1)

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

任何指示失败,它将从-1到1绘制。

绘制从-1到5的x值的f后:

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

为什么不在-1到5之间绘制常数f(a):

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='--')