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

时间:2018-08-29 13:56:37

标签: python numpy matplotlib sympy

我的Python程序有一个非常简单的问题-根本没有完成。现在,它正在做我想做的所有事情,而不是我想做的。

plot

我一直试图改变三件事:

  1. 所有功能都使用相同的颜色绘制,我希望程序在向绘图中添加新功能时自动切换为新颜色(在同一绘图上,它将大于2) 。
  2. f(x)的范围是140。如何减小该值?也许到20/40。
  3. (最重要)我的代码效率不高。 f1derivative根本没有关联。我在f1中声明了函数的模型,但是我必须在derivative中再次设置所有内容。每次尝试执行其他操作时,main函数都会遇到一些问题。我最终将添加更多功能,例如集成和诸如此类的功能,如果每次我想对f1做某件事从头开始声明所有内容时,该程序都会失去其目的。

我应该使用x = Symbol('x') inside f1吗?

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

2 个答案:

答案 0 :(得分:1)

垂直窗口由ylim选项设置。我建议对x也使用一些明确的限制,默认-10到10不一定最适合您。而且我建议您阅读the page on SymPy plotting

颜色由line_color选项设置。不同的颜色要求对plot的不同调用,但是可以将它们组合在一起。示例:

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

产生

combined

函数重用很容易:

def derivative(a, b, c, d):
    y = f1(a, b, c, d)
    yprime = y.diff(x)
    return yprime

此外:如果像line_color=['b', 'r']那样尝试plot(y, yp, ylim=(-20, 20), line_color=['b', 'r']),会发生什么?有趣的事情发生了:

funny

答案 1 :(得分:0)

我使用以下函数以一般方式获取彼此“相距较远”的颜色。 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))