在Mschart中显示均匀分布的数据点

时间:2014-02-28 13:04:01

标签: c# winforms visual-studio mschart

我看过“类似”的问题,但实际上找不到任何适用的东西,令人惊讶。我使用导入的转换数据计算了我想在Mschart折线图上创建的数据点数。使用这个结果,我将它除以另一个变化的数字,这是我想要在每个数据点之间的空间。 124是常数。

300(变化)/ 124(X轴)= 2.419354838709677(这是我想要的每个点之间的空间

我想过像这样创建一个for循环

for (double i = 1; i < samples_hd; i++)
{
    // distribute data points evenly here
}

一个文件将被读入图表,到目前为止我手动添加了数据点,因为我根本不确定如何添加它们如上^。

var sn = new System.Windows.Forms.DataVisualization.Charting.Series(English.Sam_Num);
sn.ChartType = SeriesChartType.Line;
sn.Points.Add(new DataPoint(9, 30));
sn.Points.Add(new DataPoint(150, 28));
sn.XAxisType = AxisType.Primary;
Chart_Line.Series.Add(sn);

Chart_Line.ChartAreas[0].AxisX.Minimum = 0;
Chart_Line.ChartAreas[0].AxisX.Maximum = 124;
Chart_Line.ChartAreas[0].AxisX.Interval = 15;
Chart_Line.ChartAreas[0].AxisX.MajorGrid.Enabled = false;

1 个答案:

答案 0 :(得分:0)

花了这么长时间让它工作,但它确实有效:)我的图表实际上有3个系列,但是对于这个例子,我只会展示2个系列。

private void Main(byte[] rec_arr)
{
    var series1 = new Series("series1");
    series1 .ChartType = SeriesChartType.Line;
    series1 .MarkerStyle = MarkerStyle.Circle;
    series1 .MarkerSize = 3;
    series1 .YAxisType = AxisType.Primary;
    series1 .Color = Color.Navy;

    var series2 = new Series("series2");
    series2 .ChartType = SeriesChartType.Line;
    series2 .MarkerStyle = MarkerStyle.Triangle;
    series2 .MarkerSize = 3;
    series2 .YAxisType = AxisType.Primary;
    series2 .Color = Color.Crimson;

    foreach (var series in Chart1.Series)
    {
        series.Points.Clear();
    }

    double interval1 = 0;
    double interval2 = File_Details.time / (double)124;
    int Offset2 = 502;
    int Offset3 = 750;
    float data1, data2;

    if (File_Details.time == 0)
    {
        Label_Error_Graph.Visible = true;
        Chart1.ChartAreas[0].AxisX.Maximum = 0;
        Chart1.ChartAreas[0].AxisX.Minimum = 0;
        Chart1.Series[0].Points.Add(0);
        Chart1.Series[1].Points.Add(0);
    }
    else
    {
        Label_Error_Graph.Visible = false;
    }

    for (interval1 = 0; interval1 < File_Details.time; interval1 += interval2)
    {
        data1 = DecodeSingle(rec_arr, Offset3);
        if (Chart1.Series.IndexOf("series1") == -1)
        {
            Chart1.Series.Add(series1);
        }
        Offset3 = Offset3 + 2;

        if (data1 < 300)
        {
            Chart1.Series[0].Points.AddXY(interval1, supply);
        }
        else
        {
            Chart1.Series[0].Points.AddXY(interval1, 300);
        }
    }

    for (interval1 = 0; interval1 < File_Details.time; interval1 += interval2)
    {
        data2 = DecodeSingle(rec_arr, Offset2) / (float)100;
        if (Chart1.Series.IndexOf("series2") == -1)
        {
            Chart1.Series.Add(series2);
        }
        Offset2 = Offset2 + 2;

        if (data2 < 150)
        {
            Chart1.Series[1].Points.AddXY(interval1, data2);
        }
        else
        {
            Chart1.Series[1].Points.AddXY(interval1, 150);
        }
    }
}