Nar*_*mus 3 matlab plot matlab-figure
这是我的代码:
for p = 1:length(id_unique)
h=figure;
hold on
j = 1;
for i = 1:1:length(id)
if id_unique(p)==id(i)
h=plot([startdate(i),enddate(i)],[j,j],'ok-');
hold on
j = j + 1;
end
end
grid on
hold off
savefig([plotname,'.fig'])
print(plotname,'-djpeg','-r300')
close
end
% id: integer vector containing 50000 values
% id_unique: sorted unique values from vector 'id'
% startdate: datetime vector containing 50000 dates
% enddate: datetime vector containing 50000 dates
Run Code Online (Sandbox Code Playgroud)
“ id ”向量中的每个元素/值都暗示一个事件,其中事件的开始日期和结束日期在“ startdate ”和“ enddate ”向量中的相应位置可用。因此,事件id(1)在startdate(i ) 中具有开始日期,在 enddate(i) 中具有结束日期。
该程序从“ id_unique ”向量中获取一个值,对于在“ id ”中找到的每个匹配值,它会在图中画一条线,表示事件的开始和结束时间。
例如,假设 55 是来自向量“ id_unique ”的 id 值,我们在id 中有 1000 次这个值。因此,对于 55,创建了一个绘图,描绘了 1000 条单独的线,在事件开始时带有标记“o”,在事件结束时带有标记“o”,以及连接两个标记的线。
请查看由此代码块生成的附加图。如果id_unique有 70 个值,则将从该代码创建 70 个这样的图。在图像中,由于开始和结束日期之间的差异很小,许多线条太小,因此标记相互重叠,看起来像一个点。
现在问题来了,对于id_unique 中的 id 值,我们在id向量中有很多它的实例。当程序将单条线绘制到 100 条时,它的运行速度非常快,但在同一图中绘制 300 条线后,程序变慢了。当程序在同一张图中绘制 1000 条线时,每条线大约需要 5-7 秒。因此,生成具有多条线的图需要花费数小时的时间。
有没有办法改进我的代码,使这些绘图生成速度更快。
你不需要循环:
你可以使用类似的东西:
a = 1:0.1:4*pi;
b = sin(a); %vector that represent the start of each line
c = sin(a)+1; %vector that represent the end of each line
plot([b;c],[a;a],'-ko','markersize',2)
Run Code Online (Sandbox Code Playgroud)
结果:
该函数plot需要 2 个参数:x 和 y,但是,这就是世界如此美丽的原因,该函数plot可以管理多行。如果 x 和 y 是矩阵,matlab 将每一列解释为一个新行。
| 归档时间: |
|
| 查看次数: |
220 次 |
| 最近记录: |