/ / Merge line štíty v legende MATLAB - matlab, legenda

Zlúčiť linky štýlu v legende MATLAB - matlab, legenda

Mám dve súbory údajov, ktoré chcem napísať na rovnakom obrázku, napr. dva kosínus a dva sinusové grafy, ktoré sa v amplitúde líšia:

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;

prúd

Chcem "skomprimovať" legendu tak, aby sa dva riadkové stily (bežná čiara a bodkovaná čiara) "zlúčili" a objavili sa vedľa tej istej textovej položky v legende, napríklad:

požadovaný

Ako to môžem dosiahnuť v MATLABe? Momentálne používam R2015b.

odpovede:

0 pre odpoveď č. 1

Toto je najbližšie, ktoré mám s rýchlym vzhľadom s r2015b:

Príklad obrázku

%%
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;

Manipulácia s legendami bola jednoduchšia pre HG2 - takže pomocou staršej verzie programu Matlab (r2013a) získam:

tu zadajte popis obrázku

%%
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;