2012-12-10 13 views
5

मैं 2 वेक्टर: x और y के रूप में दिए गए फ़ंक्शन f को फ़ंक्शन बनाना चाहता हूं, इसलिए y=f(x)। मैं plot(x,y) उपयोग करते हैं, लेकिन अब मैं की जरूरत है यह इतना के तहत 0 और लाल ऊपर नीला हो यह इस तरह दिखेगा:मैटलैब डबल कलर प्लॉट

enter image description here

+0

इस के लिए mathworks फ़ाइल विनिमय साइट पर एक स्क्रिप्ट सशर्त लाइन साजिश http://www.mathworks.co रंग का कहा जाता है। ब्रिटेन/matlabcentral/fileexchange/30,423-सशर्त रंग-लाइन-साजिश – KatyB

उत्तर

8

जब आप matlab में एक वेक्टर, Nans से भर जाता है कि कि वेक्टर के किसी भी खंड साजिश प्लॉट नहीं किया जाएगा। तो अपने लक्ष्य को पूरा करने के लिए एक चाल मूल के शीर्ष पर दूसरी पंक्ति को प्लान करना है जो नैन का उपयोग करके हटाए गए प्रासंगिक सेगमेंट के साथ है। उदाहरण के लिए,

x = linspace(1,100,1000); 
y = sin(x); 

% Using a cutoff of y>=0.5 
belowCutoff  = y; 
belowCutoff(y>=0) = NaN; % Replace points above cutoff with NaNs; 

figure; 
plot(x,y,'r',x, belowCutoff, 'b'); 

enter image description here

1
y0 = 0; % threshold 
color1 = [1 0 0]; % below threshold 
color2 = [0 0 1]; % above threshold 
x = 1 : 10; 
y = randn(1, 10); 
threshold_plot(x, y, y0, color1, color2); 

function threshold_plot(x, y, y0, color1, color2) 
hold on; 
n = length(x); 
for i = 2 : n 
    x1 = x(i - 1); y1 = y(i - 1); 
    x2 = x(i); y2 = y(i); 
    ascending = y1 < y2; 
    if x1 == x2 
    if ascending 
     plot([x1 x2], [y1, y0], 'Color', color1); 
     plot([x1 x2], [y0, y2], 'Color', color2); 
    else 
     plot([x1 x2], [y1, y0], 'Color', color2); 
     plot([x1 x2], [y0, y2], 'Color', color1); 
    end; 
    elseif y1 == y2 
    if threshold <= y1 
     plot([x1 x2], [y1 y2], 'Color', color2); 
    else 
     plot([x1 x2], [y1 y2], 'Color', color1); 
    end; 
    else 
    a = (y2 - y1)/(x2 - x1); 
    b = y1 - a * x1; 
    x0 = (y0 - b)/a; 
    if x1 <= x0 && x0 <= x2 
     if ascending 
     plot([x1 x0], [y1, y0], 'Color', color1); 
     plot([x0 x2], [y0, y2], 'Color', color2); 
     else 
     plot([x1 x0], [y1, y0], 'Color', color2); 
     plot([x0 x2], [y0, y2], 'Color', color1); 
     end; 
    else 
     if y0 <= y1 
     plot([x1 x2], [y1 y2], 'Color', color2); 
     else 
     plot([x1 x2], [y1 y2], 'Color', color1); 
     end; 
    end; 
    end; 
end; 
संबंधित मुद्दे