3 Stimmen

Plotten eines Subplots über einem anderen Plot in Matlab

Ich muss mehrere Diagramme entlang einer schrägen Linie an verschiedenen Positionen erstellen.

Zum Beispiel, wenn ich:

plot(0:200,'k');
plotpts = 5:5:200;

Ich würde gerne an jedem meiner Plotpunkte ein kleineres Diagramm über der ursprünglichen 0:200-Linie erstellen.

Ich weiß, Sie können hold on und auf diese Weise überlagern, aber ich muss jedes Mal meinen Ursprung ändern. Hat jemand irgendwelche Vorschläge? Ich würde wirklich gerne in Matlab bleiben. Danke!

9voto

John Colby Punkte 21699

Hier ist ein flexibler Weg, wie ich es normalerweise mache:

plot(1:10, 'k')
plotpts = 2:2:8;

mainbox = get(gca, 'Position');
xlims = get(gca, 'XLim');
ylims = get(gca, 'Ylim');

for i=1:length(plotpts)
    originx = mainbox(1) + (plotpts(i) - xlims(1)) * (mainbox(3)) / (xlims(2) - xlims(1));
    originy = mainbox(2) + (plotpts(i) - ylims(1)) * (mainbox(4)) / (ylims(2) - ylims(1));

    axes('position', [originx originy 0.1 0.1], 'Color', 'none')

    % Do some plotting here...
end

enter image description here

1voto

Pursuit Punkte 11892

Das ist zwar ein ziemlicher Aufwand, aber Sie wollen wahrscheinlich die axes Befehl. Ein Figurenfenster kann eine beliebige Anzahl von Achsen enthalten, wobei jede Achse ihre eigene Position, Daten, Anmerkungen, Farbe usw. hat.

Das Schwierigste für die von Ihnen beschriebene Anwendung ist, dass jede Achsenposition im Koordinatenrahmen der zugrundeliegenden Figur definiert werden muss, was bedeutet, dass einige mathematische Berechnungen erforderlich sein können, um die Illusion zu erzeugen, dass die Achse korrekt innerhalb einer übergeordneten Achse positioniert ist.

Wenn Sie zum Beispiel zunächst eine einfache Grafik erstellen

figure(1234); clf;
plot(1:10, rand(1,10),'.k-','linewidth',5);
xlim([1 10]);
ylim([0 1]);
set(gca,'color','y');  %This just helps demonstrate the next steps

Sie können eine weitere Achse direkt auf der ersten platzieren, und dann

ha = axes('position',[.2 .3 .1 .1])
plot(linspace(0,2*pi,100), sin(linspace(0,2*pi,100)), 'b-')
xlim([0 2*pi])

Sie können die Eigenschaften der Einfügeachse an Ihre Bedürfnisse anpassen, z. B.

set(ha,'color','none');  %A transparent axis
set(ha,'xtick',[],'ytick',[]);  %Remove tick labels 
title(ha,'This is an inset plot')

0voto

Chris Punkte 1522

Ist der Befehl Nebenhandlung nicht das, wonach Sie suchen?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X