3

Flex で PieChart および PieSeries コンポーネントを使用していますが、問題が発生しました。PieSeries の labelPosition プロパティが 'inside' に設定されていて、パイにスライスが 1 つしかない場合、ラベルは表示されません。

ドキュメントを見ると、内側のラベルが削除されたときに関連する癖があると思います。ドキュメントには次のように書かれています。

グラフの内側に、各くさびに沿って約 10 分の 7 を中心にラベルを描きます。ラベル同士が干渉しないように縮小してください。ラベルが calloutPointSize プロパティより下に縮小されている場合は、それらを削除します。2 つのラベルが重なっている場合、Flex は大きなスライスのラベルを優先します。

回避策の 1 つは、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 に答える