我正在使用 Flex 中的 PieChart 和 PieSeries 组件,但遇到了问题。当 PieSeries 的 labelPosition 属性设置为“inside”并且饼图中只有一个切片时,标签不会显示。
查看文档,我猜它的一些怪癖与删除内部标签的时间有关。文档内容如下:
在图表内绘制标签,在每个楔形的大约十分之七处居中。收缩标签以确保它们不会相互干扰。如果标签缩小到 calloutPointSize 属性下方,请将其移除。当两个标签重叠时,Flex 会优先考虑较大切片的标签。
一种解决方法是检测 1 个切片并将另一个元素添加到具有零值的 dataProvider 中,但显示的标签仍然不是我想要的位置,而且似乎没有办法移动它。
另一种解决方案是用画布包装 PieChart,并以与我用于标签的格式相同的格式在顶部呈现文本,但我真的不想走这条路(包括在图表的画布上呈现文本,这可能稍微少一点黑客,但仍然是黑客)。
这是一些演示我的问题的代码:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application
xmlns:mx="http://www.adobe.com/2006/mxml"
layout="vertical"
backgroundColor="white"
>
<mx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
[Bindable] public var pieData:ArrayCollection = new ArrayCollection([
{value: 50, label: "This is a\nlong label"}
]);
[Bindable] public var pieData2:ArrayCollection = new ArrayCollection([
{value: 50, label: "This is a\nlong label"},
{value: 0, label: ""}
]);
]]>
</mx:Script>
<mx:HBox
width="100%"
height="100%"
>
<mx:PieChart
width="100%"
height="100%"
>
<mx:series>
<mx:PieSeries
dataProvider="{ pieData }"
field="value"
labelField="label"
labelPosition="callout"
/>
</mx:series>
</mx:PieChart>
<mx:PieChart
width="100%"
height="100%"
>
<mx:series>
<mx:PieSeries
dataProvider="{ pieData }"
field="value"
labelField="label"
labelPosition="insideWithCallout"
/>
</mx:series>
</mx:PieChart>
<mx:PieChart
width="100%"
height="100%"
>
<mx:series>
<mx:PieSeries
dataProvider="{ pieData }"
field="value"
labelField="label"
labelPosition="inside"
/>
</mx:series>
</mx:PieChart>
</mx:HBox>
<mx:HBox
width="100%"
height="100%"
>
<mx:PieChart
width="100%"
height="100%"
>
<mx:series>
<mx:PieSeries
dataProvider="{ pieData2 }"
field="value"
labelField="label"
labelPosition="callout"
/>
</mx:series>
</mx:PieChart>
<mx:PieChart
width="100%"
height="100%"
>
<mx:series>
<mx:PieSeries
dataProvider="{ pieData2 }"
field="value"
labelField="label"
labelPosition="insideWithCallout"
/>
</mx:series>
</mx:PieChart>
<mx:PieChart
width="100%"
height="100%"
>
<mx:series>
<mx:PieSeries
dataProvider="{ pieData2 }"
field="value"
labelField="label"
labelPosition="inside"
/>
</mx:series>
</mx:PieChart>
</mx:HBox>
</mx:Application>
有没有人遇到过这个问题或知道解决方法/好的解决方案?