2012-11-07 14 views
7

Tring per ombreggiare le singole barre in un grafico a barre colori differenti, dicono blu per il rosso positivo per negativo. Non riesco a trovare nulla su Internet che funzioni. Ho il mio codice qui sotto trovo ogni bar è colorata come per il valore del primo bar, piuttosto che i colori separati per ogni barra:Matlab Bar Graph - riempire bar con colori diversi a seconda del segno e la grandezza

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 

Grazie per il vostro aiuto

risposta

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

Ti propongo di chiamare bar separata per ogni singola barra? Come utilizzare questa soluzione se il numero di barre non è stato risolto? –

+0

Normalmente si utilizza un ciclo se il numero di barre non è fisso. –

+0

Ciao Gael - dove questo si inserisce nel mio codice? Il numero di barre può essere variabile. Grazie per il vostro aiuto –

5

È possibile modificare le proprietà dell'oggetto bar per -1/0/1 con sign, e quindi utilizzare un binario rosso/mappa colore blu:

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

Si possono trovare informazioni futher here.

EDIT: per farlo ombreggiata, dovrete impostare il cdata modo appropriato in combinazione con 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

Per facile ColorData-mappatura, utilizzare il comando 'caxis':' CAXIS ([- 20,20]) 'mette il minimo del colorbar a -20, e il massimo a +20, garantendo simmetria intorno allo zero. Quindi non v'è una soluzione semplice, dopo tutti :) – Jonas

+0

@Jonas: grande, redigerà in thx !! –

+0

È grandioso, grazie mille –