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

Einträge in der Legende aus for-loop

 

Henrik123
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 87
Anmeldedatum: 25.01.17
Wohnort: ---
Version: 2011a, 2017a
     Beitrag Verfasst am: 14.10.2017, 17:14     Titel: Einträge in der Legende aus for-loop
  Antworten mit Zitat      
Hallo,

ich würde gerne die Einträge einer for-Schleife in eine Liste packen mit der ich meine Legende fülle.

Das aktuelle Minimalbeispiel ist das hier.

Code:
n=6;

x(:,1) = linspace(0,1,101);
for i = 1:n;
    y1(:,i) = linspace(0,i,101);
    y2(:,i) = linspace(0,i,101);
end

figure(1);clf;
subplot(211);plot(x,y1);
subplot(212);plot(x,y2);

legend('blabla','blabla','blabla','blabla','blabla','blabla','Location','southoutside');
xlabel('x/L');
ylabel(ax1,'Amplitude in dB');
ylabel(ax2,'Phase in \pi');


Was ich mir vorstelle:
    Ich würde gerne die Einträge der Legende unterhalb des Graphen in einer Zeile anordenen und nicht in eine Spalte.

    Außerdem würde ich die Einträge gerne über die Schleife definieren. Sonst muss ich das immer per Hand machen.

    Die Skallierung des zweiten Plots passt leider überhaupt nicht und sollte wie der obere Plot skalliert werden.


Hat da jemand eine Idee zu? Ich freue mich von euch zu hören.
Besten Gruß, Henrik123
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


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

zur 1. Frage: 'Orientation', 'horizontal'
zur 2. Frage: welche Probleme treten auf, wenn du es über eine Schleife versuchst?
zur 3. Frage: dann pass das mit xlim / ylim an.

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

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 87
Anmeldedatum: 25.01.17
Wohnort: ---
Version: 2011a, 2017a
     Beitrag Verfasst am: 15.10.2017, 09:37     Titel:
  Antworten mit Zitat      
Danke für die schnelle Antwort.

Antwort 1: Hat gut geklappt. Die Legende ist unter den beiden Bildern. Allerdings ist die Legende größer als die Bilder. Ich würde gerne die Breite der Subplots an die Legende anpassen.

Antwort 2: Ich habe mir sowas vorgestellt.

Code:
n=6;
for i = 1:n;
    list{i} = [num2str(J) 'bla'];
end

legend(list,'Location','southoutside', 'orientation', 'horizontal' );
 


Antwort 3: xlim und ylim ist nich das, was ich suche. Ich will ja die größe des Plottes anpassen und nicht die Skala der Achse. Am liebsten etwas in Bezug auf die Achse. Beispielsweise eine zentrierte Legende unter den Subplotts.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

1. und 3.: Eigenschaft 'Position' anpassen
2.: welche Probleme treten dabei auf?

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

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 87
Anmeldedatum: 25.01.17
Wohnort: ---
Version: 2011a, 2017a
     Beitrag Verfasst am: 15.10.2017, 10:10     Titel:
  Antworten mit Zitat      
Antwort 2: Ich habe gerade festgestellt, dass ich gestern immer mit () gearbeitet habe. Mit {} klappt es allerdings.

Antwort 1 und 3: Um ehrlich zu sein, kann ich dir da nicht folgen. Hast du ein Beispiel für mich?

Habe jetzt das probiert:

Code:
n=6;

x(:,1) = linspace(0,1,101);
for i = 1:n;
    y1(:,i) = linspace(0,i,101);
    y2(:,i) = linspace(0,i,101);
    list{i} = [num2str(i) ' bla'];
end

figure(1);
clf;

ax1 = subplot('Position', [.1 .1 0.8 .3]);
plot(x,y1);
ax2 = subplot('Position', [.1 .6 0.8 .3]);
plot(x,y2);

legend(list,'Location','southoutside', 'orientation', 'horizontal');
xlabel('x/L');
ylabel(ax1,'Amplitude in dB');
ylabel(ax2,'Phase in \pi');
 


Ist aber nicht so wie ich mir das vorstelle. Die Legende ist jetzt in der Mitte. Und eub subplot ist immer noch kleiner als der andere, obwohl ich jetzt eine fixe Höhe angebe. Die Legende scheint da wohl mitzumischen.
Private Nachricht senden Benutzer-Profile anzeigen
 
Henrik123
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 87
Anmeldedatum: 25.01.17
Wohnort: ---
Version: 2011a, 2017a
     Beitrag Verfasst am: 15.10.2017, 10:28     Titel:
  Antworten mit Zitat      
Warum befindet sich die Legende immer an einem Plot und kann nicht separat verschoben werden?
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 15.10.2017, 19:55     Titel:
  Antworten mit Zitat      
Hallo Henrik123,

