WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Erstellen von zwei X-Achsen

 

kljohui

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.09.2020, 09:16     Titel: Erstellen von zwei X-Achsen
  Antworten mit Zitat      
Hallo,
ich habe einen Spannungsplot erstellt und möchte einen Graphen auf diesem einfügen. Die Y-Werte sind bei beiden Plots identisch, die X-Werte variieren jedoch. In der ersten Abbildung (Spannungsplot) habe ich beides untereinander dargestellt. Dann habe ich über

Code:

first_axis = gca;
sqz = 0.15;                                                                
set(first_axis, "Position", get(first_axis, "Position") + [0 sqz 0 -sqz ]);
ax2 = axes("Position", get(first_axis, "Position") .* [1 1 1 0.001] - [0 sqz 0 0],"Color","none");
scale_factor = 1;                                                          
xlim(get(first_axis, "XLim") * scale_factor);
set(ax2, "XScale", get(first_axis, "XScale"));
 


eine zweite X-Achse unterhalb der ersten eingefügt. Leider wird nun mein Graph ausschließlich auf dieser Achse angezeigt und hat keinen Bezug mehr zu der Y-Achse (Abbildung Spannungsplot_2achsen). Wie kann ich diesen Bezug herstellen? Kann ich die zweite X-Achse einem bestimmten Wert der ersten Achse zuweisen, sodass der Wert 100 der zweiten Achse an der Stelle 0,15 bei der ersten Achse liegt?

Spannungsplot_2achsen.PNG
 Beschreibung:

Download
 Dateiname:  Spannungsplot_2achsen.PNG
 Dateigröße:  26.09 KB
 Heruntergeladen:  319 mal
Spannungsplot.PNG
 Beschreibung:

Download
 Dateiname:  Spannungsplot.PNG
 Dateigröße:  35.43 KB
 Heruntergeladen:  288 mal


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 10.09.2020, 14:45     Titel:
  Antworten mit Zitat      
Hallo,

wenn du xlim so angibst, dass das zusammenpasst, müsste es gehen.

Code:
xlim(first_axis, [-1 3])
m= 20;
% Form m*x + b mit m*0.15 + b = 100
b = 100 - 0.15*m;
limits2 = m * [-1 3]  + b;
xlim(ax2, limits2)


Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
kljohui

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.09.2020, 16:00     Titel:
  Antworten mit Zitat      
Hallo Harald,

das war genau das was ich gebraucht habe, danke. Mein Problem jetzt ist jedoch, dass von der oberen Achse nicht mehr genug Werte angezeigt werden. Sie geht jetzt bis 57 und ich brauch sie bis 180. Wie kann ich das lösen?
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 10.09.2020, 16:37     Titel:
  Antworten mit Zitat      
Hallo,

verstehe ich nicht.

Bei mir geht die obere Achse von -1 bis 3, die untere von ca. 75 bis über 150.

Wenn die untere bis 180 gehen soll, muss auch die obere entsprechend weiter gehen.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
kljohui

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.09.2020, 16:49     Titel:
  Antworten mit Zitat      
Hallo Harald,

es war mein Fehler, ich muss deinen Code noch mal anpassen, da ich den Wert 0 der oberen Achse (von -20 bis 180) mit einem variablen Wert der X-Achse verknüpfen muss.
Somit habe ich nur noch eine Achsenbeschriftung von ca -25 bis 60. Kann ich das irgendwie anpassen? Wie ist die Variable m1 definiert? Woher kommt der Wert 20?

Code:

%x = variable;
xlim(ax1, [-1 3])
m1= 20;
% Form m*x + b mit m*0.15 + b = 100
b1 = 0 - x*m1;
limits2 = m1 * [-1 3]  + b1;
xlim(ax2, limits2)
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 10.09.2020, 17:02     Titel:
  Antworten mit Zitat      
Hallo,

m1 ist willkürlich.

Letztlich ist es ein einfaches lineares Gleichungssystem:
Code:
x2_lower = m * x1_lower + b;
x2_upper = m * x1_upper + b;

Jegliche andere Einschränkungen kannst du entsprechend umsetzen.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 11.09.2020, 13:23     Titel:
  Antworten mit Zitat      
