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

Achselbeschriftung und Legende von plotyy

 

Patrick1990
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 51
Anmeldedatum: 25.02.13
Wohnort: Thüringen
Version: 2015b
     Beitrag Verfasst am: 12.03.2016, 08:30     Titel: Achselbeschriftung und Legende von plotyy
  Antworten mit Zitat      
Hallo,

ich möchte gern einen Plot mit 2 y-Achsen erstellen. Dabei soll die Schriftgröße der Beschriftungen 12 sein.
Meine vorgegebenen Datenpunkte sollen durch den Marker 'x' im Plot sichtbar sein und in der Legende unter 'x Berechnete Werte' dargestellt werden.

Desweiteren wäre eine Interpolation im Bereich zwischen dem ersten und letzten berechneten Datenpunkt wünschenswert, da die Punkte bisher nur linear verbunden werden.

Hier mein Code:

Code:
clear all;
close all;

set(0,'defaulttextinterpreter','latex')

minmax_2D=[
    52.0926,57.8473;    %7
    66.9762,74.3751;    %9
    74.419,82.6374;     %10
    81.8598,90.9029;    %11
    96.7434,107.4307;   %13
    111.6270,123.9585;  %15
    126.5106,140.4863;  %17
    141.3942,157.0141;  %19
    148.837,165.2767;   %20
    223.258,247.9221;   %30
    297.677,330.549;    %40
    372.092,413.192;    %50
    446.494,495.824;    %60
    520.936,578.4896;   %70
    595.3554,661.117;   %80
    669.7404,743.7363;  %90
    744.156,826.3737    %100
    893.016,991.668     %120
    ];  

minmax_3D=[
    62.0234,67.9181;    %7
    73.4788,80.8514;    %9
    79.3121,87.106;     %10
    85.5925,93.9181;    %11
    97.3452,107.0653;   %13
    108.9439,119.4362;  %15
    120.0621,132.0225;  %17
    131.8736,144.3581;  %19
    137.5471,150.8406;  %20
    197.2692,217.6953;  %30
    261.4562,288.5314;  %40
    327.0668,361.7706;  %50
    394.0776,436.9328;  %60
    465.8211,515.772;   %70
    536.3466,593.3235;  %80
    607.0017,673.6982;  %90
    678.957,751.9598;   %100
    826.7,915.7         %120
    ];  


%Mittelwert
for n=1:size(minmax_2D,1)
   mittel_2D(n)=0.5*(minmax_2D(n,1)+minmax_2D(n,2));
   mittel_3D(n)=0.5*(minmax_3D(n,1)+minmax_3D(n,2));
end


%%Plot

%Längenvektor
laenge=[7,9,10,11,13,15,17,19,20,30,40,50,60,70,80,90,100,120];

for n=1:size(mittel_2D,2)
  pv2d_vermindert(n)=mittel_2D(n)*(laenge(n)*10e-04)^2;
end

for n=1:size(laenge,2)
delta(n)=mittel_3D(n)/mittel_2D(n);
delta_vermindert(n)=mittel_3D(n)/pv2d_vermindert(n);
end


figure(1)
set(gca,'fontsize',12)

hold on
grid on
grid minor
box on

[ax,h1,h2] =plotyy(laenge,delta,laenge,delta_vermindert);

set(get(ax(1),'Ylabel'),'String','Korrekturfaktor $K_\mathrm{v}$','interpreter','latex')
set(get(ax(2),'Ylabel'),'String','Reduzierter Korrekturfaktor $K_\mathrm{v,red}$','interpreter','latex')
set(get(ax(1),'Ylabel'),'FontSize',12)
set(get(ax(2),'Ylabel'),'FontSize',12)
set(h1,'Color','b','Marker','x')
set(h2,'Color','r','Marker','x')

xlabel('\texttt{ZLength} in $\mathrm{mm}$','interpreter','latex')

%l=legend('Berechnete Datenpunkte');
%set(l,'Interpreter','latex')

