Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.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
Matplotlib 在一个图形上绘制多种不同类型的绘图,并将其保存到视频中_Matplotlib_Subplot - Fatal编程技术网

Matplotlib 在一个图形上绘制多种不同类型的绘图,并将其保存到视频中

Matplotlib 在一个图形上绘制多种不同类型的绘图,并将其保存到视频中,matplotlib,subplot,Matplotlib,Subplot,我尝试在一个matplotlib图形上绘制多个不同的绘图,并在for循环中使用。目前,如下图所示,它在matlab中运行良好,然后我能够将该图形保存为视频帧。是在matlab中生成的10帧示例视频的链接 在python中,尝试如下所示 import matplotlib.pyplot as plt for frame in range(FrameStart,FrameEnd):#loop1 # data generation code within a for loop for n frame

我尝试在一个matplotlib图形上绘制多个不同的绘图,并在for循环中使用。目前,如下图所示,它在matlab中运行良好,然后我能够将该图形保存为视频帧。是在matlab中生成的10帧示例视频的链接

在python中,尝试如下所示

import matplotlib.pyplot as plt
for frame in range(FrameStart,FrameEnd):#loop1
# data generation code within a for loop for n frames from source video
array1 = np.zeros((200, 3800))
array2 = np.zeros((19,2))
array3 = np.zeros((60,60))
for i in range(len(array2)):#loop2
#generate data for arrays 1 to 3 from the frame data
#end loop2
plt.subplot(6,1,1)
plt.imshow(DataArray,cmap='gray')
plt.subplot(6, 1, 2)
plt.bar(data2D[:,0], data2D[:,1])
plt.subplot(2, 2, 3)
plt.contourf(mapData)
# for fourth plot, use array2[3] and array2[5], plot it as shown and keep the\is #plot without erasing for next frame

不确定如何使用线图绘制第四轴。对于for循环中处理的整个帧序列,这需要在那里(在matlab中使用该轴的保持)完成,而对于电影中的每个帧,其他3个轴需要擦除并用新数据更新。等高线图需要始终为正方形,侧面有颜色条。在每个帧处理结束时,更新所有轴后,需要将其保存为电影的帧。同样,这在matlab中很容易实现,但在python中则不太确定

有什么建议吗


谢谢

我想你需要这样的格式

我在代码中使用了
注释35;
来回答您的问题。请检查代码片段

要关闭
ticks
,可以使用
plt.axis('off')
。我不知道如何插入你的格式,所以把它留空。您可以根据自己的要求调整
figsize

import numpy as np
from numpy import random
import matplotlib.pyplot as plt

fig=plt.figure(figsize=(6,6))  #First is width Second is height

ax1=fig.add_subplot(311)        
ax2=fig.add_subplot(312)      
ax3=fig.add_subplot(325)        
ax4=fig.add_subplot(326)        

#Bar Plot
langs = ['C', 'C++', 'Java', 'Python', 'PHP']
students = [23,17,35,29,12]
ax2.bar(langs,students)

#Contour Plot
xlist = np.linspace(-3.0, 3.0, 100)
ylist = np.linspace(-3.0, 3.0, 100)
X, Y = np.meshgrid(xlist, ylist)
Z = np.sqrt(X**2 + Y**2)
cp = ax3.contourf(X, Y, Z)
fig.colorbar(cp,ax=ax3)                #Add a colorbar to a plot

#Multiple line plot
x = np.linspace(-1, 1, 50)
y1 = 2*x + 1
y2 = 2**x + 1
ax4.plot(x, y2)
ax4.plot(x, y1, color='red',linewidth=1.0)

plt.tight_layout()              #Make sures plots dont overlap
plt.show()

我想你需要这样的格式

我在代码中使用了
注释35;
来回答您的问题。请检查代码片段

要关闭
ticks
,可以使用
plt.axis('off')
。我不知道如何插入你的格式,所以把它留空。您可以根据自己的要求调整
figsize

import numpy as np
from numpy import random
import matplotlib.pyplot as plt

fig=plt.figure(figsize=(6,6))  #First is width Second is height

ax1=fig.add_subplot(311)        
ax2=fig.add_subplot(312)      
ax3=fig.add_subplot(325)        
ax4=fig.add_subplot(326)        

