创建现场图WPF的C#图表

问题描述 投票:1回答:1

我使用Live图表。经过的SeriesCollection线路系列中值=图表值。在绑定XAML中,我传递的SeriesCollection。我明白,只有Y型点传输(我不改变默认的任何东西)。如何透过X点?通过指数ChartValue试过了,发誓索引是空的。即使你最初设置图表值的大小,没有填充图表上的单元填充为Y = 0。请帮帮忙,已经三天坐在上面。

GenerateChart.cs:

public ChartValues<double> Points { get; set; }
        double[] arraySeries = new double[30];
        double[] array = new double[20];
        public LineSeries GenerateSeries(string axis)
        {
            Random randomSeries = new Random();
            ChartValues<double> series = new ChartValues<double>(new double[20]);

            if (axis == "Y")
            {
                for (int i = 0; i < 5; i++)
                {
                    double randomValue = randomSeries.Next(1, 20);
                    if (!array.Contains(randomValue))
                    {
                        array[i] = randomValue;
                    }
                    else
                    {
                        i--;
                    }
                }

                for (int i = 0; i < 5; i++)
                {
                    double randomValue = randomSeries.Next(1, 20);
                    if (!arraySeries.Contains(randomValue))
                    {
                        int index = Convert.ToInt32(array[i]);
                        arraySeries[index] = randomValue;
                    }
                    else
                    {
                        i--;
                    }
                }

                for (int i = 0; i < 20; i++)
                {
                    if (arraySeries[i] != 0)
                    {
                        series.Insert(i, arraySeries[i]);
                    }
                }
                //series.AddRange(arraySeries);

            }
            Points = series;
            var testSeries = new LineSeries
            {
                Title = "Test",
                Values = series
            };

            return testSeries;
        }

RandomSeries.cs:

public SeriesCollection Series { get; private set; }

        public SeriesCollection SeriesX { get; private set; }

        public ChartValues<double> Points { get; private set; }
        double[] arraySeries = new double[30];
        double[] array = new double[20];
        public SeriesCollection BuidChart()
        {
            Random randomSeries = new Random();
            var generateChart = new GenerateChart();

            Series = new SeriesCollection 
            {
                generateChart.GenerateSeries("Y")
            };
            Points = generateChart.Points;
            return Series;
        } 

ModelView.cs:

public SeriesCollection SeriesCollection { get; set; }
        public ChartValues<double> Points { get; set; }
        public RandomSeries randomSeries;
        public Func<double, string> YFormatter { get; set; }
        public string[] Labels { get; set; }
        public SeriesCollection SeriesCollectionX { get; set; }
        public void BuildFunction()
        {
            //Points.Clear();
            //SeriesCollection.Clear();
            randomSeries = new RandomSeries();
            SeriesCollection = new SeriesCollection();
            Points = new ChartValues<double>();
            SeriesCollection.AddRange(randomSeries.BuidChart());
            //Points.AddRange(randomSeries.Points);
            //SeriesCollection.AddRange(randomSeries.BuidChart());
            //Points.AddRange(randomSeries.Points);
            Labels = new[] { "Jan", "Feb", "Mar", "Apr", "May", "Jan1", "Feb1", "Mar1", "Apr1", "May1" };
        }

MainWindow.xaml:

<Window.DataContext>
        <local:ModelView/>
    </Window.DataContext>
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="257*"/>
            <ColumnDefinition Width="536*"/>
        </Grid.ColumnDefinitions>
        <lvc:CartesianChart Series="{Binding SeriesCollection}" LegendLocation="Right" Grid.ColumnSpan="2" Margin="0,0,-0.4,0" >
            <!--<lvc:CartesianChart.AxisY>
                <lvc:Axis Title="Y" LabelFormatter="{Binding YFormatter}"></lvc:Axis>
            </lvc:CartesianChart.AxisY>-->
            <lvc:CartesianChart.AxisX>
                <lvc:Axis Title="X" Labels="{Binding Labels}"></lvc:Axis>
            </lvc:CartesianChart.AxisX>
        </lvc:CartesianChart>
    </Grid>

结果程序:enter image description here

c# wpf livecharts
1个回答
1
投票

确定在LiveChart有可能使用其表示X,在图表中Y位置视点。

您需要添加适当的命名空间来使用这些

using LiveCharts.Defaults;

我modfied两件事情在你的功能,首先我改变的定义和对ChartValues初始化由空的typeof ObservablePoint的,所以我们将在以后的动态补这些。你也需要改变Points对象是ObservablePoint的类型

ChartValues<ObservablePoint> series = new ChartValues<ObservablePoint>();

而且还修改了这些系列的填充对象只添加非零:

for (int i = 0; i < 20; i++)
{
    if (arraySeries[i] != 0)
    {
        series.Add(new ObservablePoint(i, arraySeries[i]));
    }
 }

它不会画非零之间的零-Y-点。

© www.soinside.com 2019 - 2024. All rights reserved.