Zeichnen mit zwei unabhängigen Achsen in Matlab

Dieser Artikel ist nützlich für diejenigen, die Grafiken in der Matlab-Umgebung erstellen.

Bei der Erstellung von Diagrammen für die Veröffentlichung von Artikeln in wissenschaftlichen Fachzeitschriften und verschiedenen Arten von Berichten bin ich häufig auf die Notwendigkeit gestoßen, mehrere Kurven zu erstellen, die sich jeweils auf ihre Achse beziehen, um den Artikel nicht mit Diagrammen zu überladen und seine Grenzen nicht zu überschreiten. Dafür gab es in Matlab vor der Version R2014a nur das Plotyy- Team (X1, Y1, X2, Y2) , das eine Reihe unangenehmer Funktionen aufweist, weshalb andere Programme verwendet und alles manuell ausgeführt werden musste, was zum einen diesen Vorgang erschwert Aus der Sicht eines einzelnen Stils erfordert dies zweitens viel Zeit und drittens keine sofortigen Änderungen.

Unangenehme Eigenschaften und Beschreibung
Diesen unangenehmen Merkmalen würde ich zuschreiben:

1. Fehlen eines analogen Hold- Ons ("natives" Hold-On funktioniert mit Plotyy nicht richtig). Um mehr als 2 Kurven hinzuzufügen, müssen Sie diese Konstruktion verwenden:

[hAx,hLine1,hLine2] = plotyy([x1',x2'],[y1' y2'],[x3',x4'],[y3',y4']); % 4  

Ein unangenehmes Merkmal Nr. 2 ergibt sich aus diesem Entwurf:

2. Die Abmessungen der in eckigen Klammern eingeschlossenen Arrays müssen übereinstimmen, weil Daraus werden Matrix von Elementen gebildet. In der Praxis kommt dies sehr selten vor.

3. Design leidet ernsthaft unter der Tatsache, dass Sie die Farben und Typen aller Linien in einer Zeile nicht programmgesteuert ändern können, sondern nur eine Reihe von Linien formatieren können, die sich auf eine bestimmte Achse beziehen (hLine1 und hLine2) - auf jeden Fall konnte ich nicht. Gleichzeitig spreche ich nicht davon, Parameter von Hand zu ändern, d. H. Bearbeiten im Fenster "Abbildung" - nur direkt mit dem Code in der .m-Datei.

Zusammenfassend: plotyy () eignet sich nicht sehr gut zum Anzeigen mehrerer Diagrammsätze für verschiedene Achsen. Es sei denn für einfache Abhängigkeiten wie diese:

 x = linspace(0,10); y1 = 200*exp(-0.05*x).*sin(x); y2 = 0.8*exp(-0.5*x).*cos(10*x); y3 = 0.2*exp(-0.5*x).*cos(10*x); y4 = 150*exp(-0.05*x).*sin(x); X=[x',x']; Y1=[y1' y4']; Y2=[y2',y3']; [hAx,hLine1,hLine2] = plotyy(X,Y1,X,Y2); 



Entweder das Yyaxes- Team, das in der Matlab R2014a-Version erschien. Hier haben wir jetzt wo wir uns umdrehen können.

Ich möchte Ihnen anhand meines Beispiels von den Freuden dieses Teams erzählen. Die Aufgabe besteht darin, dass ich auf einem Diagramm 3 Temperaturprofile (Lösungen, die durch die direkte numerische Methode, die Momentenmethode und experimentelle Werte erhalten wurden) in Bezug auf die rechte Achse und 3 Druckprofile in Bezug auf die linke Achse aufbauen muss. Fügen Sie außerdem Pfeile und Beschriftungen hinzu.

Mit den Befehlen yyaxis left und yyaxis right können Sie diese Aufgabe gleichzeitig ausführen . Was ist in der Tat die Essenz. Innerhalb einer Abbildung können wir beliebig viele Diagramme erstellen, indem wir sie mit einer der Achsen verknüpfen. Im Rahmen jedes Teams funktioniert alles wie bei regulären Zeitplänen.

Die Struktur des Bildes sieht in diesem Fall folgendermaßen aus:

 figure() {     - , } yyaxis left { ,     - , , ,       } yyaxis right { ,     - , , ,       } 

