Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在numpy/matplotlib python中,如何在子地块中绘制具有许多不同值的相同函数?_Python_Numpy_Matplotlib_Matplotlib Widget - Fatal编程技术网

在numpy/matplotlib python中,如何在子地块中绘制具有许多不同值的相同函数?

在numpy/matplotlib python中,如何在子地块中绘制具有许多不同值的相同函数?,python,numpy,matplotlib,matplotlib-widget,Python,Numpy,Matplotlib,Matplotlib Widget,我有以下python代码,并希望: 在1(只有一个)图形中用许多不同的(比如4)“v0”和“θ”值绘制相同的函数,每个轨迹的颜色不同 在4个不同的图形中绘制4个图,使其看起来像一个正方形,有4个不同的“v0”和“θ”值的4个图 制作一个小部件,根据用户使用鼠标的需要改变v0和θ值 我可以在绘图后通过改变值来完成问题的第1点和第2点,然后再次计算vx0和vy0,然后调用积分函数,最后再次绘图,但这有点奇怪,也不干净。有没有更好的办法?像一个不同的v0和θ值的数组还是什么 谢谢 将代码作为函数:

我有以下python代码,并希望:

  • 在1(只有一个)图形中用许多不同的(比如4)“v0”和“θ”值绘制相同的函数,每个轨迹的颜色不同
  • 在4个不同的图形中绘制4个图,使其看起来像一个正方形,有4个不同的“v0”和“θ”值的4个图
  • 制作一个小部件,根据用户使用鼠标的需要改变v0和θ值

  • 我可以在绘图后通过改变值来完成问题的第1点和第2点,然后再次计算vx0和vy0,然后调用积分函数,最后再次绘图,但这有点奇怪,也不干净。有没有更好的办法?像一个不同的v0和θ值的数组还是什么


    谢谢

    将代码作为函数:

    def func(theta=45, v0=20):
        theta = theta * np.pi/180.   
    
        g = 9.81         
        R = 0.035             
        m = 0.057         
        rho = 1.2041           
        C = 0.5                
    
        k = (0.5*np.pi*R**2*C*rho)/m    
    
        x0=0                 
        y0=10     
        vx0 = v0*np.sin(theta)      
        vy0 = v0*np.cos(theta)     
    
        def f_func(X_vek,time):
            f0, f1 = X_vek[2:4].tolist()
            f2 = - k*(f0**2 + f1**2)**(0.5)*f0         
            f3 = -g - k*(f0**2 + f1**2)**(0.5)*f1      
            return [f0, f1, f2, f3]
    
        X0 = [ x0, y0, vx0, vy0]         
        t0 = 0. 
        tf = 10  
        tau = 0.05    
    
        t = np.arange(t0,tf,tau)   
        X = integrate.odeint(f_func,X0,t)    
    
        x = X[:,0]      
        y = X[:,1]  
        vx = X[:,2]  
        vy = X[:,3]
        mask = y >= 0    
        return x[mask], y[mask]
    
    然后,可以使用不同的参数对其进行打印:

    plt.plot(*func()) 
    plt.plot(*func(theta=30)) 
    
    plt.xlabel('x')
    plt.ylabel('y')
    plt.show()
    
    我建议您使用HoloView制作动态图形:

    import holoviews as hv
    hv.extension("bokeh")
    
    hv.DynamicMap(
        lambda theta, v0:hv.Curve(func(theta, v0)).redim.range(x=(0, 50), y=(0, 50)), 
        kdims=[hv.Dimension("theta", range=(0, 80), default=40), 
               hv.Dimension("v0", range=(1, 40), default=20)])
    
    结果如下:

    import holoviews as hv
    hv.extension("bokeh")
    
    hv.DynamicMap(
        lambda theta, v0:hv.Curve(func(theta, v0)).redim.range(x=(0, 50), y=(0, 50)), 
        kdims=[hv.Dimension("theta", range=(0, 80), default=40), 
               hv.Dimension("v0", range=(1, 40), default=20)])