2016-09-18 4 views
2

ProblemLegend in Box nicht

Die Legende der Handlung zentriert ich plotyy erstellen, wird nicht in seiner Box zentriert ist, wie in der Abbildung dargestellt:

enter image description here

Dies ist das erste Mal, Das ist mir passiert und das Problem bleibt auch nach dem Export in alle möglichen Formarten bestehen. Ich benutze Matlab R2016a.

-Code

ich den folgenden Code verwenden, um die Legende zu zeichnen:

a=sprintf('Test') 
b=sprintf('Test.\nTest Test') 
c=sprintf('Test\nTest') 
d=sprintf('TestTest\nTest') 
e=sprintf('Test\nTest') 
f=sprintf('Test\nTest Test') 
hLegend=legend([l1,l2,r1,r2,r3,r4], a, b, c, d, e, f); 
set([gca,hXLabel,hYLabel,hLegend] , 'FontName' , 'Helvetica','FontSize', 8) 
set(hLegend,'Fontsize',8,'Location', 'southoutside', 'Orientation','horizontal') 

Deshalb ist die Frage, hat jemand dieses Problem schon haben? Und gibt es eine Möglichkeit, es zu reparieren oder kann ich die Legende irgendwie manuell zentrieren?

ein ausführbares Codebeispiel

h=figure 
x=[1:10] 
y=[1:10] 
hold on 
yyaxis left 
l1=plot(x,y) 
l2=plot(x,2*y) 
hYLabel=ylabel('Test') 

yyaxis right 
r1=plot(x,y.^2) 
r2=plot(x,y.^3) 
r3=plot(x,10*y) 
r4=plot(x,20*y) 


hYLabel=ylabel('Test2') 
hXLabel = xlabel('TestTest]'); 
a=sprintf('Test') 
b=sprintf('Test.\nTest Test') 
c=sprintf('Test\nTest') 
d=sprintf('Test\nTest') 
e=sprintf('Test\nTest') 
f=sprintf('TestTest\nTest') 
hLegend=legend([l1,l2,r1,r2,r3,r4], a, b, c, d, e, f); 
set([gca,hXLabel,hYLabel,hLegend] , 'FontName' , 'Helvetica','FontSize', 8) 
set(hLegend,'Fontsize',8,'Location', 'southoutside', 'Orientation','horizontal') 
set(gca,'LineWidth',1.0) 
set(l1, 'LineWidth',1.5,'LineStyle','-') 
set(l2, 'LineWidth',1.5,'LineStyle','-.') 
set(r1, 'LineWidth',1.5,'LineStyle','-') 
set(r2, 'LineWidth',1.5,'LineStyle','-.') 
set(r3, 'LineWidth',1.5) 
set(r4, 'LineWidth',1.5,'LineStyle','- -') 

hold off 

Obwohl die ursprünglichen Daten nicht verwendet Anzeige, erhalte ich das gleiche Problem oben das Beispiel. Vielen Dank!

+0

Ich erhalte eine Fehlermeldung: * nicht definierte Funktion oder Variable ‚l1‘ * können Sie bitte eine ausführbare Code Probe stellen.? – Rotem

+0

@Rotem Ich habe eine ausführbare Version des Codes hinzugefügt – KiW

Antwort

1

Ich nehme an, das Problem ist, dass a=sprintf('Test') eine einzelne Zeile ist, und andere wie b=sprintf('Test.\nTest Test') sind mehrere Zeilen.

Wenn alle Legendeneinträge zwei Textzeilen sind, wird der Text korrekt zentriert.

Lösung: ersetzen a=sprintf('Test') durch a=sprintf('Test\n\0.').
Das macht a zwei Textzeilen, wenn die zweite Zeile ein Leerzeichen ist.

enter image description here

+0

Danke für Ihre Antwort, das ist schon eine große Hilfe. Weißt du, ob es einen Weg gibt, den ersten vor der Linie zu zentrieren? Denn im Fall hier sieht der erste "Test" ein wenig verloren aus. – KiW

+0

Nein, ich konnte keinen Weg finden, die vertikale Ausrichtung des ersten Etiketts einzustellen. – Rotem

+0

Das Ersetzen der Reihenfolge - ("Test" als zweites) - löst das Problem: 'a = sprintf ('Test'); hLegend = Legende ([l2, l1, r1, r2, r3, r4], b, a, c , d, e, f); '(Falls es akzeptabel ist). – Rotem