Hallo,

basierend auf PNs hier nochmal ein weiterer Ansatz:

Code:
xlim(first_axis, [-1 3])

pos100 = 0.15;
% Bedingungen:
% 3 * m + b = 180 (rechter Rand)
% pos100 * m + b = 100 (0.15 und 100 sollen zusammenpassen)
mb = [3 1; pos100 1] \ [180; 100];
limits2 = mb(1) * [-1 3]  + mb(2);
xlim(ax2, limits2)


Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Carolin.
Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 10.09.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.09.2020, 15:48     Titel:
  Antworten mit Zitat      
Hallo,

ich habe die x-Achsen wie zuvor beschrieben miteinander gekoppelt. Die Y-Achse soll bei beiden Plos an der selben Stelle liegen. Diese verschiebt sich nun aber. Kann man irgendwie definieren, dass ay1=ay2?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 14.09.2020, 15:56     Titel:
  Antworten mit Zitat      
Hallo,

noch kann ich nicht nachvollziehen, was sich wie und warum verschiebt. Bei den bisherigen Befehlen wurde ja auch nichts geplottet.

Um auf der sicheren Seite zu sein, könnte man nur in ein Koordinatensystem plotten und die x-Werte passend umrechnen.

Für weitere Unterstützung bitte das konkrete, aktuelle Beispiel posten.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Carolin.
Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 10.09.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.09.2020, 16:19     Titel:
  Antworten mit Zitat      
Mein Code zur Beschreibung des Koordinatensystems sieht wie folgt aus. Weiter habe ich ein Bild von meinem Problem angehängt. Die beiden y-Achsen sollen identisch sein, als bei 0-Punkte an der selben Stelle.

Code:
%Zweite X-Achse einfügen
hold on
ax1=gca;
ax2 = axes('position', get(ax1, 'position'));                              
set(ax2, 'XAxisLocation', 'top', 'color', 'none')
ax1.YAxis == ax2.YAxis
%sig_1ax2.YAxis.Visible = 'off';

%Kopplung Achse 1 und Achse 2
sig_1Vx = sig_1tblsort(1,1);
sig_1mb = [2 5; sig_1Vx 1] \ [200; 0];
sig_1limits2 = sig_1mb(1) * [-5 2]  + sig_1mb(2);
xlim(ax2, sig_1limits2)


Plot.PNG
 Beschreibung:

Download
 Dateiname:  Plot.PNG
 Dateigröße:  35.17 KB
 Heruntergeladen:  291 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 14.09.2020, 16:56     Titel:
  Antworten mit Zitat      
Hallo,

hast du es mal mit ylim versucht, z.B.

Code:
limits1 = ylim(ax1);
ylim(ax2, limits1)


Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Carolin.
Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 10.09.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.09.2020, 17:11     Titel:
  Antworten mit Zitat      
Damit funktioniert es nicht. Die zweite Achse wird dann von 0 (unten) bis 1 (oben) in 0.1 Schritten definiert.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 14.09.2020, 18:14     Titel:
  Antworten mit Zitat      
Hallo,

in diesem Beispiel funktioniert das einwandfrei.
Code:
figure
ax1=gca;
x = 0:0.1:1;
plot(ax1, x, 5*x.^2-2)
ax2 = axes('position', get(ax1, 'position'));                              
set(ax2, 'XAxisLocation', 'top', 'color', 'none')
%ax1.YAxis == ax2.YAxis
%sig_1ax2.YAxis.Visible = 'off';

%Kopplung Achse 1 und Achse 2
sig_1Vx = -5;
sig_1mb = [2 5; sig_1Vx 1] \ [200; 0];
sig_1limits2 = sig_1mb(1) * [-5 2]  + sig_1mb(2);
xlim(ax2, sort(sig_1limits2))

limits1 = ylim(ax1);
ylim(ax2, limits1)


Edit: wichtig ist hier, dass das Anpassen der Skalierung nach sämtlichen Plot-Befehlen erfolgt.

Damit ich dir weiterhelfen kann, brauche ich ein vollständiges, nachvollziehbares Beispiel, in dem das nicht funktioniert.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.