2012-11-07 5 views
7

Tôi đang dò tìm các thanh riêng lẻ trong biểu đồ thanh màu khác nhau, màu xanh dương cho màu đỏ dương cho âm. Tôi không thể tìm thấy aything trên internet hoạt động. Tôi mã của tôi dưới đây tôi thấy mỗi thanh được màu theo giá trị của thanh đầu tiên, chứ không phải là màu sắc riêng biệt cho mỗi thanh:Biểu đồ thanh Matlab - các thanh tô màu với các màu khác nhau tùy theo ký hiệu và độ lớn

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 

Nhờ sự giúp đỡ của bạn

Trả lời

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

Bạn có đề xuất để gọi thanh riêng biệt cho mỗi thanh cá nhân? Làm thế nào sử dụng giải pháp này nếu số lượng các thanh không cố định? –

+0

Bạn thường sử dụng vòng lặp nếu số lượng thanh không cố định. –

+0

Hi Gael - nơi điều này sẽ phù hợp với mã của tôi? Số lượng các thanh có thể thay đổi. Cảm ơn sự giúp đỡ của bạn –

5

Bạn có thể thay đổi các thuộc tính của đối tượng thanh để -1/0/1 với sign, và sau đó sử dụng một nhị phân màu đỏ/xanh 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

Bạn có thể tìm thêm thông tin here.

EDIT: để làm cho nó bóng mờ, bạn sẽ phải thiết lập các cdata một cách thích hợp kết hợp với 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

Để dễ dàng ánh xạ colordata, sử dụng lệnh 'caxis':' caxis ([- 20,20]) 'đặt tối thiểu thanh màu ở -20 và tối đa ở +20, đảm bảo đối xứng khoảng không. Vì vậy, có một giải pháp đơn giản sau khi tất cả :) – Jonas

+0

@ Jason: tuyệt vời, sẽ chỉnh sửa trong thx !! –

+0

Điều đó thật tuyệt, cảm ơn bạn rất nhiều –