#Bar Plot
langs = ['C', 'C++', 'Java', 'Python', 'PHP']
students = [23,17,35,29,12]
ax2.bar(langs,students)

#Contour Plot
xlist = np.linspace(-3.0, 3.0, 100)
ylist = np.linspace(-3.0, 3.0, 100)
X, Y = np.meshgrid(xlist, ylist)
Z = np.sqrt(X**2 + Y**2)
cp = ax3.contourf(X, Y, Z)
fig.colorbar(cp,ax=ax3)                #Add a colorbar to a plot

#Multiple line plot
x = np.linspace(-1, 1, 50)
y1 = 2*x + 1
y2 = 2**x + 1
ax4.plot(x, y2)
ax4.plot(x, y1, color='red',linewidth=1.0)

plt.tight_layout()              #Make sures plots dont overlap
plt.show()

请显示您正在使用的数据@user1524182数据非常庞大,这就是我没有包含实际数据的原因,但您可以使用任何随机数据,其中大小如原始帖子中随附的更新图片所示,以及更新的代码流,感谢请显示您正在使用的数据@user1524182数据非常庞大,这就是我没有包含实际数据的原因,但您可以使用任何随机数据,其大小如原始帖子中随附的更新图片所示,以及更新的代码流,感谢感谢感谢看起来不错,但是第四个图需要为for循环中的每一帧更新一个图,每一帧有一个数据点。因此,在loop1结束时,您将有一个双线图。在matlab中,这是通过调用as-bellow键来实现的,该键是使用hold on的,这样它就不会在for循环中擦除,而其他函数会--
ax(4)=子批(5,2,[8 10])绘图(帧,y1,'.b',y2,'.r')
ylim([-42]);xlim([FrameStart-FrameEnd])
按住
在for循环中第一次显示图形和绘图后,它也不会更新。在我的原始帖子中,可以看到由matlab生成的示例视频,以获得一个想法。@user1524182所以您只需要使用for循环绘制双线图?这是唯一正确的事情吗?你也要现场直播吗?移动x轴和y轴?for循环中需要所有四个绘图。例如,如果查看原始帖子中的链接,可以看到所有绘图都实时更新,不同之处在于双线绘图在每次循环迭代中仅使用两个数据值更新一次,并在清除和更新其他三个绘图时保留其绘图以供下一次迭代。在该示例中,for循环运行200帧,因此plot4从1变为1200@user1524182很抱歉,我无法进一步帮助您了解实时
countour和imshow
绘图。但是关于
line
plot,我建议您使用
matplotlib
查看这一点和动画<代码>直方图
也在第二个链接中,请检查。。我只知道使用
google charts和chartJS
实现所有结果,即在网站上实时显示。但是使用
matplotlib
我将无法进一步帮助您。所有这些看起来都不错,但是第四个图需要为for循环中的每一帧更新一个,每一帧有一个数据点。因此,在loop1结束时,您将有一个双线图。在matlab中,这是通过调用as-bellow键来实现的,该键是使用hold on的,这样它就不会在for循环中擦除,而其他函数会--
ax(4)=子批(5,2,[8 10])绘图(帧,y1,'.b',y2,'.r')
ylim([-42]);xlim([FrameStart-FrameEnd])
按住
在for循环中第一次显示图形和绘图后,它也不会更新。在我的原始帖子中,可以看到由matlab生成的示例视频,以获得一个想法。@user1524182所以您只需要使用for循环绘制双线图?这是唯一正确的事情吗?你也要现场直播吗?移动x轴和y轴?for循环中需要所有四个绘图。例如,如果查看原始帖子中的链接,可以看到所有绘图都实时更新,不同之处在于双线绘图在每次循环迭代中仅使用两个数据值更新一次,并在清除和更新其他三个绘图时保留其绘图以供下一次迭代。在该示例中,for循环运行200帧,因此plot4从1变为1200@user1524182很抱歉,我无法进一步帮助您了解实时
countour和imshow
绘图。但是关于
line
plot,我建议您使用
matplotlib
查看这一点和动画<代码>直方图
也在第二个链接中,请检查。。我只知道使用
google charts和chartJS
实现所有结果,即在网站上实时显示。但是使用
matplotlib
我将无法进一步帮助您。祝你一切顺利