필터 지우기
필터 지우기

Plotting a huge matrix

조회 수: 5 (최근 30일)
Yaser Khojah
Yaser Khojah 2018년 9월 13일
편집: Yaser Khojah 2018년 9월 14일
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
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
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
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
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
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개)

Yaser Khojah
Yaser Khojah 2018년 9월 13일
You are all right but I just wanted to see the whole dense lines. I'm using now boxplot instead since I could not show all the lines

Yaser Khojah
Yaser Khojah 2018년 9월 14일
편집: Yaser Khojah 2018년 9월 14일
If you do not want to include outliers then use this:
if true
boxplot(y,'symbol','')
end

카테고리

Help CenterFile Exchange에서 Line Plots에 대해 자세히 알아보기

태그

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by