Python 使用不同颜色绘制多个函数,包括导数

Python 使用不同颜色绘制多个函数,包括导数,python,numpy,matplotlib,sympy,Python,Numpy,Matplotlib,Sympy,我的Python程序有一个非常简单的问题——它根本没有完成。现在它正在做我想要的一切,但不是我想要的方式 我一直在努力改变三件事: 所有函数都使用相同的颜色绘制,我希望程序在向绘图中添加新函数时自动切换到新颜色(它将超过2个,都在同一个绘图上) f(x)的范围是140。我怎样才能减少呢?也许是20/40 (最重要的)我的代码不是很有效f1和衍生工具根本不相关。我在f1中声明了函数的模型,但我必须在导数中重新设置所有内容。每次我尝试执行其他操作时,main函数都会出现一些问题。我最终会添加更多的

我的Python程序有一个非常简单的问题——它根本没有完成。现在它正在做我想要的一切,但不是我想要的方式

我一直在努力改变三件事:

  • 所有函数都使用相同的颜色绘制,我希望程序在向绘图中添加新函数时自动切换到新颜色(它将超过2个,都在同一个绘图上)
  • f(x)的范围是140。我怎样才能减少呢?也许是20/40
  • (最重要的)我的代码不是很有效<代码>f1和
    衍生工具
    根本不相关。我在
    f1
    中声明了函数的模型,但我必须在
    导数中重新设置所有内容。每次我尝试执行其他操作时,
    main
    函数都会出现一些问题。我最终会添加更多的功能,比如集成等等,如果每次我想用
    f1
    做一些事情时都从头开始声明,那么程序就会失去它的用途 我应该在f1中使用
    x=Symbol('x')

    import numpy as np
    import matplotlib.pyplot as plt
    from sympy import *
    
    x = Symbol('x')
    
    def f1(a, b, c, d):
        y = a*x**3 + b*x**2 + x*c + d
        return y
        ###yprime = y.diff(x) 
        ###return yprime
    
    def derivative(a, b, c, d):
        y = a*x**3 + b*x**2 + x*c + d
        yprime = y.diff(x)
        return yprime
    
    def factorail(n):
        if n == 0:
            return 1
        else:
            return n * factorial(n-1)
    
    ###colors = iter(cm.rainbow(np.linspace(0, 1, len(ys))))
    ###for y in ys:
        ###plt.scatter(x, y, color=next(colors))
    def main():
        ###colors = itertools.cycle(["r", "b", "g"])
        y = f1(0,1,2,1)
        yp = derivative(0,1,2,1)
        print(y)
        plot(y, yp)
        plot(yp)
        plt.show()
    
    
    if __name__ == '__main__':
        main()
    

    我使用下面的函数以一种通用的方式获取彼此“远”的颜色。2396745是相当随意的,它定义了颜色之间的距离。它似乎给了我很好的效果

    def cmap_ints(i):
        return "#"+hex(((int(i)+1)*2396745)%(256**3))[2:].rjust(6,"0")
    
    用法:

    import numpy as np
    import matplotlib.pyplot as plt
    
    x = np.linspace(0,1,100)
    y1 = 3*x + 4
    y2 = 2*x - 5
    plt.plot(x,y1,c=cmap_ints(1))
    plt.plot(x,y2,c=cmap_ints(2))
    

    垂直窗口由
    ylim
    选项设置。我还建议对
    x
    使用一些明确的限制,默认值-10到10并不一定最适合您。我建议你阅读

    颜色由
    line\u Color
    选项设置。不同的颜色需要调用不同的
    绘图
    ,但这些颜色可以组合使用。例如:

    p = plot(y, (x, -5, 5), ylim=(-20, 20), line_color='b', show=False)
    p.extend(plot(yp, (x, -5, 5), ylim=(-20, 20), line_color='r', show=False))
    p.show()
    
    导致

    功能重用很容易:

    def derivative(a, b, c, d):
        y = f1(a, b, c, d)
        yprime = y.diff(x)
        return yprime
    
    旁白:如果我们尝试
    line\u color=['b','r']
    ,如
    plot(y,yp,ylim=(-20,20),line\u color=['b','r'])
    ,会发生什么?有趣的事情发生了:


    我已经回答了您的第一个问题。一般来说,stackoverflow问题应该问一件事,这样未来的人们才能有效地找到他们想要的问题和答案。我强烈建议你提出3个问题,这能回答你的问题吗?OP没有使用Matplotlib的plot函数。@user6655984这与此无关。
    cmap_ints
    函数产生的颜色是简单的RGB值。基本上任何图形系统都可以使用这个。回答得很好,非常感谢!它工作得很好。出于好奇:用matplotlib和sympy作图有什么区别,还是它们就像“同一枚硬币的两面”?最后一件事,你是怎么让电网运转起来的?我尝试在plot()上使用adaptive=False,就像在sympy的页面上一样,但没有成功。我需要使用plot_implicit吗?Symphy最终将调用一个后端绘图库,它很可能是matplotlib。但是,当通过Symphy进行绘图时,您不会涉及诸如“要使用多少采样点,
    np.linspace(a,b,n?
    ”之类的问题。
    sympy.plot
    的选项与matplotlib提供的选项大不相同。至于网格和灰色背景,它们是由于我的环境,这是一个笔记本。