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

Problem Legende: Warning: Ignoring extra legend entries.

 

CryptKeeper
Forum-Anfänger

Forum-Anfänger


Beiträge: 31
Anmeldedatum: 10.03.11
Wohnort: ---
Version: MATLAB 7.9.0 (R2009B) / Octave 3.2.3
     Beitrag Verfasst am: 15.04.2011, 16:59     Titel: Problem Legende: Warning: Ignoring extra legend entries.
  Antworten mit Zitat      
Ich hab einen Plot mit mehreren Kurven, und will nun die Kurven mit einer Legende anschreiben. Das klappt soweit auch ganz gut. Nur will ich die Kurven in einer anderen Reihenfolge anschreiben, als sie im Script geplottet werden. Grundsätzlich klappt das auch so:
Code:

h1 = plot(...);
h2 = plot(...);
h3 = plot(...);
h4 = plot(...);
legend([h3;h2;h1;h4],{'h3';'h2';'h1';'h4'});
 

Es wird im Plot eigentlich alles richtig dargestellt, aber im Matlab-Terminal krieg ich folgende Fehlermeldung:
Code:

Warning: Ignoring extra legend entries.
 

Woran liegt das?
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: 15.04.2011, 21:51     Titel:
  Antworten mit Zitat      
Hallo,

wenn du die Plots in dieser Form unmittelbar nacheinander machst, wirst du nur den letzten sehen und damit auch nur die Legende für den letzten.

Wenn du mit "hold on" arbeitest, kann ich das Problem (zumindest in 2009a) so nicht nachvollziehen.

Code:
h1 = plot(rand(10,1));
hold all
h2 = plot(rand(10,1));
h3 = plot(rand(10,1));
h4 = plot(rand(10,1));
legend([h3;h2;h1;h4],{'h3';'h2';'h1';'h4'});


gibt keine Warnung.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 31
Anmeldedatum: 10.03.11
Wohnort: ---
Version: MATLAB 7.9.0 (R2009B) / Octave 3.2.3
     Beitrag Verfasst am: 16.04.2011, 10:34     Titel:
  Antworten mit Zitat      
Danke für die Antwort. Ich hab in meinem Eröffnungspost allerdings einen Fehler gemacht, in meinem Code hab ich dazwischen noch ' hold on ... hold on ... hold on ... hold off '.

Dass man aber auch einfach 'hold all' machen kann, wusste ich nicht, super.

Leider hab ich das Problem immer noch (naja, an den Legenden-relevanten Teilen des Codes hab ich auch nix geändert, nur die ganzen 'hold on' durch 'hold all' ersetzt). Hier mal der ganze Plot-Code:

Code:

   figure('Name','Tage seit letztem Regentag & taegliche Niederschlagemenge', ...
          'Position',[10,300,800,400],'Color','white');

   % Niederschlag (10 min-Mittel)
   h1 = plot(timedate,datamat(:,11).*10.+10);
   set(h1,'Color',[0.8,0.8,0.8])

   hold all

   % kumulierte tägliche Niederschlagsmegne
   h2 = plot(timedate,daily_precip_c);
   set(h2,'Color',[0.5,0.5,0.5])

   % Tage seit letztem Regentag
   h3 = plot(timedate,days_since_rain);
   set(gca,'YGrid','on')
   set(h3,'LineWidth',2,'Color','red')

   % Grenzwert für Regentag ('rdt') (horizontale Linie)
   h4 = plot(timedate,rdt);
   set(h4,'Color',[0.3,0.7,0.3])

   % Start des 'Tage seit Regentag'-Index (erster Regentag) (vertikale Linie)
%   size_timedate_day12 = size(timedate_day12);
%   for j=1:size_timedate_day12(1)
%      if days_since_rain(j) ~= -1
%         h5 = line([timedate_day12(j),timedate_day12(j)],[0,max(ylim)]);
%         break
%      end
%   end

   %set(h5,'LineStyle','--','Color','red')

   % Achsenkonfiguration
   xlabel('Zeit (Fruehjahr 2011)')
   ylabel('# Tage bzw.  Niederschlagsmenge [mm]')
   yl = ylim(gca);
   yl(1) = 0;
   ylim(gca,yl);
   datetick('x','dd.mm')
   set(gca,'XLim',[timedate(1) timedate(end)])

   % Legende
   legend([h1;h2;h3;h4], ...
          {'Niederschlag (10 min-Summe) x 10 + 10'; ...
          'kumulierte taeglicher Niederschlag'; ...
          'Tage seit letztem Regentag'; ...
          'Grenzwert fuer Regentag'}, ...
          'Location','NorthWest')

   hold off
 


Wie bereits geschrieben, wird der Plot an sich genau so ausgegeben, wie er sollte, von daher ist es nich so ein Problem. Ich will einfach die Fehlermeldung wegkriegen. Das ist sie in voller Länge:

Code:

Warning: Ignoring extra legend entries.
> In legend at 294
  In indizes at 557
 


Der in der Meldung angesprochene Ausschnitt inkl. Zeilennummern:
Code:

556   % Legende
557   legend([h1;h2;h3;h4], ...
558          {'Niederschlag (10 min-Summe) x 10 + 10'; ...
559          'kumulierte taeglicher Niederschlag'; ...
560          'Tage seit letztem Regentag'; ...
561          'Grenzwert fuer Regentag'}, ...
562          'Location','NorthWest')
 


Vielleicht hab ja jetzt jemand ne Idee...

Übrigens: weiss grad jemand, wie ich eine vertikale Linie in den Plot einbauen kann, die ich in die Legende mit aufnehmen kann? Mit 'line()' hab ich die Linie hinbekommen (die auskommentierte Schleife; ich hab die Funktion, auf die sich die vertikale Linie bezieht, mitlerweile geändert, drum ist der noch nicht angepasste Teil auskommentiert), aber weiss nicht, wie ich die in die Legende rein bring.

