Plotting a huge matrix
10 ビュー (過去 30 日間)
古いコメントを表示
I have a big matrix (Supply) with size of 21 X 1000,000 and I want to plot each column against a fixed time vector as
stairs(time, supply)
I have tried to do it with for loop and using the Apps tool box but it is taking forever to run. Is there a fast way to do it?
This is my for loop:
if true
for k = 1:size(supply,2)
stairs(time ,Supply(:,k)); hold on
disp([' ',num2str(k)])
end
Thanks,
2 件のコメント
Adam
2018 年 9 月 13 日
Are you sure you need to plot every value of those 1000000? There is no way that you can distinguish that many values on a plot. Indeed, at that level there aren't enough pixels on the screen to plot them all either. I would recommend sub-sampling your data and plotting that instead. I don't know off the top of my head what is a realistic number of samples to plot that you can visually distinguish, but it would be orders of magnitude less than that.
jonas
2018 年 9 月 13 日
編集済み: jonas
2018 年 9 月 13 日
It could possibly be faster to store the output instead of plotting in each loop. The stairs function will not plot if two output arguments are specified
[x,y] = stairs([1 2 1],[1 2 1])
then you can just plot everything in one go
plot(x,y)
this way, no objects are created until you plot, so the loop should be much faster.
採用された回答
Jan
2018 年 9 月 13 日
Omit the disp command, because updating the command window 1e6 times wastes a lot of time. Setting hold on repeatedly is not efficient also. Then do not create 1 Millions stairs calls, but call stairs with a matrix:
stairs(time, Supply);
But most of all consider Adam's comment: It is very unlikely that this plot is useful, because it has a huge pixel density.
9 件のコメント
Steven Lord
2018 年 9 月 14 日
[Yaser Khojah wrote the following in a flag on Jonah's first comment on this answer. If you want to respond to a comment please add your own comment rather than adding a flag. The intent of flags is to notify contributors with sufficient reputation of potential unclear, off-topic, or spam messages. Thanks.]
I was able to create the plot without the outliers. However, I get this error "Value should be a finite number greater than 0". I think the outliers should be larger than zero.
jonas
2018 年 9 月 14 日
Sorry that was bad advice from my part. I just noticed that the outliers were not plotted while missing the error message. This should work:
delete(findobj(gca,'Tag','Outliers'))
その他の回答 (2 件)
参考
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!