3D Histgram plot for [N,M] Matrix, visualize result monte carlo simulation
2 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Niels van Dijk
le 10 Déc 2015
Commenté : Niels van Dijk
le 13 Déc 2015
Dear all,
I have a question about the visualization of a matrix created by the use of a monte carlo analysis.
With the use of a monte carlo analysis for different cases ( different angle of the cone of a structure) a Matrix of 31*1000 has been created. For this example 1000 times the calculation result of the monte carlo simulation. And 31 times a different angle of the cone, 30 degrees till 60 degrees.
Now i would like to create a 3D histogram to visualize the results compared to eachother. For now i have: A=[31,1000] hist(A(1,:),30)
Which result in the histogram i like, the results of the monte carlo nicely stored in 30 bars. but only for angle 1 (30 deg).
I would like a z-axis (3D) to visualize the other angles of the histogram. Kind of a surf(A) commmand but then histograms. The hist3(A) command doesnt give the pleased result (only 2 columns possible) but gives an indication of how i would like my histgram 3D visualization.
I hope i'm clear enough. Can anyone help me with this one?
0 commentaires
Réponse acceptée
arich82
le 11 Déc 2015
It seems like you just want a histogram for each of the 30 cases. If so, this is done very simply using histc and bar3 (essentially just two lines of code; three if you don't use the default edges):
rng(0);
% make dummy data
ncases = 30;
N = 1000;
data = NaN(ncases, N);
for k = 1:ncases
% generate a dummy random-normal distribution
% with random mean and random standard deviation
data(k, :) = rand(1) + rand(1)*randn(N, 1);
end
% generate data for histograms: 1 histogram per column
edges = [-5:0.5:5]; % bin edges
counts = histc(data, edges, 2); % specify dim 2 to act column-wise
% plot results
hf = figure;
ha = axes;
hb = bar3(edges, counts.'); % note the transpose to get the colors right
xlabel('case number')
ylabel('bins');
zlabel('count');
Please accept this answer if it helps, or let me know in the comments if I've missed something.
1 commentaire
Plus de réponses (1)
Mike Garrity
le 10 Déc 2015
3 commentaires
A Lotgering
le 11 Déc 2015
Modifié(e) : A Lotgering
le 11 Déc 2015
Hi Mike Garrity, thanks again for your quick reply! I'm Alex his team mate for this assignment. I think we have to give some additional information because I think the histogram2 plot is not the one we are looking for.
We like to plot a 2D histogram from a 30 by N matrix. In this matrix data from a Monte Carlo analysis is stored for 30 different cases. The data stored in de N colums can be used for the 2D histogram plot. However, we like to plot the histograms of every case into one single '3D' plot.
If you take axis x,y,z. Horizontal x-axis is for the data stored in the N columns. vertical y-axis is for the frequency of those values to create a histogram (we call this 2D). Horizontal z-axis is for the 30 different cases for which we like to create a similar histogram in de x and y-axis.
Is this even possible with histograms or should we use a different plot style?
Mike Garrity
le 11 Déc 2015
Modifié(e) : Mike Garrity
le 11 Déc 2015
I'm not quite sure I'm following. Do you mean something like this?
% Generate some fake data
npts = 1000;
data = zeros(30,npts);
for i=1:30
data(i,:) = rand(1)*(randn(1,npts)-1) + rand(1)*(randn(1,npts)+1);
end
If so, the bad news is that I ran into a number of bugs trying to create this. The histogram object wasn't really happy with what I was trying to do to it. Here's what I came up with, but it's kind of lame.
% Create 30 histograms and rotate them into place
max_val = 0;
for i=1:30
g = hgtransform('Matrix',makehgtform('translate',[0 i 0], ...
'xrotate',pi/2));
if i==1
hold on
end
h = histogram(data(i,:),'BinWidth',.2,'FaceAlpha',1);
h.Parent = g;
max_val = max(max_val,max(h.Values));
end
% Setup axes correctly
set(gca,'SortMethod','depth')
xlim([-pi pi])
ylim([1 30])
zlim([0 max_val])
view(3)
xlabel('Value')
ylabel('Series')
zlabel('Probability')
box on
It might make more sense to use histcounts with bar3 or waterfall if this is the sort of thing you're after.
Voir également
Catégories
En savoir plus sur Data Distribution Plots dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!