matlab - 在matlab中试图同时绘制多个轨迹
问题描述
我正在尝试绘制多个振荡器动画 wrt。时间,这样它们就会“同时”被激活,以便并排跟随它们。我可以分别绘制每个点,但我希望每个振荡器在动画中的各个点之间都有一条线连接。
事实证明这很困难,我尝试使用“addpoints(h,x,y,z)”(它适用于单个轨迹)但是每个连接在每个振荡器步骤之后自然会变得脱节,我对什么有点茫然尝试。
循环本身看起来像这样,t 是时间,osc 是振荡器编号,sin(y) 是每个振荡器在给定时间的位置。
for t = 1:tlen
for osc = 1:5
plot3(t,osc,sin(y(osc,t)),'k.-')
drawnow;
end
end
这里 'k' 使它变黑 '-' 应该是一条线但被忽略了和 '.' 做点
并且“k-”同样被忽略。
解决方案
不确定我是否完全理解您的问题,但这会是一个解决方案吗?
Num_Oscillators = 5;
for t = 1:tlen
figure(1);clf;
for iOscillator = 1:Num_Oscillators
plot3(1:t,iOscillator*ones(1,t),sin(y(iOscillator,1:t)),'k-.' );
hold on;
end
drawnow;
end
这需要编写 y 以便它可以获取整个时间样本向量并返回振荡器位置向量(如果不能以这种方式编写,则需要缓存旧值)。
如果这个版本使屏幕闪烁(它会在旧版本的 Matlab 上),试试这个(它也可能会快一点):
figure(1);clf;
Num_Oscillators = 5;
plot_handles = cell(1,Num_Oscillators);
for iOscillator = 1:Num_Oscillators
plot_handles{iOscillator} = plot3(inf,inf,inf,'k.-');hold on;
end
for t = 1:tlen
for iOscillator = 1:Num_Oscillators
set(plot_handles{iOscillator},'XData',1:t,'YData',iOscillator*ones(1,t),'ZData',sin(y(iOscillator,1:t)));
end
drawnow;
end
有了这个简单的模型示例数据
tlen = 100;
y = @(osc,t) 2*pi/tlen*osc*t;
它生成此输出(在它们运行时对其进行动画处理):
推荐阅读
- java - 使用嵌套的for循环绘制等边三角形?
- javascript - 嵌套文本的样式不起作用
- java - Spring Boot + JMustache 404 not found error for .html page from /resources/templates 文件夹
- php - 如何使用 sum() 在 mysqli 中添加行
- python - 合并多个大型 DataFrame 的有效方法
- apache-kafka - 使用 SCS 删除消费消息的 kafka 日志
- chart-director - 如何去除 CharDirector ContourLayer 中生成的黑色边框?
- laravel - Laravel 5.5 条件
- angular - 离开页面后 Angular 组件重新加载
- html - HTML + CSS 表单在标题后面滚动但仍然可见