OxyPlot AreaSeries не работи хоризонтално

Използвам AreaSeries от OxyPlot за начертаване на вертикала AreaSeries.

Прилагам метод, който изгражда от списък с различен цвят AreaSeries. Ето кода:

private static void AddTriggerAreaSeries(PlotModel plotModel, int initialPoint, int endingPoint, int index)
        {
            var seriesArea = new AreaSeries();

            seriesArea.Title = "Instruction";
            seriesArea.Color = OxyColors.Transparent;
            seriesArea.Fill = TriggerColorList[index];

            //Draws vertically from bottom to top (0 -> 20)  
            //j referes to the second axis, the y axis in this case (vertical axis)     
            //The initial and ending points represent interval limits in which the area series is drawn

            for (var j = 0; j < 20; j++)
            {
                seriesArea.Points.Add(new DataPoint(initalPoint, j));
            }
            for (var j = 0; j < 20; j++)
            {
                seriesArea.Points.Add(new DataPoint(endingPoint, j));
            }
            plotModel.Series.Add(seriesArea);
        }

Вижте снимката по-долу Поредица от верикални площи

Кодът работи за vertical series. Въпреки това, когато се опитам да начертая същото нещо хоризонтално, то няма да се начертае от интервал, който давам.

Ето примерен код, който използвам, за да начертая AreaSeries horizontally:

        // Basically same code that I used but calling seriesArea.Points.Add(new DataPoint(x, y)) reversed, such that the line goes in the x direction
        for (var j = 0; j < 20; j++)
        {
            seriesArea.Points.Add(new DataPoint(j, initalPoint));
        }
        for (var j = 0; j < 20; j++)
        {
            seriesArea.Points.Add(new DataPoint(j, endingPoint));
        }
        plotModel.Series.Add(seriesArea);

Ето снимка на резултата от този код. В този пример initialPoint=1 и endingPoint=2. Опитвам се да начертая interval [1,2], вместо това само то черпи от interval [0,1] и за крайната точка рисува само линия:

въведете описание на изображението тук


person Georgiana M    schedule 19.05.2016    source източник


Отговори (1)


Промених ориентацията на графиката и направих AreaSeries вертикална.

Ето как изглежда в крайна сметка: Хоризонтална лента Ето кода: (използвам MVVM модел, създавам PlotModel в рамките на клас, след което прилагам mothods към него)

private static void CreateColorBar(PlotModel plotModel, HemodynamicsMapping hemodynamicsMapping)
        {
            plotModel.InvalidatePlot(false);

            plotModel.Series.Clear();
            plotModel.Axes.Clear();

            // x axis
            plotModel.Axes.Add(new LinearAxis
            {
                Position = AxisPosition.Right,
                AbsoluteMaximum = 10,
                Minimum = 0,
                AbsoluteMinimum = 0,
                Maximum = 10,
                MajorTickSize = 0,
                MinorTickSize = 0,
                TextColor = OxyColors.Transparent
            });

            // y axis 
            plotModel.Axes.Add(new LinearAxis
            {
                Position = AxisPosition.Bottom,
                AbsoluteMaximum = 61,
                AbsoluteMinimum = 0,
                Maximum = 61,
                Minimum = 0,
                MajorTickSize = 0,
                MinorTickSize = 0,
                TextColor = OxyColors.Transparent
            });

            // z axis 
            // I only use this axis to show the labels you see in the picture
            plotModel.Axes.Add(new CategoryAxis
            {
                Position = AxisPosition.Bottom,
                AbsoluteMaximum = 8,
                AbsoluteMinimum = 0,
                Maximum = 8,
                Minimum = 0,
                MajorTickSize = 0,
                MinorTickSize = 0
            });

            var count = 0;
            //Adds series with colors form black to green
            for (var i = 3; i > 0; i--)
            {
                for (var j = 9; j >= 0; j--)
                {
                    AddColorBarArea(plotModel, i, j, hemodynamicsMapping, count, -1);
                    count++;
                }
            }

            //Adds green series 
            AddColorBarArea(plotModel, 1, 0, hemodynamicsMapping, count, 1);

            //Adds series with colors form green to white
            for (var i = 1; i < 5; i++)
            {
                for (var j = 0; j < 10; j++)
                {
                    AddColorBarArea(plotModel, i, j, hemodynamicsMapping, count, 1);
                    count++;
                }
            }

            plotModel.InvalidatePlot(true);
        }

        // Adds a series to the plot. There are 61 series since there are 61 colors.
        private static void AddColorBarArea(PlotModel plotModel,int i, int j, HemodynamicsMapping hemodynamicsMapping, int count, int negative)
        {
            var seriesArea = new AreaSeries();

            for (var k = 0; k < 500; k++)
            {
                seriesArea.Points.Add(new DataPoint(count, k));
            }
            for (var k = 0; k < 500; k++)
            {
                seriesArea.Points.Add(new DataPoint(count + 1, k));
            }

            seriesArea.Color = hemodynamicsMapping.ChannelColor(j, i, negative).ToOxyColor();
            seriesArea.Fill = hemodynamicsMapping.ChannelColor(j, i, negative).ToOxyColor();

            plotModel.Series.Add(seriesArea);
        }

Идеалната позиция на тази цветна лента обаче трябваше да е вертикална, тъй като се опитвам да постигна нещо подобно: (тук снимка)

въведете описание на изображението тук

person Georgiana M    schedule 20.05.2016