2012-11-07 13 views
7

Zmierzam do cieniowania poszczególnych pasków na wykresie słupkowym w różnych kolorach, na przykład niebieski dla pozytywnej czerwieni dla negatywu. Nie mogę znaleźć czegoś w Internecie, który działa. I mój kod poniżej znajdę każdy bar jest kolorowy jak na wartości pierwszego baru, zamiast oddzielnych kolorów dla każdego pręta:Wykres słupkowy Matlab - paski wypełnienia o różnych kolorach w zależności od znaku i wielkości

c1=zeros(32,3); 
c2=zeros(32,3); 
for i=1:3 
    c1(:,i) = linspace(r(i),w(i),32); 
    c2(:,i) = linspace(w(i),b(i),32); 
end 
c= [c1(1:end-1,:);c2]; 
subplot(2,2,2) 

bar(Numbers(end-7:end,1)), shading interp 
caxis([-8 8]), colormap(c), colorbar 

dzięki za pomoc

Odpowiedz

1
figure 
hold on 
bar(1, 1, 'red') 
bar(2, -1, 'blue') 
+0

Czy proponują nazwać oddzielny bar dla każdego baru? Jak korzystać z tego rozwiązania, jeśli liczba barów nie jest stała? –

+0

Normalnie używasz pętli, jeśli liczba pasków nie jest stała. –

+0

Witaj Gael - gdzie by to pasowało do mojego kodu? Liczba barów może być zmienna. Dziękuję za pomoc –

5

Można zmienić właściwości obiektu bar do -1/0/1 z sign, a następnie użyć binarny czerwony/niebieski colormap:

y=rand(10,1)*3-1.5; % some data 

hb=bar(y); 
set(get(hb,'children'),'cdata', sign(y)); 
colormap([1 0 0; 0 0 1]); % red & blue in rgb 

bar plot with binary colors

Możesz znaleźć dalsze informacje here.

EDIT: aby to zacienione, musisz ustawić cdata odpowiednio w połączeniu z caxis:

y=rand(10,1)*3-1.5; % some data 
hb=bar(y); 

% the colormap 
Mc = 16; 
Nc = Mc*2+1; % number of colors, uneven so there is a neutral middle 
rgb = [1 0 0;0 0 1]; 
cmap = [linspace(rgb(1,1),rgb(2,1),Nc)' linspace(rgb(1,2),rgb(2,2),Nc)' linspace(rgb(1,3),rgb(2,3),Nc)' ]; 
colormap(cmap); 

% cdata 
c = y; 
set(get(hb,'children'),'cdata', c); 
cmax = max(abs(c)); 
caxis([-cmax cmax]); 

bar plot with shaded colors

+1

Aby ułatwić mapowanie colordata, użyj polecenia 'caxis': caxis ([- 20,20])' ustawia minimalny pasek kolorów na -20, a maksimum na +20, zapewniając symetrię wokół zera. A więc jest proste rozwiązanie :) – Jonas

+0

@ Jonas: świetnie, edytuje w thx !! –

+0

To świetnie, dziękuję bardzo –

Powiązane problemy