hold off


 


Könnt ihr mir helfen?
Bisher erscheint mir die rechte Achselbeschriftung kleiner als die linke.
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 12.03.2016, 09:22     Titel:
  Antworten mit Zitat      
Hallo,

nach dem plotyy-Befehl:
Code:
set(ax(2), 'fontsize', 12)


Die Interpolation kannst du z.B. mit interp1 (Option 'pchip' oder 'spline') machen.

Übrigens kannst du viele, wenn nicht alle deiner for-Schleifen vermeiden. Statt
Code:
for n=1:size(mittel_2D,2)
  pv2d_vermindert(n)=mittel_2D(n)*(laenge(n)*10e-04)^2;
end

ginge z.B. auch
Code:
pv2d_vermindert=mittel_2D.*(laenge*10e-04)^2;


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Patrick1990
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 51
Anmeldedatum: 25.02.13
Wohnort: Thüringen
Version: 2015b
     Beitrag Verfasst am: 12.03.2016, 17:41     Titel:
  Antworten mit Zitat      
Vielen Dank Harald.

Weißt du auch wie ich die Legende so wie beschrieben hin bekomme?

Derzeit habe ich es nur geschafft etwas in der Art '-x-' angezeigt zu bekommen.
Ich möchte jedoch den Marker 'x' ohne horizontale Linie in der Legende.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

es ist an sich sehr üblich, die Legende genauso wie die Linienart zu machen.
Falls du das absolut nicht möchtest, sehe ich höchstens die Möglichkeit, eine Fake-Linie einzubauen und diese mit dem Marker zu versehen.

Code:
p = plot(nan, nan, 'bx');
l=legend(p, 'Berechnete Datenpunkte');


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Patrick1990
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 51
Anmeldedatum: 25.02.13
Wohnort: Thüringen
Version: 2015b
     Beitrag Verfasst am: 14.03.2016, 08:55     Titel:
  Antworten mit Zitat      
Hallo harald,

vielen Dank.
Soweit funktioniert das jetzt.

Die Interpolation bekomme ich jedoch nur für den Plot, der sich auf die linke Achse bezieht, hin.

Bei der Interpolation der zweiten Kurve stimmen die berechnete und die Interpolierte Kurve nicht überein.
Woran kann das liegen?
Ich nutze dazu einen weiteren plotyy Befehl innerhalb der figure.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

Zitat:
Bei der Interpolation der zweiten Kurve stimmen die berechnete und die Interpolierte Kurve nicht überein. Woran kann das liegen?

Um das sagen zu können, müssten wir den Code dafür sehen. Es könnte z.B. sein, dass die Kurve im falschen Koordinatensystem (bei dir ax(1) bzw. ax(2) ) gelandet ist.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Patrick1990
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 51
Anmeldedatum: 25.02.13
Wohnort: Thüringen
Version: 2015b
     Beitrag Verfasst am: 14.03.2016, 10:24     Titel:
  Antworten mit Zitat      
Hallo Harald,

hier der gesamte Code:

Code:
clear all;
close all;

set(0,'defaulttextinterpreter','latex')

minmax_2D=[
    52.0926,57.8473;    %7
    66.9762,74.3751;    %9
    74.419,82.6374;     %10
    81.8598,90.9029;    %11
    96.7434,107.4307;   %13
    111.6270,123.9585;  %15
    126.5106,140.4863;  %17
    141.3942,157.0141;  %19
    148.837,165.2767;   %20
    223.258,247.9221;   %30
    297.677,330.549;    %40
    372.092,413.192;    %50
    446.494,495.824;    %60
    520.936,578.4896;   %70
    595.3554,661.117;   %80
    669.7404,743.7363;  %90
    744.156,826.3737    %100
    893.016,991.668     %120
    1041.9,1156.9;      %140
    1190.7,1322.2;      %160
    1339.5,1487.5;      %180
   % 1488.4,1652.8;      %200
    ];  

