簡體   English   中英

餅圖顏色

[英]Pie Chart Color

如何創建具有不同顏色的兩個不同的餅圖?
也就是說,我必須繪制2個不同的數據:

  1. 其中之一有星期一,星期二,星期三……(全天)
  2. 另一個有星期一,星期三和星期日。

我希望圖表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'});

給出:

圖片

一個小技巧是將要顯示的天數設置為非常小的正值,並使用空的char數組帶空格字符char數組作為標簽。

MATLAB中的最小值可以使用realmin('double') ,也可以使用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

這使:

出

您應該使用基礎patch對象的CData屬性。 命令p = pie(...)返回一個圖形對象數組,其中奇數索引包含每個餅圖段的補丁,偶數索引包含文本標簽。

默認情況下,每個色塊都有一個單一的純色作為相對顏色索引(根據屬性CDataMapping )。 我發現正確同步不同圖表的唯一方法是更改​​這些圖表以索引直接指向顏色圖。

labels = {'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'};
data = 1:7;

% Draw first pie chart
figure
p1 = pie(data, labels);
% Set its colors to use direct colormap indices
set(p1(1:2:end), 'CDataMapping', 'direct')
% Spread colors evenly (default colormap has 64 colors)
for ii = 1:numel(p1)/2
    p1(ii*2-1).CData = ceil((ii / (numel(p1)/2)) * 64);
end

% Select indices of segments from first chart for the second chart
p1_indices = [1 3 7];

% Draw second pie chart
figure
p2 = pie(data(p1_indices), labels(p1_indices));
% Set its colors to use direct colormap indices
set(p2(1:2:end), 'CDataMapping', 'direct')
% Use the selected colors from the previous chart
for ii = 1:numel(p2)/2
    p2(ii*2-1).CData = p1(p1_indices(ii)*2-1).CData;
end

使用包含零的數據創建餅圖時,不會呈現該數據的關聯切片,因此不會為當前顏色圖分配顏色索引。 N個非零切片的顏色索引將跨度為1:N ,從而將它們縮放顏色圖限制 (即1對應於顏色圖中的第一種顏色, N對應於顏色圖中的最后一種顏色)。

為確保切片着色的一致性,您可以更改切片補丁'CData'屬性 ,以重現如果零切片仍然存在時將使用的顏色索引值。 這是一個小助手函數中的代碼,其中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);

在此處輸入圖片說明

現在,餅圖之間的顏色是一致的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM