Страницы

Поиск по вопросам

понедельник, 30 декабря 2019 г.

Как создать график в WPF?

#wpf #chart


Как создать график в WPF с координатами x,y и возможностью создания разных кривых?
Я пытался использовать Chart, но я не знаю как создать элемент Chart в коде.
    


Ответы

Ответ 1



Существует множество библиотек которые позволяют строить различные типы графиков в WPF - проектах. Несколько из них: OxyPlot LiveCharts Выбор языка программирования (F#) для небольших примеров по использованию оставил на свое усмотрение, так как не было указано явно какой предпочтительнее. 1. OxyPlot поддерживает различные типы графиков, среди которых LineSeries, PieSeries, BarSeries,...Из недостатков - слабая документация. Проблема существует уже давно, но, к сожалению, работа в этом направлении не ведется. Таким образом найти ответ на интересующий вопрос довольно сложно. Но так как библиотека уже завоевала определенную популярность, то по ней имеется не мало вопросов (с ответами :) ) на английском SO, которые должны помочь. Чтобы ответ был более полным рассмотрим простой пример - построение графиков двух функций sin и cos с возможностью отмечать галочками отображать обе линии, любую из них или не показывать вовсе. OxyPlot: xmlns:oxy="clr-namespace:OxyPlot.Wpf;assembly=OxyPlot.Wpf" XAML: MainViewModel: open OxyPlot ... type MainViewModel() = let x = -5.0 let y = 5.0 let range = [x..0.1..y] let sindata = range |> List.map(fun value -> value, sin value) |> List.map(DataPoint) let cosdata = range |> List.map(fun value -> value, cos value) |> List.map(DataPoint) member __.SPoints = sindata member __.CPoints = cosdata 2. LiveCharts стремительно набирающая популярность библиотека. Из основных преимуществ - документация. Недостатки - баги, которые, впрочем, довольно успешно исправляются. Помимо стандартного набора типов графиков поддерживает 180° Gauge, Bubble series. Кроме этого планируется добавить поддержку некоторых других типов - Countour Maps. Если документации будет недостаточно, чтобы найти ответ на вопрос можно написать в чате (gitter). Пример практически аналогичный с предыдущим, только без возможности влиять на отображаемые графики. Связано с тем, что подобным привязка к элементам управления на данный момент не работает. Поэтому нужно создавать свойство в VM и связывать с ним. XAML: xmlns:lvc="clr-namespace:LiveCharts.Wpf;assembly=LiveCharts.Wpf" VM: open LiveCharts open LiveCharts.Configurations type LiveChartsVM() = let x = -5.0 let y = 5.0 let range = [x..0.1..y] let sindata = range |> List.map(fun value -> value, sin value) |> ChartValues let cosdata = range |> List.map(fun value -> value, cos value) |> ChartValues do let mapper = Mappers.Xy().X(fst).Y(snd) LiveCharts.Charting.For(mapper, SeriesOrientation.Horizontal) member __.SPoints = sindata member __.CPoints = cosdata

Комментариев нет:

Отправить комментарий