Matlab रंग बार सूचक जो गतिशील परिवर्तन




dynamic matlab-figure (2)

कारण यह है कि आप कभी-कभी रंगबार पर काला नहीं देखते हैं, यह बहुत पतला है, आपको बस कुछ करना है, इसकी चौड़ाई नीचे दी गई है:

x = 1:10;
w = -5:5;
for k = 1:10
    y= x.^2 +10*k +1000;
    plot(x,y,'-r');
    hold on;
    pause(1)
    caxis([0 2000]);
    cmap = jet(2000);
    cmap(w+y(end), :) = 0;
    set(gcf, 'Colormap', cmap);
    colorbar;
    disp(y(end))
    grid on;
end

और परिणाम:

अगले कोड चलाना मुझे रंग पट्टी में एक काली पट्टी मिलती है जो हर लूप में बदल जाती है।

यदि मैं सीमा को 200 से 2000 तक बदलता हूं, और y= x.^2 +10*i +1000 , द्वितीय संस्करण के लिए चला जाता y= x.^2 +10*i +1000 , तो बार कभी कभी प्रकट होता है, अन्य नहीं। क्या कोई जानता है क्यों? और यह कैसे काम कर सकता है?

क्या एक डायनेमिक रंग पट्टी हो सकती है? यानी अगर हम ध्वनि आउटपुट को साजिश करते हैं, तो डीबी में ध्वनि स्तर को रंगबारी के रूप में दिखाने के लिए

संपादित:

x = 1:10;
figure;
for i = 1:10
y= x.^2 +10*i;
% y= x.^2 +10*i +1000; % 2nd version
plot(x,y,'-r'); hold on;
pause(1)
caxis([0 200]); 
% caxis([0 2000]); % 2nd version
cmap = jet(200);
% cmap = jet(2000);% 2nd version
cmap(y(end), :) = 0;
set(gcf, 'Colormap', cmap);
colorbar;
disp(y(end))
grid on;
end

धन्यवाद।

नया संपादित करें:

ईबीएच द्वारा उत्कृष्ट उत्तर के आधार पर, एक पूरक प्रश्न:

मैं एक दूसरे कोलाबार को छोड़ने की कोशिश कर रहा हूं, लेकिन मैं उन दोनों को काम नहीं कर सकता:

x = 1:10;
w1 = -15:15;
w2 = -1:1;
figure;
for i = 1:10

% %{
y= x.^2 +10*i +1000; %  
plot(x,y,'-r'); hold on;
pause(1)
caxis([0 2000]); %  
cmap1 = jet(2000);% 
cmap1(w1+y(end), :) = 0;
set(gcf, 'Colormap', cmap1);
h1=colorbar('eastoutside');
ylabel(h1, 'y')
disp(y(end))
%}


% %{
y2= x.^2 +5*i; %  
plot(x,y2,'-b'); hold on;
pause(1)
caxis([0 150]); 
cmap2 = jet(150);
cmap2(w2+y2(end-5), :) = 0; hold on;
cmap2(w2+y2(end), :) = 0; hold on;
set(gcf, 'Colormap', cmap2);
h2=colorbar('westoutside');
ylabel(h2, 'y2')
disp(y2(end-5))
disp(y2(end))

%}

grid on;
end

अतः, क्या मैं इसे काम कर सकता हूं? क्या कैंसर की समस्या है ?, और क्या यह दोनों रंग पट्टी की चौड़ाई कम करना संभव है?


टिप्पणियों में @ सुइवर सुझाव को कार्यान्वित करने का एक विचार यहां दिया गया है:

x = 1:10;
cb_width = 0.04;
c = sum(jet(4000),2);
c = c(1:2000);
h = imagesc(c);
h.Parent.Position(1) = 1-cb_width-0.07;
h.Parent.Position(3) = cb_width;
h.Parent.YAxisLocation = 'right';
h.Parent.XAxis.Visible = 'off';
axis xy
box off
colormap jet
ax = axes;
ax.Position(3) =  ax.Position(3) - cb_width;
grid on;
hold on;
w = -5:5; % <-- this is very important!
for k = 1:10
    h.CData = c;
    y = x.^2 +10*k +1000;
    plot(ax,x,y,'-r');
    h.CData(w+y(end),1) = nan;
    drawnow;
    disp(y(end))
    pause(1)
end

यह कोड एक आंकड़े के अंदर 2 कुल्हाड़ियों बनाता है, एक plot , और एक "कलरबार" के लिए है जो वास्तव में एक छवि है।

एकाधिक रंगीन

यदि आप एक और रंग पट्टी जोड़ना चाहते हैं, तो इसे आसानी से किया जा सकता है, यहां 3 के लिए एक उदाहरण है:

x = 1:10;
cb_width = 0.08; % for all the colorbars together
c = sum(jet(4000),2);
% we define the colorbars area as [c nan c nan c]:
c = [c(1:2000) nan(2000,1) c(1:2000) nan(2000,1) c(1:2000)];
h = imagesc(c);
h.Parent.Position(1) = 1-cb_width-0.07;
h.Parent.Position(3) = cb_width;
h.Parent.YAxisLocation = 'right';
h.Parent.XAxis.Visible = 'off';
axis xy
box off
f = gcf;
back = f.Color;
cmap = [back; jet(2000); 0 0 0];
colormap(cmap)
% now we start to draw the data:
ax = axes;
ax.Position(3) =  ax.Position(3) - cb_width;
grid on;
hold on;
w = -5:5;
for k = 1:10
    h.CData = c;
    y = x.^2 +10*k +1000;
    z = x.^2 +15*k +500;
    t = x.^2 +30*k +700;
    plot(ax,x,y,'-r',x,z,'-.b',x,t,'--m');
    h.CData(w+y(end),1) = 2.1; % <-- left bar
    h.CData(w+z(end),3) = 2.1; % <-- middle bar
    h.CData(w+t(end),5) = 2.1; % <-- right bar
    drawnow;
    disp(y(end))
    pause(1)
end

जो देता है:

बाएं और दाएं रंग के बर्तन:

बाईं ओर एक और रंग बार जोड़ना थोड़ा और अधिक मुश्किल है:

x = 1:10;
cb_width = 0.88; % for all the colorbars together
c = sum(jet(4000),2);
% we define the colorbars area as [c nan c nan c]:
c = [c(1:2000) nan(2000,50) c(1:2000)];
h = imagesc(c);
h.Parent.Position(1) = h.Parent.Position(1)-0.07;
h.Parent.Position(3) = cb_width;
axis xy
box off
h.Parent.XAxis.Visible = 'off';
yyaxis left
h.Parent.YAxis(1).Color = [0 0 0];
yyaxis right
h.Parent.YAxis(2).Color = [0 0 0];
h.Parent.YAxis(2).Limits = h.Parent.YAxis(1).Limits;
% make the nan transparent
cmap = [1 1 1; jet(2000); 0 0 0];
colormap(cmap)
% now we start to draw the data:
ax = axes;
% ax.Position(3) =  ax.Position(3) - cb_width;
grid on;
hold on;
w = -5:5;
for k = 1:10
    h.CData = c;
    y = x.^2 +10*k +1000;
    z = x.^2 +15*k +500;
    plot(ax,x,y,'-r',x,z,'-.b',x,t,'--m');
    h.CData(w+y(end),1) = 2.1; % <-- left bar
    h.CData(w+z(end),52) = 2.1; % <-- right bar
    drawnow;
    disp(y(end))
    pause(0.2)
end