使用 pyplot 绘制多个函数,将函数传递给函数,并重用代码

Posted

技术标签:

【中文标题】使用 pyplot 绘制多个函数,将函数传递给函数,并重用代码【英文标题】:Plotting multiple functions with pyplot, passing functions into functions, & reusing code 【发布时间】:2020-01-30 11:20:34 【问题描述】:
import matplotlib.pyplot as plt

x_coords = []
y_coords = []


def myFunction(x):
    return (3*(x**2)) + (6*x) + 9


def anotherFunction(x):
    return (x***3) + (x**2) + x


def getCoords(fun, num):
    for n in range(num):
        x_coords.append(n)
        y_coords.append(fun(n))


def draw_graph(x, y):
    plt.plot(x, y, marker="o")
    plt.show()


if __name__ == "__main__":
    # myFunction needs an argument,
    # getCoords provides it as num
    getCoords(myFunction(), 42)
    draw_graph(x_coords, y_coords)
    getCoords(anotherFunction(), 69)
    draw_graph(x_coords, y_coords)

我想绘制多个任意数学函数,同时(理想情况下?)重用代码来获取坐标并绘制它们。有没有更好的方法来重组它,还是我非常接近让它工作?

This question 有很好的答案,但我不确定如何整合它们。

【问题讨论】:

另外,我忘记了需要为每个图清除 x/y 坐标列表:x_coords.clear() & y_coords.clear() 【参考方案1】:

您必须提供函数本身而不是对其的调用。

getCoords(myFunction, 42)
getCoords(anotherFunction, 69)

你可以重组成这样的东西。具有生成坐标的专用函数和绘制坐标的专用函数:

def myFunction(x):
    return (3*(x**2)) + (6*x) + 9


def get_coords(fun, num):
    for n in range(num):
        yield n, fun(n)


def draw_graph(coordinates):
    for x, y in coordinates:
        plt.plot(x, y, marker="o")
    plt.show()


draw_graph(get_coords(myFunction, 45))

【讨论】:

我现在明白了。 Python 的灵活性总是让我感到惊讶。并感谢您介绍yield

以上是关于使用 pyplot 绘制多个函数,将函数传递给函数,并重用代码的主要内容,如果未能解决你的问题,请参考以下文章

将多个参数传递给表值函数

JavaScript:如何将多个参数传递给对象成员内的回调函数?

将一个函数的多个返回值作为参数传递给另一个函数

将多个参数传递给函数的优雅方式

将一个值列表而不是多个参数传递给函数?

C ++将多个对象传递给线程中的函数