matlab - 3 डी मूल्य के आधार पर 2 डी प्लॉट लाइन का रंग बदलें




plot colors (2)

आप इसे एक ऐसी चाल से भी कर सकते हैं जो 2014b के लिए Matlab संस्करण के साथ काम करता है (कम से कम 2009 ए के रूप में)।
हालांकि, जब तक आप समाधान में से किसी एक के लिए एक आवरण लिख नहीं लेंगे (जब तक आप plot(x,y,{'r','o','y','g','b'}) )।

चाल एक line ऑब्जेक्ट के बजाय एक surface का उपयोग करना है रंग नक्शे और बनावट का फायदा उठाने के लिए सतहों को उनके CData गुणों और कई उपयोगी विशेषताओं से लाभ मिलता है।

Matlab surf 1 डी डेटा को संभाल नहीं करता है, इसे इनपुट के रूप में एक मैट्रिक्स की जरूरत है, इसलिए हम इसे प्रत्येक निर्देशांक सेट (उदाहरण के लिए xx=[x,x] ) के डुप्लिकेट करके दे सकते हैं।
हालांकि चिंता न करें, सतह एक पंक्ति के रूप में पतली रह जाएगी, इसलिए अंतिम परिणाम बदसूरत नहीं है।

%% // your data
M=[140400 70.7850 1
 140401 70.7923 2
 140402 70.7993 3
 140403 70.8067 4
 140404 70.8139 5
 140405 70.8212 3];

x = M(:,1) ; %// extract "X" column
y = M(:,2) ; %// same for "Y"
c = M(:,3) ; %// extract color index for the custom colormap

%% // define your custom colormap
custom_colormap = [
    1  0 0 ; ... %// red
    1 .5 0 ; ... %// orange
    1  1 0 ; ... %// yellow
    0  1 0 ; ... %// green
    0  0 1 ; ... %// blue
    ] ;

%% // Prepare matrix data
xx=[x x];           %// create a 2D matrix based on "X" column
yy=[y y];           %// same for Y
zz=zeros(size(xx)); %// everything in the Z=0 plane
cc =[c c] ;         %// matrix for "CData"

%// draw the surface (actually a line)
hs=surf(xx,yy,zz,cc,'EdgeColor','interp','FaceColor','none','Marker','o') ;

colormap(custom_colormap) ;     %// assign the colormap
shading flat                    %// so each line segment has a plain color
view(2) %// view(0,90)          %// set view in X-Y plane
colorbar

आपको मिलेगा:

अधिक सामान्य मामले का एक उदाहरण के रूप में:

x=linspace(0,2*pi);
y=sin(x) ;

xx=[x;x];
yy=[y;y];
zz=zeros(size(xx));

hs=surf(xx,yy,zz,yy,'EdgeColor','interp') %// color binded to "y" values
colormap('hsv')
view(2) %// view(0,90)

आपको y मान से जुड़े रंग के साथ एक साइन लहर देगा:

मेरे पास डेटा सेट है जो इस तरह दिखता है

 140400 70.7850 1
 140401 70.7923 2
 140402 70.7993 3
 140403 70.8067 4
 140404 70.8139 5
 140405 70.8212 3

जहां पहले कॉलम समय (डेटा बिंदुओं के बीच एक दूसरे अंतराल) से मेल खाती है और एक्स अक्ष पर होगा, दूसरा स्तंभ दूरी के साथ मेल खाती है और y अक्ष पर होगा। तीसरा स्तंभ एक संख्या (एक से पांच) है जो आंदोलन की योग्यता है।

मैं एक ऐसी साजिश बनाना चाहता हूं जो पिछली डेटा बिंदु की संख्या के आधार पर दो बिंदुओं के बीच की रेखा का रंग बदलता है। उदाहरण के लिए, मैं चाहता हूं कि लाइन को पहले और दूसरे डेटा बिंदुओं के बीच लाल होना चाहिए क्योंकि योग्यता मान 1 था।

मैंने तीव्रता के मूल्य के आधार पर रंगों के एक स्लाइडिंग स्केल बनाने के बारे में बहुत सी पोस्ट देखे हैं, लेकिन मुझे सिर्फ 5 रंग चाहिए: (लाल, नारंगी, पीले, हरे और नीले) क्रमशः।

मैंने ऐसा कुछ करने की कोशिश की:

plot(x,y,{'r','o','y','g','b'})

लेकिन कोई भाग्य के साथ नहीं

कैसे इस दृष्टिकोण के किसी भी विचार? संभव के बिना पाशन के बिना


क्या आपके पास Matlab R2014b या उच्चतर है?

इसके बाद आप कुछ अवैधानिक सुविधाओं का इस्तेमाल कर सकते हैं जो यैर ऑल्टमैन द्वारा शुरू की गई थी :

n = 100;
x = linspace(-10,10,n); y = x.^2;
p = plot(x,y,'r', 'LineWidth',5);

%// modified jet-colormap
cd = [uint8(jet(n)*255) uint8(ones(n,1))].' %'

drawnow
set(p.Edge, 'ColorBinding','interpolated', 'ColorData',cd)





colormap