FLEX: сделать LineChart DATATIP ограниченным вертикальной осью - PullRequest
2 голосов
/ 28 февраля 2009

При составлении линейного графика допустим, что он предназначен для продаж бизнеса за разные периоды, а по горизонтали - дни, а по вертикали - доллары. Когда вы наводите курсор мыши на строку, подсказка dataTip сообщает вам о продажах за этот отдел. в тот день. Я хочу, чтобы он показывал все депозиты одновременно, так что, наведите курсор на день 3, я хочу, чтобы отображались подсказки данных для всех депозитов на 3-й день, чтобы вы могли сравнить значения для всех продаж в один и тот же день. Я установил чувствительность мыши к подсказкам данных, чтобы отображать все строки одновременно, но в итоге получаю день 2 для одного отдела и день 3 для другого, который не нужен. Это фактически объявлено как ошибка и объяснено лучше здесь: http://bugs.adobe.com/jira/browse/FLEXDMV-1853

Мне интересно, может ли кто-нибудь придумать обходной путь для этого?

Спасибо!

Ответы [ 3 ]

2 голосов
/ 05 августа 2010

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

Вы можете прочитать о решении, которое я написал для этой проблемы, здесь: Flex: Настройка расположения и поведения подсказки данных в LineChart

Вам придется немного изменить мое решение, чтобы соответствовать вашей проблеме:

В строке 47 вы можете удалить проверку Math.abs(last.y - mouseLoc.y) < 50. Это ограничивает подсказки данных линиями, которые находятся в пределах 50 пикселей по вертикали от мыши.

Я предполагаю, что вы используете линейный график по умолчанию , который просто рисует линии непосредственно между точками данных. Вам нужно будет изменить код, который вычисляет значение строки по заданной x-координате, чтобы работать с этим типом диаграммы. Я уже нахожу ближайшую точку данных слева от мыши со строками 33-41 и сохраняю ее в last. Просто получите следующую точку данных (которая будет ближайшей к правой мыши) и используйте что-то вроде этого, чтобы получить значение у мыши:

var slope:Number = (nextPoint.y - last.y) / (nextPoint.x - last.x);
var lineYAtMouse:Number = (slope * (last.x - mouseLoc.x)) + last.y;
var lineValue:Array = line.localToData(new Point(mouseLoc.x, lineYAtMouse));

Затем замените строки с 69 по 72 на:

hitPoint.x = mouseLoc.x;
hitPoint.y = lineYAtMouse;
hitPoint.xValue = lineValue[0];
hitPoint.yValue = lineValue[1];

Я не тестировал эти модификации, поэтому может быть ошибка или 2, но общая идея есть. Надеюсь, может быть, это еще кому-нибудь пригодится. Этот вопрос стареет. :)

0 голосов
/ 26 марта 2010

У меня та же проблема, но я работаю над столбчатыми диаграммами. Думал, что я мог бы включить вертикальные gridLines, используя backgroundElements, а затем добавить слушатель события диаграммы для мыши над (который срабатывает, когда мышь проходит над вертикальной линией сетки). Используя значение localX, я могу сравнить его с ближайшей точкой данных, может быть.

Brian

0 голосов
/ 17 июня 2009

Не ответ, но плохая альтернатива:

Вы можете создать свой собственный рендерер DataTip, который [ahem] отобразил местоположение каждой точки и нарисовал подсказку для каждой из них.

По сути, вы будете дублировать большую часть кода внутри классов диаграмм.

...