PieChart этикетка с одним срезом

Я работаю с компонентами PieChart и PieSeries во Flex и столкнулся с проблемой. Когда для свойства labelPosition элемента PieSeries установлено значение «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>

Кто-нибудь сталкивался с этой проблемой или знает обходное / хорошее решение?

11.12.2008 22:54:02
Я тоже столкнулся с этой проблемой, но пока не обошел ее стороной. Спасибо за идею добавления элемента с нулевым значением в поставщик данных, я буду иметь это в виду.
ianmjones 12.12.2008 10:27:46
2 ОТВЕТА
РЕШЕНИЕ

Все, что я могу сделать, это указать на этот отчет об ошибке , который выглядит так, как вы столкнулись.

Боюсь, я не могу заставить предложенный патч работать, может быть, вам повезет больше.

1
7.01.2009 11:10:57
Рассматривая старые проблемы, которые я поднял ... из упомянутого здесь отчета об ошибках следует, что проблема была решена, но с тех пор я прекратил разработку в flex.
Chris 8.03.2012 21:26:55

Диаграммы Flex предназначены для рисования через CartesianDataCanvas.

См. «Рисование на элементах управления диаграммой» в Руководстве разработчика по визуализации данных Flex / Компоненты диаграмм Flex / Использование событий и эффектов в диаграммах

ура

0
17.06.2009 16:58:43