Wenn wir diese Struktur mit dem Notwendigen füllen, erhalten wir als Ergebnis:



Programmcode
 %     h = figure('Units', 'normalized', 'OuterPosition', [0 0 1 1]); %  : F='Times New Roman'; FN='FontName'; FS='FontSize'; l=30;%   set(gca, FN, F, FS, l) box on %  hold on %%   yyaxis right hPlot_1 = plot(time*10^6, T); %    hPlot_2 =plot(time_exp_T*10^6, T_exp); %   hPlot_3 =plot(time_pk, T_pk); %   set( hPlot_1, 'LineWidth', 3, 'LineStyle', ':', 'Color', 'k' ); set( hPlot_2, 'LineWidth', 1, 'LineStyle', 'none', 'Color', 'k', 'Marker', 'o' ); set( hPlot_3, 'LineWidth', 3, 'LineStyle', '--', 'Color', 'k' ); %    () ylim([180 270]); %     () yticks([190 200 210 220 230 240 250 260 267]) yticklabels({'190', '200', '210', '220', '230', '240','250' '260', '\it T, K'}) %   set(gca,'xcolor','k'); set(gca,'ycolor','k'); %%   yyaxis left hPlot_10 = plot(time_P*10^6, P_p0); %    hPlot_11 = plot(time_exp_P_p0*10^6, P_p0_exp); %   hPlot_13 = plot(time_pk, Pp0_pk); %   set( hPlot_10, 'LineWidth', 3, 'LineStyle', ':', 'Color', 'k' ); set( hPlot_11, 'LineWidth', 1, 'LineStyle', 'none', 'Color', 'k', 'Marker', 'x' ); set( hPlot_13, 'LineWidth', 3, 'LineStyle', '--', 'Color', 'k' ); %    () ylim([0.1 0.8]); %     () yticks([0.2 0.3 0.4 0.5 0.6 0.7 0.77]) yticklabels({'0.2', '0.3', '0.4', '0.5', '0.6', '0.7', '\it p/p_0 '}) %   set(gca,'xcolor','k'); set(gca,'ycolor','k'); %%   %      xticks([0 20 40 60 80 100 120 140 160 185]) xticklabels({'0' '20' '40' '60' '80' '100' '120' '140' '160', '\it X/U, c'}) %  text(20,0.3,'\leftarrow', FS, 60, FN, F); text(140,0.6,'\rightarrow', FS, 60, FN, F); text(160,0.24,'1', FS, l, FN, F); text(60, 0.25,'2', FS, l, FN, F); text(120, 0.2,'3', FS, l, FN, F); text(140,0.51,'4', FS, l, FN, F); text(80, 0.52,'5', FS, l, FN, F); text(120,0.48,'6', FS, l, FN, F); text(5,0.75,'\it D_2O - N_2', FS, l, FN, F); hold off 



Eine weitere zusätzliche Funktion bei der Vorbereitung von Diagrammen für den Druck ist das einfache und bequeme Speichern in jedem von Matlab unterstützten Format. Dazu müssen Sie nur die folgenden Zeilen hinzufügen:

 %%   file_name = strcat('T, p_p0 - mm, ch, exp'); %   saveas(h, file_name, 'bmp'); %  .bmp saveas(h, file_name, 'fig'); %  .fig saveas(h, file_name, 'eps'); %  .eps saveas(h, file_name, 'jpeg'); %  .jpeg close(h); %     


Zusammenfassung

Ab Version R2014a ist Matlab ein geeignetes Programm zur Erstellung von Zeitplänen für die Veröffentlichung von Artikeln in verschiedenen wissenschaftlichen Fachzeitschriften. Ein wichtiges Plus ist die sehr gute Flexibilität dieses Tools, mit der Sie die Ergebnisse verarbeiten und in einer verdaulichen und schönen Form präsentieren können, auch für die sogenannten. "Stapel" -Verarbeitung.

Ein Blick lohnt sich:

→ Ein nützlicher Artikel zu Diagrammen in Matlab
Beschreibung der Yyaxis

Beschreibung der Handlung
Diagramme exportieren

Source: https://habr.com/ru/post/de403763/


All Articles