2D Scatter-график со стрелками вместо "точек"
Я хочу сделать 2D точечный график со следующими требованиями;
- "Точки" должны быть не точками, а стрелками, указывающими вверх или вниз в зависимости от представляемых данных.
- Должна быть возможность указать, какие значения показывать на оси.
- Пользователь должен иметь возможность масштабировать и панорамировать график.
- Я хочу иметь возможность указать, какой цвет должна иметь каждая стрелка.
- Стрелки должны быть кликабельными (т.е. мне нужно каким-то образом зарегистрировать событие клика и решить, какая стрелка была нажата).
Я пытался сделать это с помощью ZedGraph, но мне трудно получить то, что я хочу, особенно с первым требованием.
Есть ли бесплатная библиотека графиков, которая позволила бы мне сделать это относительно легко в WinForms? Или какие-нибудь общие советы о том, как выполнить первое требование, используя ZedGraph?
2 ответа
Теперь я узнал, что все требования могут быть выполнены с помощью ZedGraph.
"Точки" должны быть не точками, а стрелками, указывающими вверх или вниз в зависимости от представляемых данных.
Самым чистым решением является использование LineItem и создание пользовательского типа символа, как в этом посте. Настройка типа символа ZedGraph LineItem.
Должна быть возможность указать, какие значения показывать на оси.
Простым решением этого является использование TextLabels и размещение их вручную там, где вы хотите.
Пользователь должен иметь возможность масштабировать и панорамировать график.
Функциональность встроена в ZedGraph.
Я хочу иметь возможность указать, какой цвет должна иметь каждая стрелка.
Можно создать несколько LineItems для каждого цвета, но это требует, чтобы сама линия не была видна.
Стрелки должны быть кликабельными (т.е. мне нужно каким-то образом зарегистрировать событие клика и решить, какая стрелка была нажата).
Легко сделать, используя событие Click и метод FindNearestPoint.
В примерах Zedgraph есть пример добавления текстовых меток к точкам данных, используя TextObj
ЕКТС. Вы можете найти этот демонстрационный образец здесь.
Основываясь на этом примере, вы должны иметь возможность создавать стрелки вверх и вниз в необходимых позициях, используя ArrowObj ects вместо TextObj
ЕКТС.