饼图颜色

时间:2017-09-12 11:45:59

标签: matlab colors matlab-figure pie-chart

如何创建两种不同颜色的饼图? 可以这么说,我必须绘制2个不同的数据:

  1. 其中一个星期一,星期二,星期三......(所有日子)
  2. 另一个人有周一,周三和周日。
  3. 我希望图表1中的星期一和图表2中的星期一具有相同的颜色。周三同样的事情等。
    星期二和其他日子没有出现在第二个情节中的其他颜色。有可能吗?

    使用:

    figure
    X = rand(5, 1);
    X = X/sum(X);
    p = pie(X, {'M', 'T', 'W', 'TH', 'F'});
    figure
    X2 = rand(5, 1);
    X2(2) = 0; % remove Tuesday from the plot
    X2 = X2/sum(X2);
    p = pie(X2, {'M', 'T', 'W', 'TH', 'F'});
    

    给出:

    image

3 个答案:

答案 0 :(得分:2)

小黑客是将要显示的日期值设置为一个非常小的正值并使用空字符数组带有空格字符的char数组用于标签。

可以使用realmin('double')返回MATLAB中的最小值,也可以使用eps或手动定义非常小的正值。

figure
X = rand(7,1);
X = X/sum(X);
subplot(1,2,1);
p = pie(X,{'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'});

subplot(1,2,2);
X2 = rand(7,1);
X2([2,4,5,6]) = realmin('double');  %<----- Notice this (setting very small values)
X2 = X2/sum(X2);                                
p = pie(X2,{'Mon', '', 'Wed', '', '', '', 'Sun'});
%Notice this -------^----------^---^---^   No label for Tue, Thur, Fri, Sat

给出:

out

答案 1 :(得分:1)

您应该使用基础patch对象的tuple()属性。 命令export type Lit = string | number | boolean | undefined | null | void | {}; export const tuple = <T extends Lit[]>(...args: T) => args; const animals = tuple('cat', 'dog', 'rabbit', 'snake'); type Animal = (typeof animals)[number]; // union type 返回一个图形对象数组,其中奇数索引包含每个饼图段的补丁,偶数索引包含文本标签。

默认情况下,每个补丁都有一个纯色,作为相对颜色索引(根据属性CData)。我发现正确同步不同图表的唯一方法是将这些更改为直接索引到色彩映射。

p = pie(...)

答案 2 :(得分:1)

使用包含零的数据创建饼图时,不会呈现该数据的关联切片,因此不会为当前色彩图指定颜色索引。 N非零切片的颜色索引将跨越1:N,使得它们scaledcolormap limits(即1对应于色彩映射中的第一种颜色) ,N对应于色彩映射中的最后一种颜色。)

为了确保切片着色的一致性,您可以更改切片'CData' propertypatches以重现在零切片仍然存在时将使用的颜色索引值。这是一个小帮助函数中的代码,其中datapie的输入数据,handlespie返回的图形句柄数组:

function recolor_pie(data, handles)
  if all(data > 0)
    return  % No changes needed
  end
  C = get(handles(1:2:end), 'CData');   % Get color data of patches
  N = cellfun(@numel, C);               % Number of points per patch
  C = mat2cell(repelem(find(data > 0), N), N);  % Replicate indices for new color data
  set(handles(1:2:end), {'CData'}, C);  % Update patch color data
end

以下是一个显示其用途的示例:

% Plot first pie chart:
figure('Color', 'w');
subplot(1, 2, 1);
X = rand(5, 1);
X = X./sum(X);
p = pie(X, {'M', 'T', 'W', 'TH', 'F'});

% Plot second pie chart:
subplot(1, 2, 2);
X2 = rand(5, 1);
X2(2) = 0; % remove Tuesday from the plot
X2 = X2./sum(X2);
p = pie(X2, {'M', 'T', 'W', 'TH', 'F'});
recolor_pie(X2, p);

enter image description here

现在饼图之间的颜色是一致的。