带有文本和百分比的标签饼图
这个例子展示了如何在饼图上标记片,以便标签包含自定义文本和每个片预先计算的百分比值。
制作饼图
制作一个饼图。指定一个输出参数,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,:);
每个饼图片的标签包含计算百分比的自定义文本,并且不与饼图重叠。
另请参阅
相关的话题
这个话题有帮助吗?