Ich hab mal noch ein Bild des ausgegebenen Plots angehängt.

regenplot.png
 Beschreibung:
ausgegebener Plot

Download
 Dateiname:  regenplot.png
 Dateigröße:  70.31 KB
 Heruntergeladen:  1771 mal
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: 17.04.2011, 21:49     Titel:
  Antworten mit Zitat      
Hallo,

da ich deine Daten nicht habe, ist das für mich schwierig zu reproduzieren.
Kannst du ein Minimalbeispiel zusammenstellen, an dem das Problem bei dir auftritt?

Vertikale Linie:
Code:
hx = plot([x0 x0], [ymin ymax])


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

Forum-Anfänger

Forum-Anfänger


Beiträge: 31
Anmeldedatum: 10.03.11
Wohnort: ---
Version: MATLAB 7.9.0 (R2009B) / Octave 3.2.3
     Beitrag Verfasst am: 28.04.2011, 22:11     Titel:
  Antworten mit Zitat      
Ich hab nochmals etwas rumprobiert, und so bekomme ich keine Fehlermeldung:

Code:

    legend({'Niederschlag(10 min-Summe) x 10 + 10'; ...
            'kumulierter taeglicher Niederschlag'; ...
            'Tage seit letztem Regentag'; ...
            'Grenzwert fuer Regentag'}, ...
            'Location','NorthWest')
 


Erst wenn ich am Anfang noch [h1;h2;h3;h4] einfüge, kommt die Fehlermeldung.

Bei diesem Legenden-Code (anderer Plot, aber im gleichen Code) kommt übrigens keine Fehlermeldung:

Code:

    legend([h1;h2;h5;h3;h4;h6], ...
           {'10 min-Mittel';'Stundenmittel';'Tagesmittel'; ...
            'Halbtagesmittel - Tag (06-18 UTC)';'Halbtagesmittel - Nacht (18-06 UTC)'; ...
            'Halbtagesmittel - Tag & Nacht'},'Location','NorthWest');
 
Private Nachricht senden Benutzer-Profile anzeigen
 
CryptKeeper
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 31
Anmeldedatum: 10.03.11
Wohnort: ---
Version: MATLAB 7.9.0 (R2009B) / Octave 3.2.3
     Beitrag Verfasst am: 01.05.2011, 09:06     Titel:
  Antworten mit Zitat      
Da ja im Plot selbst trotz Warnmeldung alles so angezeigt wird, wie es sollte, hab ich beschlossen, das Problem einfach zu unterdrücken, und deshalb den legend()-Code mit 'warning off all ... warning on all' umschlossen.

Eigentlich müsste sich zwar (meinen 'Recherchen' zufolge) die Warnmeldung gezielt mit
Code:

warning('off','Ignoring extra legend entries.');
 

unterdrücken lassen, da spuckt mit Matlab aber folgende Fehlermeldung aus:
Code:

>> ??? Error using ==> warning
Unknown setting or incorrect message identifier 'Ignoring extra legend
entries.'.

Error in ==> indexgui>indizes at 1608
warning('off','Ignoring extra legend entries.');

Error in ==> indexgui>pushbutton1_Callback at 758
    indizes(datamat_in(data_start:data_end,:),timedate_in(data_start:data_end),plottype_in);
??? Error while evaluating uicontrol Callback
 


Naja egal, mit 'warning all off...on' klappt es jetzt auf alle Fälle und ich bin die nervige Warnmeldung los.
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: 01.05.2011, 09:50     Titel:
  Antworten mit Zitat      
Hallo,

du musst bei warning('off', msgid) die ID der Warnung, nicht die Warnung an sich angeben. Die ID bekommst du nach Auftreten der Warnung mit
Code:
[msgstr, msgid] = lastwarn


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

Forum-Anfänger

Forum-Anfänger


Beiträge: 31
Anmeldedatum: 10.03.11
Wohnort: ---
Version: MATLAB 7.9.0 (R2009B) / Octave 3.2.3
     Beitrag Verfasst am: 01.05.2011, 10:06     Titel:
  Antworten mit Zitat      
Danke, super, jetzt ist's noch etwas besser:

Code:

warning('off','MATLAB:legend:IgnoringExtraEntries');
legend(...)
warning('on','MATLAB:legend:IgnoringExtraEntries');
 


Ich dachte, ich schliess nur den legend()-Befehl damit ein, statt die Meldung global auszublenden, dann weiss ich wenigstens, wo er jeweils auftreten würde (wobei die Warnung wirklich nur in diesem einem Fall eintritt trotz mehreren legend()-Befehlen im Script; muss wohl irgendwie an den Daten oder so liegen, aber das ist mir mittlerweile wirklich egal).

Danke viel mal auf alle Fälle für die Hilfe @Harald!
Private Nachricht senden Benutzer-Profile anzeigen
 
Patrick++

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.07.2020, 14:35     Titel: Auf die Anzahl kommt es an...
  Antworten mit Zitat      
Die Warnung kommt nur, wenn die Anzahl der Handles in h nicht mit der Anzahl der Legendeneinträge übereinstimmt.

Warnung:

Code:

h(1) = plot(rand(10,10);
hold on
h(2) = plot(rand(10,10);
h(3) = plot(rand(10,10);
legend(h, {'Zufall 1', 'Zufall 2', 'Zufall 3', 'Zufall 4'})
 


Keine Warnung:

Code:

h(1) = plot(rand(10,10);
hold on
h(2) = plot(rand(10,10);
h(3) = plot(rand(10,10);
legend(h, {'Zufall 1', 'Zufall 2', 'Zufall 3'})
 
 
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.