2016-06-04 7 views
0

Zuerst entschuldigung im Voraus, wie ich neu bei MATLAB (und Codierung) bin.MATLAB letzte Handlung in Subplot Overlays andere Plots

Ich versuche, mehrere Plots in einem Teilplot (4,9, n) zu setzen, aber die letzte Plot überlagert den Rest der Plots und ist der einzige, der Daten enthält.

würde ich jede Handlung mag wie so etwas aussehen: Line plot with two x axes

Hier ist ein Ausschnitt des Codes verwende ich (weil ich neu bin, habe ich eine Schleife nicht verwendet, so dass ich habe erhaltener Code für jede einzelne Figur):

%% TMR2  
%set up data 
TMR2 = HEOBI1{HEOBI1.STNNBR==2,:} 
x1 = TMR2(:,[4]) 
x2 = TMR2(:,[5]) 
x3 = TMR2(:,[7])/25 
y = TMR2(:,[3]) 
%set up figure in subplot 
subplot(4,9,1) 
%set up secondary (H2O2) axis 
b=axes('Position',[.1 .1 .8 1e-12]); 
set(b,'Units','normalized'); 
set(b,'Color','none'); 
b.XColor=[0 153/255 0]; 
%primary plot (DFE and FEII) 
a=axes('Position',[.1 .2 .8 .7]); 
set(a,'Units','normalized'); 
plot(x1,y,'-o','Color',[221/255 15/255 4/255],... 
'MarkerFaceColor',[221/255 15/255 4/255]) 
set(gca,'Ydir','reverse') 
xlim([0 3]) 
hold on 
plot(x2,y,'-o','Color',[0 153/255 153/255],... 
'MarkerFaceColor',[0 153/255 153/255]) 
plot(x3,y,'-o','Color',[0 153/255 0],... 
'MarkerFaceColor',[0 153/255 0]) 
hold off 
title('2') 
%Set secondary (H2O2) axis limit 
set(b,'xlim',[0 25]*3); 

Finishing mit:

%% TMR40 
%set up data 
TMR40 = HEOBI1{HEOBI1.STNNBR==40,:} 
x1 = TMR40(:,[4]) 
x2 = TMR40(:,[5]) 
x3 = TMR40(:,[7])/25 
y = TMR40(:,[3]) 
%set up figure in subplot 
subplot(4,9,36) 
%set up secondary (H2O2) axis 
b=axes('Position',[.1 .1 .8 1e-12]); 
set(b,'Units','normalized'); 
set(b,'Color','none'); 
b.XColor=[0 153/255 0]; 
%primary plot (DFE and FEII) 
a=axes('Position',[.1 .2 .8 .7]); 
set(a,'Units','normalized'); 
plot(x1,y,'-o','Color',[221/255 15/255 4/255],... 
'MarkerFaceColor',[221/255 15/255 4/255]) 
set(gca,'Ydir','reverse') 
xlim([0 3]) 
hold on 
plot(x2,y,'-o','Color',[0 153/255 153/255],... 
'MarkerFaceColor',[0 153/255 153/255]) 
plot(x3,y,'-o','Color',[0 153/255 0],... 
'MarkerFaceColor',[0 153/255 0]) 
hold off 
title('40') 
%Set secondary (H2O2) axis limit 
set(b,'xlim',[0 25]*3); 

Und hier ist, was wie meine letzte Ausgabe sieht: Incorrect Subplot

@Suever Ich dachte über Ihren Vorschlag ein wenig mehr nach und nahm den gesamten Code für axes für jeden der Teilplots heraus. Ich habe dann die subplot mit Griffen eingerichtet und jedem Subplot einen Griff gegeben. Mein Code beginnt nun wie folgt aus:

%% Subplot setup 
figure; 
for k = 1:36 
    h(k) = subplot(4,9,k); 
end 

und der Code für jede subplot sieht nun wie folgt aus:

%% TMR40 
%set up data 
TMR40 = HEOBI1{HEOBI1.STNNBR==40,:} 
x1 = TMR40(:,[4]) 
x2 = TMR40(:,[5]) 
x3 = TMR40(:,[7])/25 
y = TMR40(:,[3]) 
%set up plot 
subplot(h(36)) 
%primary plot (DFE and FEII) 
plot(x1,y,'-o','Color',[221/255 15/255 4/255],... 
'MarkerFaceColor',[221/255 15/255 4/255]) 
set(gca,'Ydir','reverse') 
xlim([0 3]) 
hold on 
plot(x2,y,'-o','Color',[0 153/255 153/255],... 
'MarkerFaceColor',[0 153/255 153/255]) 
plot(x3,y,'-o','Color',[0 153/255 0],... 
'MarkerFaceColor',[0 153/255 0]) 
hold off 
title('40') 

Die Nebenhandlungen nun korrekt angezeigt und ich einzelne Handlungsstränge mit ihren jeweiligen Griffen bearbeiten können. Danke nochmal für deine Hilfe!

Antwort

1

Es scheint, als ob Sie verwirrt sind, was subplot tut und Ihre Terminologie ist ein bisschen aus. Sie erstellen keine Figur in einer subplot. Eine Figur ist das gesamte Fenster, das alle Ihre Plots enthält, und subplot ist eine axes, die Ihre verschiedenen Plot-Objekte (Linien, Bilder, Flächen usw.) enthält.

Das Hauptproblem ist jedoch, dass subploteinen axes erstellt. Dies bedeutet, dass Sie axes() nicht anrufen müssen, nachdem Sie subplot aufgerufen haben. Andernfalls wird durch diesen Aufruf von axes ein neues axes erstellt, das nicht dem Layout der subplot Eingänge entspricht.

Also statt

subplot(9,4,36) 
a = axes('Position', [.1 .2 .8 .7]); 
plot(x, y) 

Just do

subplot(9,4,36) 
plot(x,y) 
+0

Vielen Dank für Ihre Antwort @Suever. Nach dem Löschen von 'a = Achsen ('Position', [. 1 .2 .8 .7]);' bekomme ich 4x9 von leeren Plots mit einigen Daten, die ganz unten zerquetscht sind. Siehe! [Hier] (https://drive.google.com/file/d/0B8C4a-b2ohkydF9LM2Jta1JGejg/view?usp=sharing). – Tom

+0

@Tom Können Sie den tatsächlichen Code posten, der für die Generierung verwendet wurde? – Suever

Verwandte Themen