Графики Adobe Flex во Flex 4: декартовы холсты данных с осью категорий? - PullRequest
1 голос
/ 05 января 2011

Я завершаю работу над новым графиком, в котором в качестве моей горизонтальной оси используется ось категории, а в качестве вертикальной - линейная ось. Точки отображаются правильно, и у меня есть Cartesian Data Canvas в качестве фонового элемента, и я хочу, чтобы Canvas использовался для рисования горизонтальных прямоугольных «полос», которые заполняют всю диаграмму (но не стандартную полосу GridLines). Мне нужно рисовать полные (и динамические) прямоугольники во время выполнения, основываясь на данных и независимо от оси отметки.

Я подтвердил, что мой Cartesian Data Canvas добавляется в качестве дочернего элемента, однако все попытки фактически нарисовать его с помощью API рисования были безуспешными. Я нашел сообщение на другом сайте и внимательно прочитал и перечитал asdocs, пытаясь выяснить, что мне не хватает (пожалуйста, не отвечайте ссылками на сообщение «соединение двух столбцов линией»).

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

protected function drawChartCanvas():void
{

  chtCanvas.clear(); 
  chtCanvas.beginFill(0x000000);

  var canvasWidth:Number = chtCanvas.width;
  var canvasHeight:Number = chtCanvas.height;

  var minPt:Array = chtCanvas.localToData(new Point(0, 0)); //
  var maxPt:Array = chtCanvas.localToData(new Point(canvasWidth,canvasHeight));


  // Tried this
  chtCanvas.drawRect(minPt[0]-1, maxPt[1], maxPt[0]-1, minPt[1]);

  // Tried using data coordinates
  //chtCanvas.drawRect(0, someChartData, chart.width, 0);

  // Tried something random like this
  // chtCanvas.drawRect(0,10000, 10000, 0);

  chtCanvas.endFill(); 
}

Но я ничего не вижу на экране. Мне интересно, работают ли координаты, которые я использую с Cartesian Data Canvas, при использовании оси категорий? Свойства оси «Мой график» и элементов фона:

<mx:backgroundElements>
 <mx:CartesianDataCanvas id="chtCanvas" includeInRanges="true" includeInLayout="true" visible="true"/>
 <mx:GridLines gridDirection="horizontal"/>
</mx:backgroundElements>


<mx:verticalAxis>
 <mx:LinearAxis id="axisSalary" baseAtZero="true" autoAdjust="true" title="Salary"/>
</mx:verticalAxis>
<mx:horizontalAxis>
 <mx:CategoryAxis id="axisDate" categoryField="Date" title="Date" dataFunction="formatChartDates"/>
</mx:horizontalAxis>

Я бы подумал, что Cartesian Data Canvas сможет взять точку вертикальной оси (здесь значение зарплаты) в качестве точки, а затем передать ширину графика, чтобы завершить мою «полосу», но я не могу получить НИЧЕГО, чтобы рисовать на холсте. Я бы подумал, поскольку холст использует точки данных, а не экранные координаты, я все же смогу использовать свою зарплату для определения высоты элемента фона, но все же использую ширину диаграммы, чтобы убедиться, что прямоугольник проходит весь экран поперек экрана. Любая помощь будет принята с благодарностью.

ОБНОВЛЕНИЕ: Дополнительная информация

Так что я думаю, что обнаружил, в чем здесь проблема, и это связано с координатами данных. Я смог получить прямоугольник для рисования. Первоначально я хотел использовать диаграмму с сериями линий, чтобы мои значения были расположены в центре диаграммы, а не в начале координат. Я изменил это на линейную диаграмму с линейными рядами и получил свой Cartesian Data Canvas для рендеринга моих полос, но теперь проблема в том, что не всегда есть несколько значений данных, которые растягивают всю ширину диаграммы.

Таким образом, теперь возникает вопрос: как мне получить начало координат диаграммы в координатах данных, когда в данной точке нет действительного значения данных? Например, используя диаграмму с центрами рядов линий все значения данных, но для того, чтобы нарисовать, мне нужно выяснить, как представить x-координату начала графа, когда с ним не связано значение данных.

Спасибо!

1 Ответ

0 голосов
/ 05 мая 2011

Итак, мне пришлось переосмыслить реальную проблему для этого вопроса, и я решил обойти ее. этот пост Flex Charts: Можете ли вы использовать минимальную / максимальную точку из IAxis для Cartesian Data Canvas, чтобы нарисовать всю ширину диаграммы? отвечает на этот вопрос.

...