2016-06-20 66 views
6

Ho due serie di dati che desidero stampare nella stessa figura, ad es. due coseno e due trame sinusoidali che appena si differenziano per l'ampiezza:Stili della linea di unione nella legenda MATLAB

x = -pi:pi/20:pi; 
hold all; 
amplitude = 1; 
plot(x,amplitude*cos(x),'-'); 
plot(x,amplitude*sin(x),'-'); 

ax = gca; 
ax.ColorOrderIndex = 1; 

amplitude=3; 
plot(x,amplitude*cos(x),'.'); 
plot(x,amplitude*sin(x),'.'); 

legend('1*cos(x)','1*sin(x)', '2*cos(x)','2*sin(x)'); 
hold off; 

current

voglio "comprimere" la legenda in modo che i due montanti (linea normale e la linea tratteggiata) sono "fuse" e appaiono accanto alla stessa voce testuale nella leggenda, come ad esempio:

desired

come posso raggiungere questo obiettivo in MATLAB? Attualmente sto usando R2015b.

+1

Tricky quest I, penso che questo possa aiutare, dare un'occhiata: [link] (http://stackoverflow.com/questions/33474206/add-custom-legend-without-any-relation-to-the-graph) – Niles

risposta

0

Questo è il più vicino ho avuto di avere uno sguardo rapido con r2015b:

Example image

%% 
f = figure; 
ax = axes; 
x = -pi:pi/20:pi; 
hold all; 
amplitude = 1; 
c1 = plot(x,amplitude*cos(x),'-', 'DisplayName', 'cos(x)'); 
s1 = plot(x,amplitude*sin(x),'-', 'DisplayName', 'sin(x)'); 

ax.ColorOrderIndex = 1; 

amplitude=3; 
c2 = plot(x,amplitude*cos(x),'.', 'DisplayName', ' '); 
s2 = plot(x,amplitude*sin(x),'.', 'DisplayName', ' '); 

lg = legend([c1 c2 s1 s2]); 
hold off; 

Manipolazione leggende era più facile pre HG2 - in modo da utilizzare una vecchia versione di Matlab (r2013a) ottengo:

enter image description here

%% 
f = figure; 
ax = handle(axes); 
x = -pi:pi/20:pi; 
hold all; 
amplitude = 1; 
c1 = plot(x,amplitude*cos(x),'r-', 'DisplayName', 'cos(x)'); 
s1 = plot(x,amplitude*sin(x),'b-', 'DisplayName', 'sin(x)'); 

amplitude=3; 
c2 = plot(x,amplitude*cos(x),'r.', 'DisplayName', ' '); 
s2 = plot(x,amplitude*sin(x),'b.', 'DisplayName', ' '); 

lg = handle(legend([c1 c2 s1 s2])); 
hold off; 

% You need to find which of the children on the legend is 
% each of the plots: 
c1 = handle(lg.Children(1)); 
c1.YData = 0.3; 

s1 = handle(lg.Children(7)); 
s1.YData = 0.75; 
+0

A chi è stato svalutato - puoi spiegare perché? – matlabgui

+1

non ne ho idea, ho solo upvoted :) –