2016-06-24 6 views
0

Ich versuche eine relativ einfache Funktion zu schreiben, die es mir erlaubt, beliebige Zahlen (die vorher als .fig-Dateien gespeichert wurden) dicht nebeneinander zu plotten.Mehrere .fig-Dateien in einem Plot anzeigen

Ich habe die Lösung auf der Website gesucht, aber es funktioniert nicht für mich. Außerdem bin ich fast mit meinem Code da, da die Ausgänge fast das sind was ich will: zwar bekomme ich die beiden Zahlen in der richtigen Position, aber in zwei separaten Fenstern und einem dritten Fenster, das die beiden Eingänge richtig zusammenführt, aber sie sieht komisch aus, mit einer niedrigeren Auflösung! Also bekomme ich insgesamt drei Ausgänge.

Hier ist mein Code, ich hoffe, Sie können mir helfen. (Versuchen Sie mit Ihren eigenen .fig Dateien und prüfen Sie, ob Sie auch die drei falschen Ausgänge haben wie ich).

function SubPlotFig (varargin) 

for i = 1:nargin 
hf = hgload(varargin{i}); 
ax(i) = findobj(hf,'Type','axes'); 
end 

hc = figure; 
for i = 1:nargin 
subplot(1,2,i,ax(i)); 
copyobj(ax(i),hc); 
end 

Attachment_1 Attachment_2

Antwort

0

Das Problem war die Colormap. Jetzt ist es gelöst. Hier ist der richtige Code, kann für andere nützlich sein :)

function SubPlotFig (varargin) 

for i = 1:nargin 
hf = openfig(varargin{i},'reuse'); 
cm = colormap; 
c(i) = findobj(hf,'Type','Colorbar'); 
ax(i) = findobj(hf,'Type','Axes'); 
end 

hc = figure; 
for i = 1:nargin 
subplot(1,2,i,ax(i)); 
copyobj(ax(i),hc); 
colormap(ax(i),cm); 
copyobj([c(i),ax(i)],hc); 
end 
0

Wenn Sie hgload nennen, wird es eine Figur aus einer .fig Datei öffnen und es angezeigt werden soll. Sie tun dies innerhalb Ihrer ersten Schleife, so dass Sie für jede Eingabe eine Zahl sehen. Die Zahl, die Sie sehen, ist genau was Sie für jede Figur gespeichert haben.

for i = 1:nargin 
    hf = hgload(varargin{i});   % <---- Creates a figure 
    ax(i) = findobj(hf,'Type','axes'); 
end 

In der zweiten Schleife erstellen Sie eine subplot für jede der axes in den Figuren, die Sie gerade geöffnet haben. Diese werden natürlich kleiner sein, weil Sie jetzt mehrere axes innerhalb einer figure setzen, die die Standardgröße ist. Sie sind nicht wirklich "niedrige Auflösung", nur kleiner auf dem Bildschirm. Wenn Sie sie größer machen möchten, sollten Sie Ihre Figur vergrößern.

% Create all of the subplots 
hc = figure; 
for i = 1:nargin 
    hax = subplot(1,2,i,ax(i)); 
    copyobj(ax(i),hc); 
    colorbar(hax); 
end 

% Make sure we are using the jet colormap 
colormap(jet) 

% Get the current figure position 
pos = get(hc, 'Position'); 

% Double the width since you now have two plots 
set(hc, 'Position', [pos(1:2) pos(3)*2, pos(4)]) 
+0

Vielen Dank Suever! Das Problem bleibt leider bestehen: Die Figuren sind jetzt größer, aber immer noch anders als die Originalfiguren! Ich habe zwei Anhänge hinzugefügt, um es zu klären :) – Angela

+0

@Angy Also, was sind die Unterschiede, die Sie interessieren? Die Farbkarte? Das Seitenverhältnis der Handlung? Das Fehlen von Farbbalken? Sie werden niemals in der Lage sein, sie genau so zu produzieren. Wenn Sie möchten, dass sie identisch aussehen, speichern Sie besser jede Figur als Bild und kombinieren sie dann in einem anderen Programm. – Suever

+0

Ich denke, das Problem ist die Farbleiste, copyobj kopiert es nicht in die neue Figur. In Anhang_1 ist das Ergebnis genau so wie das Original (gut!), Aber es gibt nur eine Figur, die andere fehlt. In Attachment_2 haben Sie beide (gut!), Aber sie sehen anders aus als die ursprünglichen (Colormap?) – Angela

Verwandte Themen