2015-05-18 6 views
8

Mam aplikację WPF, w której muszę wizualizować y = y (x1, x2), gdzie x1, x2 są współrzędnymi liniowymi. Mogę to zrobić za pomocą HeatMapSeries w Oxyplot, ale kiedy chcę wydrukować dwa zestawy danych w tym samym oknie, mapy termiczne nie są odpowiednim narzędziem. Kilka serii konturowych byłoby lepsze. Teraz starałem się to osiągnąć w taki sam sposób jak w przypadku HeatMapSeries, który pracował całkiem dobrze:Jak utworzyć i wydrukować ContourSeries za pomocą 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

Teraz, gdy próbuję zamiast używać ContourSeries, po prostu zastąpić HeatMapSeries z 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); 
} 

To właśnie produkować wyjście:

Output from the ContourSeries attempt

Są tam osie x i y, które odpowiadają współrzędnym minimalnym i maksymalnym, ale nie widzę linii konturu. Podejrzewam, że czegoś brakuje w tworzeniu Osi (czy powinien być taki sam jak w przypadku HeatMapSeries ??). Nie wiem, jak postępować z tym konturem. Czy są przykłady inne niż np. ContourSeriesExamples w GitHub?

Dzięki za pomoc!

+1

Może to być po prostu, że spiskują niewłaściwy region? Patrząc na osie na wykresie konturu, wydaje się, że są odwrócone w stosunku do wykresu mapy ciepła. Co się stanie, jeśli zamiast tego ustawisz 'ColumnCoordinates = arrayFromMinToMax2' i' RowCoordinates = arrayFromMinToMax1'? –

+0

Dzięki za wskazanie tego, Anders, ale wynik jest taki sam. Jednak zaktualizowałem obraz. –

+0

Jeśli spojrzeć na [HeatMapSeriesExamples] (https://github.com/oxyplot/oxyplot/blob/develop/Source/Examples/ExampleLibrary/Series/HeatMapSeriesExamples.cs#L27) to nawet łączy mapę ciepła z konturami, więc kontury powinny być naprawdę proste. Niech 'ContourSeries' decydują o samych poziomach i kolorach, tzn. Usuwają właściwości' ContourLevels' i 'ContourColors' z inicjalizatora i sprawdzają, czy zapewnia to ulepszony resut. –

Odpowiedz

2

W końcu znalazłem, co było nie tak - to był mój błąd! Macierze ColumnCoordinates i RowCoordinates muszą być zgodne z rozmiarem urządzenia DoubleArray Data! I nie upewniłem się, że są. Teraz wyrównanie konturu i mapy cieplnej! Dzięki Anders za wsparcie i popchnięcie mnie do własnego kodu!

HeatMap with Contour

Powiązane problemy