но текст легенды станет серым, и они все равно будут полностью покрыты стрелками.

у задать два вопроса здесь. Короче они есть,

На точечной диаграмме в MATLAB как я могу щелкнуть точку, используя всплывающую подсказку, и получить не данные x, y, а какие-то другие данные, связанные с точкой x, y? Прямо сейчас у меня есть обходной путь, используя gscatter и файл из file-exchange (см. Ниже). Но это будет грязно для больших наборов данных.

Как соединить две точки стрелкой на линии между ними? Например, вrlocus Сюжеты, которые делает MATLAB, отличная маленькая стрелка. Есть ли родной способ сделать это в MATLAB для произвольных участков?

Рассмотрим набор данных в MATLAB

clearvars
LionNames={'Tyrion','Jamie','Cersei'};
Data = rand(3,2,2);
LionsDay1=struct('Names',{},'Data',[]);
LionsDay2=struct('Names',{},'Data',[]);

for i =1:numel(LionNames)
    LionsDay1(i).Names=LionNames{i};
    LionsDay1(i).Data=Data(i,:,1);
    LionsDay2(i).Names=LionNames{i};
    LionsDay2(i).Data=Data(i,:,2);
end

WolfNames = {'Robert','Arya','Sansa','Jon'};
Data = rand(4,2,2);
WolvesDay1=struct('Names',{},'Data',[]);
WolvesDay2=struct('Names',{},'Data',[]);

for i =1:numel(WolfNames)
    WolvesDay1(i).Names=WolfNames{i};
    WolvesDay1(i).Data=Data(i,:,1);
    WolvesDay2(i).Names=WolfNames{i};
    WolvesDay2(i).Data=Data(i,:,2);
end

Здесь данные для каждой группы - это данные x и y. Для целей этого вопроса или примера приведенная выше структура данных не так уж важна, но я сделал это так, чтобы читатель почувствовал общую картину.

Итак, используя файлиз обмена файлами MATLAB Я могу разбросать сюжет и назвать каждую точку, а также ее класс. Например,

lionsData=reshape([LionsDay1(:).Data],2,3);
wolvesData=reshape([WolvesDay1(:).Data],2,4);
xData=[lionsData(1,:) wolvesData(1,:)];
yData=[lionsData(2,:) wolvesData(2,:)];
group=repmat({'Lions'},[1,3]);
group= [group repmat({'Wolves'},[1,4])];
gscatter(xData',yData',group');

Names=[LionNames WolfNames];
labelpoints(xData,yData,Names)

Создает,

Но, как вы можете себе представить, это может привести к путанице для больших наборов данных (> 50 точек данных); или если точки были очень близко друг к другу, отсюда первый вопрос. Нажав на точку, чтобы раскрыть имя, было бы намного лучше.

На второй вопрос, делая,

day1Lions=reshape([LionsDay1(:).Data],2,3);
day2Lions=reshape([LionsDay2(:).Data],2,3);

for k = 1 : size(day1Lions, 2)
    plot([day1Lions(1,k), day2Lions(1,k)], [day1Lions(2,k), day2Lions(2,k)],'s-');
    hold on
end
legend('Tyrion','Jamie','Cersei')

дает,

Таким образом, в некотором смысле мы можем видеть, насколько изменились две точки между днем ​​1 и днем ​​2но теперь я не знаю, какой это день 1 и день 2. Было бы неплохо поместить стрелку, идущую от точки данных дня 1 к точке данных дня 2. Конечно, если у вопроса о наведении / всплывающей подсказки выше есть достаточно гибкий ответ, это может решить и эту проблему.

Конечно, в конце концов, мы также смешали бы львов и волков с 1-м и 2-м днем, но ответы на эти два простых вопроса, вероятно, ответили бы на проблемы при составлении сюжета.

Ответы на вопрос(1)

Ваш ответ на вопрос