Matlab Bar Graph - fill bars with different colours depending on sign and magnitude

后端 未结 2 2015
予麋鹿
予麋鹿 2021-01-12 09:30

I am tring to shade the individual bars in a bar graph different colours, say blue for positive red for negative. I cannot find aything on the internet that works. I my code

相关标签:
2条回答
  • 2021-01-12 10:04

    You can change the properties of the bar object to -1/0/1 with sign, and then use a binary red/blue 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

    You can find futher info here.

    EDIT: to get it shaded, you'll have to set the cdata appropriately in combination with 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

    0 讨论(0)
  • 2021-01-12 10:06
    figure
    hold on
    bar(1, 1, 'red')
    bar(2, -1, 'blue')
    
    0 讨论(0)
提交回复
热议问题