Legenden können doch separat verschoben werden. Was genau meinst Du?

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Henrik123
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 87
Anmeldedatum: 25.01.17
Wohnort: ---
Version: 2011a, 2017a
     Beitrag Verfasst am: 16.10.2017, 10:34     Titel:
  Antworten mit Zitat      
Ich meine folgendes. Man sieht in diesem Beispiel eindeutig, dass die Bildhöhe der Subplots unterschiedlich ist. Der Ausgegebene Wert der Bildhöhe für beide Subplots ist aber gleich. Dies liegt daran, dass im unteren Subplot die Legende mitgezählt wird.

Code:
clear all;

n=6;
x(:,1) = linspace(0,1,101);
for i = 1:n;
    y1(:,i) = linspace(0,i,101);
    y2(:,i) = linspace(0,i,101);
    list{i} = [num2str(i) ' bla'];
end

figure(1);
clf;

ax1 = subplot(211);
get(ax1, 'position');
Bildhohe1 = ans(4)
plot(x,y1);
ax2 = subplot(212);
get(ax1, 'position');
Bildhoehe2 = ans(4);
plot(x,y2);

legend(list,'Location','southoutside', 'orientation', 'horizontal');
xlabel('x/L');
ylabel(ax1,'Amplitude in dB');
ylabel(ax2,'Phase in \pi');


Ich würde gerne die Bildhöhen gleich groß haben, ohne den entsprechenden Wert auszuprobieren. Wenn ich die beiden Werte Eintrage, dann passt es ungefähr.
Code:

ax1 = subplot('Position', [0.1 0.6 0.8 0.3]);
ax2 = subplot('Position', [0.1 0.1 0.8 0.43]);
Private Nachricht senden Benutzer-Profile anzeigen
 
Henrik123
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 87
Anmeldedatum: 25.01.17
Wohnort: ---
Version: 2011a, 2017a
     Beitrag Verfasst am: 16.10.2017, 15:20     Titel:
  Antworten mit Zitat      
Soll ich das einem anderen, passenderen Thema zuordnen?
Private Nachricht senden Benutzer-Profile anzeigen
 
Henrik123
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 87
Anmeldedatum: 25.01.17
Wohnort: ---
Version: 2011a, 2017a
     Beitrag Verfasst am: 17.10.2017, 10:52     Titel:
  Antworten mit Zitat      
Habe das Problem jetzt wie folgt gelöst, mit einer Idee aus einem anderen Forum. Besten Dank für die Hilfe. Hier nochmal der Vollständigkeit halber.

Code:
clear all;
close all;

% Change default axes fonts.
set(0,'DefaultAxesFontName', 'Helvetica')
set(0,'DefaultAxesFontSize', 10)

% Change default text fonts.
set(0,'DefaultTextFontname', 'Helvetica')
set(0,'DefaultTextFontSize', 8)

%% Minimalbeispiel läuft
n=6;
f = 200;
x(:,1) = linspace(0,1,101);
for i = 1:n;
    y1(:,i) = linspace(-100,i*10,101);
    y2(:,i) = linspace(-4,i,101);
    f=f*2;
    list{i} = [num2str(f) ' Hz'];
end

%% Datensatz plotten
ax1 = subplot(211);
    plot(x,y1);
    axis([0 1 -100 20]);
    LY1 = get(ax1,'YLim');
    Bildhoehe1 = get(gcf);
    NumTicksY1 = abs((LY1(1)-LY1(2))/20);
    set(ax1,'YTick',linspace(LY1(1),LY1(2),NumTicksY1+1));
   
ax2 = subplot(212);
    plot(x,y2);
    axis([0 1 -5 1]);
    LY2 = get(ax2,'YLim');
    Bildhoehe2 = get(ax2, 'position');
    NumTicksY2 = abs((LY2(1)-LY2(2))/1);
    set(ax2,'YTick', linspace(LY2(1),LY2(2),NumTicksY2+1));

%% Anpassung der Ylabel für Subplots
hLabel1 = ylabel(ax1,'Amplitude in dB');
hLabel2 = ylabel(ax2,'Phase in \pi');
pos1 = get(hLabel1, 'Position');
pos2 = get(hLabel2, 'Position');
newX = min(pos1(1), pos2(1));
pos1(1) = newX;
pos2(1) = newX;
set(hLabel1, 'Position', pos1);
set(hLabel2, 'Position', pos2);


%% Xlabel hier
xlabel('Abstand in cm');

%% Legende hier
AX = legend(list,'Location','southoutside', 'orientation', 'horizontal');

%% Anpassung der Bildhöhe
AX.Position(1:2) = [0.005, 0.02] ;        % Verschieben der Legende
ax2.Position(4) = ax1.Position(4) ;       % Bildhöhe 2 = Bildhöhe 1.
ax1.Position(2) = ax1.Position(2)+0.03 ;  % Achse 1 etwas hoch.
ax2.Position(2) = ax2.Position(2)-0.1 ;   % Achse 2 etwas runter.
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.