Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实时图表WPF需要始终在X轴上显示硬编码的步骤_C#_Wpf_Charts_Livecharts - Fatal编程技术网

C# 实时图表WPF需要始终在X轴上显示硬编码的步骤

C# 实时图表WPF需要始终在X轴上显示硬编码的步骤,c#,wpf,charts,livecharts,C#,Wpf,Charts,Livecharts,我正在尝试做一些我认为应该很容易的事情。 我想显示1到30的值,间隔均匀,因为我运行的数据表示30分钟的数据。有时有500个数据点,但有时有数千个(尽管我可以很容易地确定点的数量) 基本上,我为Xaxis编写的代码是这样的,但它并不是我想要的。代码下面是正在发生的事情的截图,下面是我想要的截图 cartChart.AxisX.Add(new Axis { // TODO fix this to acutally show real time

我正在尝试做一些我认为应该很容易的事情。 我想显示1到30的值,间隔均匀,因为我运行的数据表示30分钟的数据。有时有500个数据点,但有时有数千个(尽管我可以很容易地确定点的数量)

基本上,我为Xaxis编写的代码是这样的,但它并不是我想要的。代码下面是正在发生的事情的截图,下面是我想要的截图

        cartChart.AxisX.Add(new Axis
        {
            // TODO fix this to acutally show real time
            Title = "Minutes",
            //Labels= { "1", "2", "4", "6", "8", "10", "12", "14", "16", "18", "20", "22", "24", "26", "28", "30" },
            Separator = new LiveCharts.Wpf.Separator
            {
                Step = listOfChartValues[i].Count / 30 > 0 ? listOfChartValues[i].Count / 30 : 1, // this is making the assumtion that data arrivals follow uniform distribution
                IsEnabled = false
            }
        });
当前错误图表(尝试为每个数据点添加分钟标签) 只需要30分钟的标签(可能我计算步长的算法需要调整,目前我将数据点总数除以30) 我看了这两篇文章,但这是一个不同的问题


问题在于,实时图表为每个点标签生成,标签的数量必须是点的数量。这个问题有两种解决办法

首先将
ChartValues更改为ChartValues

chart.Series=新的LiveCharts.SeriesCollection()
{
新LineSeries()
{
Title=“一些系列”,
值=新值
{
新观测点(1,5),
新观测点(1.5,7.6),
新观测点(2,21),
新观测点(5,25),
新观测点(10,30),
新观测点(17,30),
新观测点(19.6,30),
新观测点(30,40),
}
}
};
chart.axix=new LiveCharts.Wpf.AxesCollection()
{
新的LiveCharts.Wpf.Axis()
{
Title=“分钟”,
Separator=newlivecharts.Wpf.Separator()
{
阶跃=1.0,
IsEnabled=false
}
}
};
请注意,在观测点中指定X和Y。点之间的距离可能不同(不规则间隔)

第二种解决方案是,您可以按照以下方式定义标签数组,这样您可以使标签数组与点数一样大,但您声明只有30个项目,其余项目为空

chart.AxisX.First().Labels = new List<string>() { "1", "","2","","","3",.... "30" };
chart.axix.First().Labels=newlist(){“1”、“2”、“2”、“3”、“30”};

问题在于,live chart为每个点标签生成,标签的编号必须是点的编号。这个问题有两种解决办法

首先将
ChartValues更改为ChartValues

chart.Series=新的LiveCharts.SeriesCollection()
{
新LineSeries()
{
Title=“一些系列”,
值=新值
{
新观测点(1,5),
新观测点(1.5,7.6),
新观测点(2,21),
新观测点(5,25),
新观测点(10,30),
新观测点(17,30),
新观测点(19.6,30),
新观测点(30,40),
}
}
};
chart.axix=new LiveCharts.Wpf.AxesCollection()
{
新的LiveCharts.Wpf.Axis()
{
Title=“分钟”,
Separator=newlivecharts.Wpf.Separator()
{
阶跃=1.0,
IsEnabled=false
}
}
};
请注意,在观测点中指定X和Y。点之间的距离可能不同(不规则间隔)

第二种解决方案是,您可以按照以下方式定义标签数组,这样您可以使标签数组与点数一样大,但您声明只有30个项目,其余项目为空

chart.AxisX.First().Labels = new List<string>() { "1", "","2","","","3",.... "30" };
chart.axix.First().Labels=newlist(){“1”、“2”、“2”、“3”、“30”};

这是问题的解决方案,但卡斯帕的回答很有教育意义,帮助我找到了这个解决方案。因此,我接受了他的回答,因为他值得表扬

我解决这个问题的方法是:在创建图表时,我将绑定到ListofLabelValues;创建图表后,我将编辑添加到此列表,如代码底部循环所示:

private List<string> listOfLableValues = new List<string>();

//... other WPF code
// loop through all charts and to create them
       SeriesCollection = new SeriesCollection
       {
            new StepLineSeries
            {
                Values = listOfChartValues[i],
                PointGeometry = null,
                // Fill = Brushes.Transparent
             },
       };
//... other Livecharts code

        int lableCount = 1;
        for (int i = 0; i < listOfChartValues.Count; i++)
        {
            listOfChartValues[i].AddRange(de.ListOfListPlottedAmpData[i]);


            if (0 == i % (listOfChartValues[i].Count / 30))
                listOfLableValues.Add(lableCount++.ToString());
            else
                listOfLableValues.Add("");
        }
private List listofLabelValues=new List();
//... 其他WPF代码
//循环浏览所有图表并创建它们
SeriesCollection=新的SeriesCollection
{
新Steplines系列
{
Values=listOfChartValues[i],
PointGeometry=null,
//填充=画笔。透明
},
};
//... 其他Livecharts代码
int-lableCount=1;
for(int i=0;i
这是问题的解决方案,但卡斯帕的回答很有教育意义,帮助我找到了这个解决方案。因此,我接受了他的回答,因为他值得表扬

我解决这个问题的方法是:在创建图表时,我将绑定到ListofLabelValues;创建图表后,我将编辑添加到此列表,如代码底部循环所示:

private List<string> listOfLableValues = new List<string>();

//... other WPF code
// loop through all charts and to create them
       SeriesCollection = new SeriesCollection
       {
            new StepLineSeries
            {
                Values = listOfChartValues[i],
                PointGeometry = null,
                // Fill = Brushes.Transparent
             },
       };
//... other Livecharts code

        int lableCount = 1;
        for (int i = 0; i < listOfChartValues.Count; i++)
        {
            listOfChartValues[i].AddRange(de.ListOfListPlottedAmpData[i]);


            if (0 == i % (listOfChartValues[i].Count / 30))
                listOfLableValues.Add(lableCount++.ToString());
            else
                listOfLableValues.Add("");
        }
private List listofLabelValues=new List();
//... 其他WPF代码
//循环浏览所有图表并创建它们
SeriesCollection=新的SeriesCollection
{
新Steplines系列
{
Values=listOfChartValues[i],
PointGeometry=null,
//填充=画笔。透明
},
};
//... 其他Livecharts代码
int-lableCount=1;
for(int i=0;i