не допускать перекрытия участков линии Matlab - PullRequest
3 голосов
/ 22 февраля 2012

Я строю много линий друг над другом, используя plot и hold on однако я хочу, чтобы одна из строк была немного сдвинута, если она падает на другую строку. например, в следующем случае:

plot(1:100); hold on; plot(-100:100,abs(-100:100))

Я хочу, чтобы было ясно, что здесь есть 2 участка я попытался просто увеличить значения х для разных графиков, но это слишком сильно искажает данные

for z=1:numberofplots
plot((1:size(locations,2))+0.1*z,locations(z,:)','color', altclrz(z,:));
end

1 Ответ

5 голосов
/ 30 мая 2012

Вы можете дифференцировать кривые несколькими способами:

-1 - перекос данных

Как вы сказали, вы можете немного сдвинуть данные.Я бы предложил исправить вашу ось и затем вычислить, сколько единиц в ширине линии, чтобы вы получили очень плотное прилегание, как это:

lineWidth = 5;

figure(33);
clf;
subplot(1,2,1);
h = plot(myData, 'linewidth', lineWidth);
xlim([1,5]);
ylim([1,5]);
title('Original');

myData = meshgrid(1:5)';

myLimDiff = diff(ylim);
set(gca,'units', 'pixels');
myPos = get(gca, 'position')
myWidthHeight= myPos(3:4)

PixelsPerUnit =myWidthHeight(2)./ myLimDiff;
myDataSkewed = myData + meshgrid(-2:2)*1/PixelsPerUnit(1)*lineWidth;

subplot(1,2,2);
plot(myDataSkewed, 'linewidth', lineWidth);
xlim([1,5]);
ylim([1,5]);
title('Skewed');

Результат:

enter image description here

-2- Использование сплошных линий и тире

Как заметил кто-то еще в комментариях, вы можете сделать пунктирную линию над сплошной линией или комбинацию стилей.

-3- Использование разной толщины линии

Используйте разную ширину линии с самой толстой в нижней части:

figure(54);
clf
hold all
for ind = 10:-3:1
    plot(1:5, 'linewidth', ind);
end

enter image description here

-4- Используйте отдельные графики для каждой строки с поворотом

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

enter image description here

figure(55);
clf
data = rand(3);

for ind = 1:3    
    subplot(1,3,ind);
    plot(data, 'linewidth', 4, 'color', [1 1 1]*.75);
    hold on
    plot(data(:,ind), 'linewidth', 2);
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...