更改堆叠条形图的颜色

时间:2019-08-02 14:22:12

标签: matlab matlab-figure

我想更改堆积条形图的颜色,但我不断收到错误消息

由于我需要在堆积的条形图中使用特定的颜色来与另一个图形匹配,因此我设置了具有RGB值的颜色向量:colori,然后在创建了要创建的图形后将其转换为0到1之间的值。像这样更改15个堆积条的颜色:

 for i = 1:15
    barSNE(i,:).FaceColor = colori(i);
 end

这里有一些代码:

...

colori =  [139,0,0
    255,160,122;
    255,69,0;
    255,165,0;
    255,215,0;
    154,205,50;
    34,139,34;
    50,205,50;
    255,182,193;
    106,90,205;
    139,0,139;
    32,178,170;
    199,21,133;
    30,144,255;
    0,0,205];
colori = colori ./ 255;   

ctMeansT = ctMeans.';

figure(2)
barSNE = bar(ctMeansT, 'stacked');

 for i = 1:15
    barSNE(i,:).FaceColor = colori(i);
 end

但是,我收到以下错误消息:

Structure assignment to non-structure object.

Error in viSNE_stacked_bar_plot (line 41)
     barSNE(i,:).FaceColor = colori(i);

雕像的颜色没有按预期更改

1 个答案:

答案 0 :(得分:0)

您对数组barSNEcolori的索引编制错误。如果我按照上面发布的代码运行代码,并检查得到的两个数组的大小

>> size(barSNE)

ans =

    1    15

>> size(colori)

ans =

    15     3

因此barSNE是一维数组,而colori是大小为15 x 3的矩阵。但是,给定索引符号,则在代码中反之亦然。例如。如果执行colori(i),则不会获得所需的第一个RGB三元组,而是数组colori的第一个单个值(在您的情况下为139/256 = 0.5451)。

按如下所示更改循环内的索引

for i = 1:15
    barSNE(i).FaceColor = colori(i,:);
end

,并且有效。作为一个带有ctMeans的随机数的示例(因为您没有提供原始数据),我得到了这样的条形图

enter image description here