minmax_3D=[
    62.0234,67.9181;    %7
    73.4788,80.8514;    %9
    79.3121,87.106;     %10
    85.5925,93.9181;    %11
    97.3452,107.0653;   %13
    108.9439,119.4362;  %15
    120.0621,132.0225;  %17
    131.8736,144.3581;  %19
    137.5471,150.8406;  %20
    197.2692,217.6953;  %30
    261.4562,288.5314;  %40
    327.0668,361.7706;  %50
    394.0776,436.9328;  %60
    465.8211,515.772;   %70
    536.3466,593.3235;  %80
    607.0017,673.6982;  %90
    678.957,751.9598;   %100
    826.7,915.7;        %120
    977.9,1086.3;       %140
    1124.5,1246.3;      %160
    1275.4,1416.3;      %180
    %1425.6,             %200
    ];  %100

%Mittelwert bilden 3D
for n=1:size(minmax_3D,1)
   mittel_3D(n)=0.5*(minmax_3D(n,1)+minmax_3D(n,2));
end

%%Plot

for n=1:size(minmax_2D,1)
    mittel_2D(n)=0.5*(minmax_2D(n,1)+minmax_2D(n,2));
end

%Längenvektor
laenge=[7,9,10,11,13,15,17,19,20,30,40,50,60,70,80,90,100,120,140,160,180];

pv2d_vermindert=mittel_2D.*(laenge*10e-04).^2;


delta=mittel_3D./mittel_2D;
delta2=mittel_3D./pv2d_vermindert;


% Interpolation
xi=linspace(0,max(laenge),1000);
yi=interp1(laenge,delta,xi,'pchip');

yi_red=interp1(laenge,delta2,xi,'pchip');


figure(1)
set(gca,'fontsize',12)

hold on
title('Vergleich der Korrekturfaktoren','interpreter','latex')
grid on
grid minor
box on

[ax,h1,h2]=plotyy(laenge,delta,laenge,delta2);
[ax2,h3,h4]=plotyy(xi,yi,xi,yi_red);

p = plot(nan, nan, 'kx');

set(ax(2),'FontSize',12);

l=legend(p, 'Berechnete Datenpunkte');
set(l,'Interpreter','latex','Location','northeast')

set(get(ax(1),'Ylabel'),'String','$K_\mathrm{v}$','interpreter','latex');
set(get(ax(2),'Ylabel'),'String','$K_\mathrm{v,red}$','interpreter','latex');
set(get(ax(1),'Ylabel'),'FontSize',12);
set(get(ax(2),'Ylabel'),'FontSize',12) ;
set(h1,'Marker','x','MarkerSize',4,'MarkerEdgeColor','k','MarkerFaceColor','k');
set(h2,'Marker','x','MarkerSize',4,'MarkerEdgeColor','k','MarkerFaceColor','k');

xlabel('\texttt{ZLength} in $\mathrm{mm}$','interpreter','latex')
hold off


 


Scheinbar muss die rechte Achsenskalierung angepasst werden.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

plotyy und hold on scheint in der Form nicht zusammen zu funktionieren.
In der Doku zu plotyy ist ein Beispiel, wie man mehrere Datensätze in ein Koordinatensystem bekommt (Use Right y-Axis for Two Data Sets). Das müsstest du anpassen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Patrick1990
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 51
Anmeldedatum: 25.02.13
Wohnort: Thüringen
Version: 2015b
     Beitrag Verfasst am: 14.03.2016, 11:40     Titel:
  Antworten mit Zitat      
Hallo,

vielen Dank.
Leider funktioniert dies meiner Meinung nur, wenn der x-Vektor bei allen Plot-Befehlen gleich ist.

Ich würde es einfach ohne Interpolation plotten, das ist nicht schlimm.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

die x-Vektoren müssen zumindest die gleiche Länge haben. Das kann man aber zur Not mit NaN auffüllen.

Grüße,
Harald
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 - 2025 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.