MATLAB: How can i change the colours of segmentation on a chart pie

change colorcolourfacecolorpiepie chartpie3

Hey,
I have plotted a pie chart, but the colours of the segmentation does not appeal to me…is there any way I can alter the colours?
Thank you.

Best Answer

Unforunately the pie() function does not allow you to directly specify the face color of each wedge as inputs.
Here are two ways to change the wedge colors after producing the pie plot.
Produce a demo pie chart & define colors
ax = gca();
pieData = [.3 .4 .3];
h = pie(ax, pieData);
% Define 3 colors, one for each of the 3 wedges
newColors = [...
1, 0.41016, 0.70313; %hot pink
0, 1, 0.49609; %spring green
0.59766, 0.19531, 0.79688]; %dark orchid
Option 1 : change the axes colormap
You can use on of Matlab's many pre-defined colormaps or you can create your own has we've done above. This works with pie() and pie3() objects.
% ax is the handle to the pie chart axes
% newColors is a nx3 matrix for n pie-wedges
ax.Colormap = newColors;
% to use a pre-defined colormap (in this example, 'Spring')
% h is the output to pie()
ax.Colormap = spring(numel(h)/2);
Option 2: Change the FaceColor of the wedges
For pie() objects
% h=pie() output is a vector of alternating patch and text handles.
% Isolate the patch handles
patchHand = findobj(h, 'Type', 'Patch');
% Set the color of all patches using the nx3 newColors matrix
set(patchHand, {'FaceColor'}, mat2cell(newColors, ones(size(newColors,1),1), 3))
% Or set the color of a single wedge
patchHand(2).FaceColor = 'r';
For pie3() objects
% Extract the surface and patch handles from the output to pie3()
surfaceHand = findobj(h, 'Type', 'Surface'); % edges
patchHand = findobj(h, 'Type', 'Patch'); % tops & bottoms
% Set the color all patches (tops & bottoms) and surfaces (edges) using the nx3 newColors matrix
set(surfaceHand, {'FaceColor'}, mat2cell(newColors, ones(size(newColors,1),1), 3));
set(patchHand, {'FaceColor'}, mat2cell(repelem(newColors,2,1), ones(size(newColors,1)*2,1), 3));