2008-12-11 182 views
3

我正在使用Flex中的PieChart和PieSeries組件,並且遇到了問題。當PieSeries的labelPosition屬性設置爲'inside'並且餅圖中只有一個切片時,標籤不會顯示。帶單片的PieChart標籤

看着文檔,我猜測它的一些謬誤與內部標籤被刪除有關。該文件的內容如下:

在圖表內繪製標籤,大約沿着每個楔塊的中心位置的十分之七。收縮標籤以確保它們不會相互干擾。如果標籤在calloutPointSize屬性下縮小,請將其刪除。當兩個標籤重疊時,Flex會優先考慮較大切片的標籤。

一個解決辦法是檢測1片和另一元素添加到數據提供程序與零值,但所顯示的標籤仍然不,我想它,似乎沒有成爲一個辦法移動它。

另一種解決方案是用一個畫布包裝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> 

有沒有人遇到這個問題,或者知道一個變通/好的解決方案?

+0

我也遇到了這個問題,但還沒有到解決它呢。感謝爲數據提供者添加零值元素的想法,我會牢記這一點。 – ianmjones 2008-12-12 10:27:46

回答

1

我所能做的就是指出this bug report,這看起來就是你遇到的。

恐怕我無法得到建議的補丁工作,也許你會有更好的運氣。

+0

經歷過我提出的老問題......從這裏提到的bug報告看來,問題已經解決,但我從此停止了flex的開發。 – Chris 2012-03-08 21:26:55

0

Flex圖表設計爲通過CartesianDataCanvas繪製。

看到Flex數據可視化開發人員指南/ Flex圖表組件「借鑑圖表控件」 /圖表中使用事件和影響

乾杯