Matlab: команда fill добавляет два элемента в легенду. Как этого избежать - PullRequest
0 голосов
/ 25 мая 2020

Я работаю над проектом Matlab, в котором мне нужно использовать команду fill. Команда fill fill (X, Y, C) создает заполненные многоугольники из данных в X и Y с цветом вершины, указанным C.

У меня есть следующий код:

x_2 = [x, fliplr(x)];
inBetween = [Auf1_mW_pro_mg(1781:length(Auf1_mW_pro_mg)), fliplr(y_Temp)];
figure('Name','Test')
fill(x_2, inBetween, 'r','facealpha',.5,'LineStyle','none');
legend()

..., что дает мне следующий результат:

enter image description here

Как вы можете видеть, у меня есть две области, потому что мои данные являются реальными данными, и экстраполированная строка не всегда имеет только строку данных над ней.

Есть ли у кого-нибудь простая идея, как избежать отображения двух элементов данных в легенде в этом сценарии? Удаление элементов из легенды, похоже, нелегко сделать, что было моей первой идеей. Может быть, я смогу контролировать, какие данные добавляются в легенду?

Спасибо!

Ответы [ 2 ]

1 голос
/ 25 мая 2020

Просто сохраните и используйте дескрипторы объектов, которые вы хотите отобразить в легенде.

Пример:

Сначала воспроизведите вашу проблему:

t = (1/16:1/8:1).'*pi;   x = sin(t);   y = cos(t);
%Making the plots now
plot(t,x,'r','linewidth',2);
hold on;
h1 = plot(t,y,'b','linewidth',2); %We want to show this in the legend
h2 = fill([x fliplr(x)],fliplr(y),'g'); %and one entry only for this
plot(x,y,'k','linewidth',2);

Теперь legend() дает нам:

image

We can fix this using the handles of the desired objects as follows:

legend([h1, h2(1)]);
% or if we want to name these objects then:
% legend([h1, h2(1)],'Line Plot','Filled Polygon');

which gives:

1 голос
/ 25 мая 2020

Если fill появляется дважды в легенде, создаются два патча. Вы можете установить видимость этих отдельных патчей для legend. Сначала сохраните дескрипторы графических объектов

h = fill(x_2, inBetween, 'r','facealpha',.5,'LineStyle','none');

Это вернет массив Patch 2 × 1, из которого вы можете установить свойство HandleVisibility для второго элемента:

h(2).HandleVisibility = 'off';

Теперь это не будет отображаться в вашей легенде. Но такие функции как findobj тоже не могут найти патч, подробнее о последствиях здесь ).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...