Bar3 crahes by plotting a cell array in a loop
2 ビュー (過去 30 日間)
表示 古いコメント
Hi,
I have a M, which is a cell Array M, which is 1×1 cell array of {1×292 cell}. Each of the 292 consits again of cells different sizes
. M{1}=ans
1×292 cell array
Columns 1 through ...292
{1×288 cell} {1×288 cell} {1×287 cell} ...{1x260}.
Each of these cells consits of doubles with different number of rows but fixes amount of columns(15).
m{1}{1}= ans
1×288 cell array
Columns 1 through ...288
{34×15 double} {36×15 double} {37×15 double}.. {95x15}.
I would like to plot M with bar3. My code:
figure();
Az=(1:1:15);
for t1=1:292
for t2=1:length( M{1}{t1})
bar3(Az,(cell2mat(M{1}{t1}(t2))');
hold on;
end
end
After ~2h matlab has crahesd (killed)
Is there another way to plot it?
0 件のコメント
採用された回答
Nathan Hardenberg
2023 年 5 月 2 日
I think it is not quite clear what your result should be. One of your "doubles"-matrecies is already enough to plot a 3D-Bar plot. What you do is plotting multiple plots in the same figure. If this is your desired solution I don't think it is possible to remove the for-loop.
Still your (wanted solution) should result in a very messy figure. I made a simplified example in the form of your data below. You can see that the bars intersect each other and it is not really good to use as a visualization.
You can check the 'grouped' option in the documentation, which allows different bars at the same position. This would obviously need code adaptation. And on a datasize of yours the bars would probably be very hard to see.
As a tipp, you should create a small example with your data and work with this first, to avoid long loading times.
PS: The bracket "(" in front of cell2mat in your code is to much
N = {{[1,2,3,4,5; 6,7,8,9,10]},
{[1,2,3,4,5; 6,7,8,9,10]*2},
{[1,2,3,4,5; 6,7,8,9,10]*3},
{[1,2,3,4,5; 6,7,8,9,10]*4}};
M = {N};
figure(1); clf; hold on;
Az = (1:1:5);
for t1 = 1:length(M{1})
for t2 = 1:length( M{1}{t1} )
bar3(Az, cell2mat(M{1}{t1}(t2))');
end
end
view([-25.10 33.53])
7 件のコメント
Nathan Hardenberg
2023 年 5 月 4 日
This should work, instead of the row with the padarray()-function:
A = [A; zeros(maxRows-rowA, colum)];
And remember to accept the answer if you are satisfied.
その他の回答 (1 件)
参考
カテゴリ
Help Center および File Exchange で Loops and Conditional Statements についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!