创建图表系列、添加数据和设置可见性

Create chart series, add data and set visibility

我正在尝试创建一组图表系列,将数据添加到系列中,然后通过使它们可见来显示系列中的一些。数据发生变化,用户可以 select 查看哪个系列。我认为这种方法比用 chart.Series.Clear(); 清除所有系列然后用相同的方法重新创建系列要好。

例如拼车中具有随机里程的汽车列表,然后 select 显示哪些汽车。

下面的代码不起作用(我已在其中注释)。该系列不是 public,我认为它们需要像 SeriesCollection 一样添加到 public 集合中,但我不确定如何添加。

感谢您的帮助。

// create new chart series and add to a chartarea
        ChartArea TestChartArea = new ChartArea();
        public void CreateChartSeries()
        {
            List<string> lstCars = new List<string> { "Mazda", "Tesla", "Honda", "Jaguar", "Ford", "Toyota" };

            foreach (string Car in lstCars)
            {
                // car series created correctly?
                var Srs = new Series(Car); 
                Srs.ChartArea = TestChart.Name;
                Srs.YAxisType = AxisType.Primary;
                Srs.Color = Color.Red;
                Srs.ChartType = SeriesChartType.Line;
                TestChart.Series.Add(Srs);
            }
        }

        // add data to chart series
        public void SeriesData()
        {
            List<string> lstCars = new List<string> { "Mazda", "Tesla", "Honda", "Jaguar", "Ford", "Toyota" };
            int[] Xseries = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
            int[] Milage = new int[10];

            Random Random = new Random();

            foreach (string Car in lstCars)
            {
                for (int M = 0; M < 10; M++)
                    Milage[M] = Random.Next(150, 15000);

                // not sure how to call and add data to each series
                Srs.Points.DataBindXY(Xseries, Milage);  
            }
        }

        // plot series - some visible
        public void PlotCreatedSeries()
        {
            // not sure how to refer to each series
            Mazda.Enabled = true;  
            Tesla.Enabled = false;
            Honda.Enabled = true;
            Jaguar.Enabled = false;
            Ford.Enabled = true;
            Toyota.Enabled = false;
        }

您用来创建 Series 的名称 'Srs' 仅在范围内,即可在循环内使用。在循环结束时,您将新创建的 Series 添加到您的 Chart

 TestChart.Series.Add(Srs);

Series属性一个publicSeriesCollection。这有点令人困惑,因为 单数类型 名称和 复数 属性 名称在这种情况下是相同的,与,比如 Legend(s)ChartArea(s)..

从现在开始,您可以通过其索引访问它..

 Series s = TestChart.Series[0]  // the series you have added first

..或者,更具可读性和更稳定,通过其 Name 属性:

 Series s = TestChart.Series["Mazda"]   // the same series

 TestChart.Series["Mazda"].Enabled = true;  

注意'name'也是一个刁钻的词:

当你声明一个变量时,你给它一个'name'。 Series s = new Series();

但是很多对象还有一个叫做属性Name:s.Name = "Volvo";

前者必须是唯一的,而后者只是一个字符串;也要保持它的独特性,但系统不会保护你。

前者永远不会改变,但是,如您所见,可以超出范围;后者只是一个字符串,您可以更改它。

请注意,变量本身不会超出范围,只要它仍然在某处被引用,这里作为 SeriesiesCollection Series..

的一个元素

是否要添加 DataPoints 绑定 直接由您决定。

前者有 many binding 个选项。

对于后者,您可以使用 Chart.Points methods..:[=​​37=]

  • Add(DataPoint)
  • AddY(YValue)
  • AddXY(XValues, YValue(s))

请注意,有时,尤其是实时图表,使用 InsertXXX 方法之一 插入 一个 DataPoint 是有意义的!

一定要在 MSDN 中查找!中间版本仅在 x 值是非数字或没有实际意义(例如名称)时才有意义。 - 请注意,将有意义的 x 值添加为 numbers (或 DateTimes)对于将它们用于进一步的目标至关重要,例如工具提示、缩放或显示范围等。

不这样做可能是新手最常犯的错误。 Chart看起来还可以,但是里面的数据坏了,读丢了。