2016-06-15 18 views
0

Mit diesem Code:Matlab: Grundstück 2 und 4 3d Gaußsche auf denselben Achsen

x=linspace(-3,3,25); 
y=x';    
[X,Y]=meshgrid(x,y); 
z=exp(-(X.^2+Y.^2)/2); 
h=surf(x,y,z);shading interp 
%colormap(col4); 
set(h,'LineStyle', '-','LineWidth',0.001,'EdgeColor','k'); 
set(gca, 'YTick',[],'XTick',[],'ZTick',[]); 
box on 

ich eine einzelne 3D-Gaußsche plotten können: enter image description here

ich jetzt

1) darstellen möchten 2 dieser nebeneinander in den gleichen Achsen

2) 4 davon in zwei Reihen von zwei innerhalb der gleichen Achsen

Also im Grunde möchte ich ein einzelnes 3D-Plot mit mehreren Gaussians darauf. Anstatt mehrere Plots von einzelnen Gaußschen, wenn das Sinn macht

... Ich weiß, das ist wahrscheinlich ziemlich einfach, aber ich bin ratlos. Jede Hilfe wird sehr geschätzt.

Dies wurde geändert, um klarzustellen, dass ich will mehr als eine auf dem gleichen Grundstück, anstatt mehrere Nebenhandlungen

A crappy Mockup der 2 Gaußsche Version würde wie folgt aussehen: enter image description here

+1

Subplot? ist das, was Sie wollen –

+1

Mögliches Duplikat von [Plotten mehrerer Graphen in einem einzigen Fenster mit Matlab] (http://stackoverflow.com/questions/26233064/plotting-multiple-graphs-in-a-single-window-by- using-matlab) – Suever

+0

Entschuldigungen, war nicht genau genug - ich hoffe, mehr als eine auf den gleichen Achsen, anstatt mehrere Plots zu plotten. Habe oben – user3519116

Antwort

2

Der Trick ist einfach Ihre X und Y Matrizen repmat zu replizieren:

x=linspace(-3,3,25); 
y=x';    
[X,Y]=meshgrid(x,y); 

X = repmat(X, 2, 2); 
Y = repmat(Y, 2, 2); 

z=exp(-(X.^2+Y.^2)/2); 

% note I'm using a different X and Y now in the call to surf() 
h=surf(1:size(z,1),1:size(z,2),z); 

shading interp 
%colormap(col4); 
set(h,'LineStyle', '-','LineWidth',0.001,'EdgeColor','k'); 
set(gca, 'YTick',[],'XTick',[],'ZTick',[]); 
box on 

Für zwei Gaussians in der gleichen Oberfläche, verwendet X = repmat(X, 2, 1) oder für mehr, repmat(X, n, k), usw.

+1

Das ist genau das, was ich wollte. Vielen herzlichen Dank! – user3519116

+1

Ich nehme an, es könnte leicht optimiert werden, indem man 'z' anstelle von' X' und 'Y' repliziert, aber insgesamt sehr schön! –

1

Aus die Matlab Dokumentation, ein subplot Beispiel, das genau zu sein scheint, was Sie wie vorgeschlagen müssen von @Ander:

x = 0:0.1:10; 
y1 = sin(2*x); 
y2 = cos(2*x); 

figure 
subplot(2,2,1)  % add first plot in 2 x 2 grid 
plot(x,y1)   % line plot 
title('Subplot 1') 

subplot(2,2,2)  % add second plot in 2 x 2 grid 
scatter(x,y2)  % scatter plot 
title('Subplot 2') 

subplot(2,2,3)  % add third plot in 2 x 2 grid 
stem(x,y1)   % stem plot 
title('Subplot 3') 

subplot(2,2,4)  % add fourth plot in 2 x 2 grid 
yyaxis left   % plot against left y-axis 
plot(x,y1) 
yyaxis right   % plot against right y-axis 
plot(x,y2) 
title('Subplot 4') 

die sich ergeben, s in:

enter image description here

+0

Ich denke, das war was du brauchst, sonst versuch mal mehrere Linien in 1 Graph zu zeichnen: 'plot (x, y1, x, y2)' –

+0

Danke für deine Antwort und entschuldigt mich dafür, unpräzise zu sein - ich bin im Grunde nach mehreren Gaußschen auf der gleichen Handlung , anstatt mehrere Plots, wenn das Sinn macht? – user3519116