3

我正在使用 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>

有没有人遇到过这个问题或知道解决方法/好的解决方案?

4

2 回答 2

1

我所能做的就是指出这个错误报告,它看起来就是你遇到的。

恐怕我无法让建议的补丁正常工作,也许你会有更好的运气。

于 2009-01-07T11:10:57.730 回答
0

Flex 图表旨在通过 CartesianDataCanvas 绘制。

请参阅Flex Data Visualization Developer's Guide / Flex Charting Components / Using Events and Effects in Charts 中的“在图表控件上绘图”

干杯

于 2009-06-17T16:58:43.947 回答