2D-диаграмма рассеяния со стрелками вместо точек

Я хочу сделать 2D-диаграмму рассеяния со следующими требованиями:

  • «Точки» должны быть не точками, а стрелками, указывающими либо вверх, либо вниз, в зависимости от данных, которые они представляют.
  • Должна быть возможность указать, какие значения отображать на оси.
  • Пользователь должен иметь возможность масштабировать и панорамировать график.
  • Я хочу иметь возможность указать, какой цвет должен иметь каждая стрелка.
  • Стрелки должны быть интерактивными (т. е. мне нужен какой-то способ зарегистрировать событие щелчка и решить, какая стрелка была нажата).

Я пытался сделать это с помощью ZedGraph, но мне трудно добиться того, что я хочу, особенно с первым требованием.

Есть ли бесплатная библиотека диаграмм, которая позволила бы мне сделать это относительно легко в WinForms? Или какие-нибудь общие советы о том, как выполнить первое требование с помощью ZedGraph?


person HischT    schedule 08.08.2012    source источник


Ответы (2)


В примерах Zedgraph есть пример добавления текстовых меток к точкам данных с использованием TextObjects. Этот демонстрационный образец можно найти здесь.

На основе этого примера вы должны иметь возможность создавать стрелки вверх и вниз в необходимых позициях, используя ArrowObjects вместо TextObjects.

person Anders Gustafsson    schedule 09.08.2012
comment
Спасибо за ваш ответ, это работает очень хорошо! Я заметил странное поведение при добавлении объектов в GraphObjList, хотя при масштабировании или панорамировании GraphObj (в моем случае ArrowObj) оказывается за пределами фактической области графика (также см. этот пост с такой же проблемой stackoverflow.com/questions/11795141/ ). - person HischT; 09.08.2012
comment
Да, я понимаю, что это решение практично в первую очередь для статически отображаемого графика. Я не проверял, но, может быть, вы можете переопределить какой-нибудь обработчик событий масштабирования/панорамирования и перерисовать там свои графические объекты? Может быть непрактично, но может стоит попробовать? - person Anders Gustafsson; 09.08.2012
comment
Я пытался заставить его работать, но это просто не чистое решение. Я подумал, что гораздо чище использовать пользовательский тип символа, как в этом сообщении тип символа строки zedgraph">stackoverflow.com/questions/11879915/ . Спасибо за вашу помощь как в этом, так и в связанном посте. - person HischT; 09.08.2012

Теперь я узнал, что все требования можно выполнить с помощью ZedGraph.

«Точки» должны быть не точками, а стрелками, указывающими либо вверх, либо вниз, в зависимости от данных, которые они представляют.

Самым чистым решением является использование LineItem и создание пользовательского типа символа, как в этом сообщении тип символа элемента строки ZedGraph .

Должна быть возможность указать, какие значения отображать на оси.

Простое решение этой проблемы — использовать TextLabels и вручную размещать их там, где вы хотите.

Пользователь должен иметь возможность масштабировать и панорамировать график.

Функциональность, встроенная в ZedGraph.

Я хочу иметь возможность указать, какой цвет должен иметь каждая стрелка.

Можно создать несколько LineItems для каждого цвета, но для этого необходимо, чтобы сама линия не была видна.

Стрелки должны быть интерактивными (т. е. мне нужен какой-то способ зарегистрировать событие щелчка и решить, какая стрелка была нажата).

Легко создается с помощью события Click и метода FindNearestPoint.

person HischT    schedule 09.08.2012