Python 将图形合并为一个

Python 将图形合并为一个,python,matplotlib,Python,Matplotlib,我想把这两个单独的情节合在一起。我该怎么做?这两个图表示列表中的数字。第一个对应于20,另一个对应于40。同样,它也可以用于其他各种数字。 dis=[20,40] b=0 f=25/60 时间=10 t_i=0.001 平均值=0.03 标准=0.00666 r=0.2 w=2*np.pi*300/60 v=2*np.pi*r*300/60 平均值=0.03 高=2 xm=np.linspace(0,2500) ym=高 而b我假设您希望将两条线绘制到单个绘图区域。在这种情况下,您应该如下调整

我想把这两个单独的情节合在一起。我该怎么做?这两个图表示列表中的数字。第一个对应于20,另一个对应于40。同样,它也可以用于其他各种数字。

dis=[20,40]
b=0
f=25/60
时间=10
t_i=0.001
平均值=0.03
标准=0.00666
r=0.2
w=2*np.pi*300/60
v=2*np.pi*r*300/60
平均值=0.03
高=2
xm=np.linspace(0,2500)
ym=高

而b我假设您希望将两条线绘制到单个绘图区域。在这种情况下,您应该如下调整代码

请注意,您正在while循环中创建新的
fig,ax
对象,因此每次绘图时,它都在一个新图形中。相反,您希望在while循环之前设置图形和轴,以便在同一图形中不断添加绘图。代码实现这一点的最简单改编如下:

# variables left out for brevity

fig, ax = plt.subplots(figsize=(12, 2))

while b<=len(dis)-1:
    n=2*3.14*dis[b]*r/(avg*100)
    s=np.random.normal(mean,std,round(n))
    for i in s:   
        t=np.arange(0.1,time,t_i) 
        k=r+i
        c=v/k
        m=np.sqrt((k**2-(k-0.01)**2)/k)
        j=np.arcsin(m)
        x=k*(np.sin((c*t)+j))+f*t
        y=k*(np.cos((c*t)+j))
        ax.set_xlim([0.3,2])
        ax.set_ylim([y.min()-0.05,-0.1])
        reversed = False
        ind0=0
        while ind0 < len(x):
            ind1 = ind0 + 1
            if reversed:
                while ind1 < len(x) and x[ind1] <= x[ind1 - 1]:
                    ind1 += 1
                ym = np.minimum(ym, np.interp(xm, x[ind0:ind1][::-1], y[ind0:ind1][::-1], left=high, right=high))
            else:
                while ind1 < len(x) and x[ind1] >= x[ind1 - 1]:
                    ind1 += 1
                ym=np.minimum(ym, np.interp(xm, x[ind0:ind1], y[ind0:ind1], left=high, right=high))
            ind0 = ind1
            reversed = not reversed
    ax.set_xlabel('x (mm)')
    ax.set_ylabel('y (mm)')
    ax.plot(xm, ym, color='r', alpha=0.5)
    b+=1
#为简洁起见省略了变量
图,ax=plt.子批次(图尺寸=(12,2))

而bYou可以通过矢量化计算避免大部分循环。而不是创建一个范围并在其上迭代:
dis=[20,40]。。。。我非常感谢你。我想要同样的曲面图。我们可以正确地执行这些步骤?在matplotlib中,您始终可以将绘图添加到
ax
,以在同一图形中绘制它们。但是,请注意,曲面绘图可能不适合在同一图形中具有多个,这取决于你如何准确地绘制它们。实际上,这是一个表面粗糙度图,它是各种图的组合,如(20,40)。你能帮助我弄清楚我应该如何进行表面图吗?如果你提供示例代码以及你希望图看起来如何,那么我可能能提供帮助。我猜不出你想策划什么。
# variables left out for brevity

fig, ax = plt.subplots(figsize=(12, 2))

while b<=len(dis)-1:
    n=2*3.14*dis[b]*r/(avg*100)
    s=np.random.normal(mean,std,round(n))
    for i in s:   
        t=np.arange(0.1,time,t_i) 
        k=r+i
        c=v/k
        m=np.sqrt((k**2-(k-0.01)**2)/k)
        j=np.arcsin(m)
        x=k*(np.sin((c*t)+j))+f*t
        y=k*(np.cos((c*t)+j))
        ax.set_xlim([0.3,2])
        ax.set_ylim([y.min()-0.05,-0.1])
        reversed = False
        ind0=0
        while ind0 < len(x):
            ind1 = ind0 + 1
            if reversed:
                while ind1 < len(x) and x[ind1] <= x[ind1 - 1]:
                    ind1 += 1
                ym = np.minimum(ym, np.interp(xm, x[ind0:ind1][::-1], y[ind0:ind1][::-1], left=high, right=high))
            else:
                while ind1 < len(x) and x[ind1] >= x[ind1 - 1]:
                    ind1 += 1
                ym=np.minimum(ym, np.interp(xm, x[ind0:ind1], y[ind0:ind1], left=high, right=high))
            ind0 = ind1
            reversed = not reversed
    ax.set_xlabel('x (mm)')
    ax.set_ylabel('y (mm)')
    ax.plot(xm, ym, color='r', alpha=0.5)
    b+=1