文档

带有文本和百分比的标签饼图

这个例子展示了如何在饼图上标记片,以便标签包含自定义文本和每个片预先计算的百分比值。

制作饼图

制作一个饼图。指定一个输出参数,h控件创建的文本和补丁对象函数。

X = [1,2,3];图h =饼(x);

函数为每个饼片创建一个文本对象和一个补丁对象。默认,MATLAB®用该饼片所代表的整体的百分比标记每个饼片。

请注意

要指定简单文本标签,请将标签直接传递给函数。例如,pie(x,{'项目A','项目B','项目C'})

存储预先计算的百分比值

提取三个文本对象h并将它们存储在数组中hText.获取每个饼片的贡献百分比字符串文本对象的属性。

hText = findobj(“类型”“文本”);% text对象句柄百分比值= get(hText,“字符串”);百分比值

组合百分比值和附加文本

指定单元格数组中的文本三种.然后,将文本与单元格数组中的相关百分比值连接起来combinedtxt

TXT = {“A项:”“B项:”“C项:”};%的字符串combinedtxt = strcat(txt,percentValues);%字符串和%值

在更新标签之前,存储文本程度上属性的值。范围值给出了包含当前标签的矩形的宽度和高度。您可以使用这些值来调整新标签的位置。

oldExtents_cell = get(hText,“程度”);%单元格阵列

oldextent = cell2mat(oldExtents_cell);%数值数组

的方法更改标签字符串的文本对象的属性combinedtxt

请注意

从R2014b开始,您可以使用点表示法来设置属性。如果您使用的是较早的版本,请使用函数来代替。

hText(1)。字符串= combinedtxt(1); hText(2).String = combinedtxt(2); hText(3).String = combinedtxt(3);

确定移动每个标签的水平距离

移动每个标签,使其不会与饼图重叠。方法获取新标签的更新的区段值程度上属性。使用新的和旧的区段值来查找每个标签的宽度变化。

newExtents_cell = get(hText,“程度”);%单元格阵列

newExtents = cell2mat(newExtents_cell);%数值数组width_change = newExtents(:,3)- oldextent (:,3);

使用宽度的变化来计算移动每个标签的水平距离。将计算的偏移量存储在抵消

signValues = sign(oldextent (:,1));offset = signValues.*(width_change/2);

新标签

位置属性包含一个三元素向量,[x, y, z],它指定了标签在三维空间中的位置。获取当前标签位置,并通过将计算的偏移量添加到其水平位置,将每个标签向左或向右移动。然后,设置位置属性的新值。

textPositions_cell = get(hText,{)“位置”});%单元格阵列textlocations = cell2mat(textPositions_cell);%数值数组textposition (:,1) = textposition (:,1) + offset;%添加偏移量hText(1)。位置= textPositions(1,:); hText(2).Position = textPositions(2,:); hText(3).Position = textPositions(3,:);

每个饼图片的标签包含计算百分比的自定义文本,并且不与饼图重叠。

另请参阅

||

相关的话题

这个话题有帮助吗?