2015-05-08 5 views
0

Я хотел бы построить больше кривых в одном окне, я хочу увидеть наложение этих кривых. Конкретно сюжет RHO_start для 3 кривых в одном окне. Я не знаю, как писать в моем коде. Вот он:Сюжет больше кривых в одном графике

clear,clc,close all 

abc='abc'; cal=18/230; 

Results=[]; 

data=[]; 
for i=1:3 
    im=imread(['vz_' num2str(j) abc(i) '.jpg']); 
    im=imresize(im,0.5); 
    %figure,imshow(im) 
    I=rgb2gray(im); 
    %figure,imshow(I); 
    J=imadjust(I); 
    %figure,imshow(J); 
    T=graythresh (J); 
    BW=im2bw(J,T); 
    %figure,imshow(BW); 
    BWI=1-BW; 
    %figure,imshow(BWI); 
    B=imclearborder(BWI); 
    O=bwareaopen(B,40000); 
    H=imfill(O,'holes'); 
    L=bwlabel(H); 
    S=regionprops(L,'Area','Perimeter'); 
    SE=[0 1 0;1 1 1;0 1 0]; 
    %figure,imshow(H); 
    D=imdilate(H,SE); 
    E=edge(D,'canny'); 
    %imshow(E); 
    bound=bwboundaries(E); 
    %figure,imshow(E);hold on; 
    for k=1 
     b=bound{k}; 
     %plot(b(:,2),b(:,1),'r','LineWidth',1.5); 
    end 
    for x=1:numel(S) 
     %plot(S(x).Centroid(1),S(x).Centroid(2),'ro'); 
    end 
    xx=b(:,2); 
    yy=b(:,1); 
    %figure,plot(xx,yy);axis equal; 
    XX=xx-mean(xx); 
    YY=yy-mean(yy); 
    THETA=XX; 
    RHO=YY; 
    %figure,plot(XX,YY);axis equal; 
    [THETA,RHO]=cart2pol(XX,YY); 
    %figure,polar(THETA,RHO); 
    %figure,plot(THETA); 
    %figure,plot(RHO); 
    RHO_smooth=smooth(RHO,30); 
    [Mc,Xc]=min(RHO_smooth); 
    *RHO_start* =[RHO_smooth(Xc:size(RHO_smooth));RHO_smooth(1:Xc)]; 
    tc=1:length(RHO_start); 
    [~,locsc]=findpeaks(RHO_start,'MinPeakHeight',160,'MinPeakDistance',50); 
    figure;hold on; 
    plot(tc,RHO_start); 
    plot(locsc,RHO_start(locsc),'rv','MarkerFaceColor','r'); 
    grid on; 
    title('Number of peaks'); 
    xlabel('angle'); 
    ylabel('radius'); 
    data=[data; i (S.Area)*cal^2 (S.Perimeter)*cal]; 
end 
data 
As=mean(data(:,2)); 
Results=[Results; j As]; 
end 
+2

Проверьте мой ответ. Также обратите внимание, что вы не должны использовать 'i' как имя переменной, так как оно используется для сложных (мнимых) чисел. Теперь ваш код будет работать, но что-то еще может сломаться позже, когда у вас все еще есть 'i' в вашей рабочей области, и вы запускаете другой скрипт. – Cat

ответ

2

пример: Предполагая, что вы хотите построить другую y1 и y2 данных в отношении того же вектора х, вы можете сделать

figure 
plot(x,y1); 
hold on; 
plot(x,y2); 
legend('Data1', 'Data2') 

figure создает новое окно. Вы только хотите назвать это один раз! В противном случае, если вы возьмете свое дело в качестве примера, появится 3 окна, каждый из которых будет иметь один сюжет.

hold on сообщает, что Matlab не перезаписывает старый сюжет новой. В противном случае будет видно только последний сюжет.

А вот пример с петлей:

figure % Create one figure to draw in 
hold on; 
for iter=1:10  % In matlab you should never use 'i' as a variable name 
    plot(x,y{iter}) % Assuming that y is now a cell containing the individual vectors 
end 

EDIT: Добавление цвета в ваши участки

Вы, наверное, уже знаете, «нормальный» способ определения цвета с помощью ключевого слова:

plot(x,y,'color', 'green') 

Но вы можете легко создать свои собственные цвета, используя схему RGB (красный зеленый синий). Цвета RGB определяются тремя значениями, каждое значение описывает интенсивность соответствующего цвета. Вы можете смешивать много цветов только с этих трех (все, что отображает ваш монитор сейчас, очень вероятно определено в RGB). Обычно RGB определяется 3 бита и бит значения. Поэтому ваши значения могут принимать значения между 0 и 255. Однако Matlab использует значения RGB в диапазоне между 0 и 1. Итак, если вы хотите указать цвет черный, вы должны использовать [0 0 0] и для белый[1 1 1].

RGB Цвета можно найти с помощью Google, просто введите «Таблица RGB» в поиске изображения и там вы должны найти то, что вам нужно. Поскольку эти таблицы часто указывают цвета в диапазоне 0-255, вы можете использовать эти значения и просто делить вектор на 255.

Позвольте мне показать вам: Давайте сначала определим некоторые цвета, которые мы можем использовать позже

color_red = [255 0 0]/255; 
color_green = [0 255 0]/255; 
color_blue = [0 0 255]/255; 
color_orange = [255 102 0]/255; 
color_pink = [204, 0, 102]/255; 

Теперь наши цвета просто могут быть использованы, как те, интегрированные в MATLAB

plot(x,y,'color', color_pink);  
plot(x,y,'color', [0.8, 0, 0.4]); % Same as above 
+0

Большое спасибо за советы и комментарии! Знаете ли вы, как я могу создать все эти кривые в разных цветах? У меня 10 кривых, но недостаточно цветов. Я использую: colorstring = 'rgbcmyk'; это всего лишь 7 цветов .. –

3

Чтобы построить больше вещей в той же оси использовать hold on:

figure; 
hold on; 
plot(1:10,1:10); 
plot(1:5,:2:6); 

для построения более чем одной оси в каждом использование участка subplot

figure; 
subplot(121) 
plot(1:10,1:10); 
subplot(122) 
hold on 
plot(1:10,1:10); 
plot(1:5,:2:6); 
Смежные вопросы