2015-05-18 6 views
8

У меня есть приложение WPF, где мне нужно визуализировать y = y (x1, x2), где x1, x2 - линейные координаты. Я могу сделать это, используя HeatMapSeries в Oxyplot, но когда я хочу построить два набора данных в одном окне, тепловые карты не являются подходящим инструментом. Несколько контурных рядов были бы лучше. Теперь, я пытался добиться этого в том же порядке, как и с HeatMapSeries, который работал очень хорошо:Как создать и построить ContourSeries с помощью Oxyplot?

public void PlotHeatMap(){ 

    OxyPlot.PlotModel model = new PlotModel { Title = "2-D data" }; 
    model.Axes.Add(new OxyPlot.Axes.LinearColorAxis { 
    Position = OxyPlot.Axes.AxisPosition.Right, 
    Palette = OxyPalettes.Jet(500), 
    HighColor = OxyColors.Gray, 
    LowColor = OxyColors.Black }); 

    OxyPlot.Series.HeatMapSeries heatmap = new OxyPlot.Series.HeatMapSeries { 
    Data = (Double[ , ])data, 
    X0 = x1min, 
    X1 = x1max, 
    Y0 = x2min, 
    Y1 = x2max 
    }; 

    model.Series.Add(heatmap); 
} 

Output from the HeatMapSeries

Теперь, когда я пытаюсь использовать ContourSeries вместо этого, я просто заменить HeatMapSeries с микросхемой ContourSeries:

public void PlotContour(){ 

    OxyPlot.PlotModel model = new PlotModel { Title = "2-D data" }; 
    model.Axes.Add(new OxyPlot.Axes.LinearColorAxis { 
    Position = OxyPlot.Axes.AxisPosition.Right, 
    Palette = OxyPalettes.Jet(500), 
    HighColor = OxyColors.Gray, 
    LowColor = OxyColors.Black }); 

    OxyPlot.Series.ContourSeries contour = new OxyPlot.Series.ContourSeries { 
     ColumnCoordinates = arrayFromMinToMax1, 
     RowCoordinates = arrayFromMinToMax2, 
     ContourLevels = arrayOfLevels, 
     ContourColors = arrayOfColors, // Same # elements as the levels' array 
     Data = (Double[ , ])data 
    }; 

    model.Series.Add(contour); 
} 

Это просто произвести вывод:

Output from the ContourSeries attempt

Ось x и y есть и соответствуют координатам min и max, но я не вижу контурных линий. Я подозреваю, что что-то не хватает при настройке оси (если она такая же, как для HeatMapSeries?). Я не знаю, как продолжить этот контурный сюжет. Существуют ли примеры, отличные от, например, примеры ContourSeriesExamples в GitHub?

Спасибо за помощь!

+1

Может быть просто, что вы черчение неправильного региона? Глядя на оси в вашем контурном сюжете, они, похоже, перевернуты по сравнению с графиком тепловой карты. Что делать, если вместо этого вы устанавливаете 'ColumnCoordinates = arrayFromMinToMax2' и' RowCoordinates = arrayFromMinToMax1'? –

+0

Спасибо, что указали это, Андерс, но результат тот же. Я обновил изображение. –

+0

Если вы посмотрите на [HeatMapSeriesExamples] (https://github.com/oxyplot/oxyplot/blob/develop/Source/Examples/ExampleLibrary/Series/HeatMapSeriesExamples.cs#L27), он даже сочетает тепловую карту с контурами, поэтому контуры должны быть прямолинейными. Пусть 'ContourSeries' сами определяют уровни и цвета, т. Е. Удаляют свойства ContourLevels и ContourColors из инициализатора и видят, дает ли это какой-либо улучшенный результат. –

ответ

2

Наконец-то я нашел, что случилось, это была моя ошибка! ColumnCoordinates и массивы RowCoordinates должны соответствовать размеру DoubleArray Data! И я не был уверен, что они были. Теперь контур и тепловая карта выравниваются! Спасибо Anders за поддержку и толкнул меня в свой собственный код!

HeatMap with Contour