繁体   English   中英

C# 更改图表中的颜色

[英]C# change color in chart

我在 C# 中有一个图表,我将值绑定到它。 我有两个不同的数组和值并将它们连接到一个图表。 现在我想以不同的颜色显示图表的一部分(带有第一个数组中的值)。 这该怎么做? 绘制两个图表会导致错误,所以我想这样做。 这是代码的一部分:

String[] x_axis = _temp_date1.Concat(_date).ToArray();
Double[] y_axis = _temp_data.Concat(_value).ToArray();

chart1.Series["Chart"].Points.DataBindXY(x_axis, y_axis);
chart1.Series["Chart"].ChartType = SeriesChartType.Spline;

chart1.Series["Chart"].Points[0].Color = System.Drawing.Color.Red;
chart1.Series["Chart"].Points[1].Color = System.Drawing.Color.Green;

带有颜色的部分不起作用。

所以假设我有两个用于 x 值的数组(date1 和 date2)和两个用于 y 值的数组(data1 和 data2),现在我合并 date1 和 date2 数组并合并 data1 和 data2 数组。 我将它们绑定到我的图表。 现在我想以不同的颜色显示图形的一部分,其中我的 date1/data1 数组的值来自。 由于数据是从 csv 文件中读取的,因此数组长度可能会发生变化。

下面是一个例子,同时显示:两个独立的ChartAreas在同一个Chart和两个Series在同一个ChartArea 选择你想要的:

// cleanup before we start 
chart1.ChartAreas.Clear();
chart1.Series.Clear();
// two areas one on top the other below
chart1.ChartAreas.Add("area1");
chart1.ChartAreas.Add("area2");
// three series
chart1.Series.Add("series1");
chart1.Series.Add("series2");
chart1.Series.Add("series3");
// we assign  two series to the bottom area
chart1.Series["series1"].ChartArea = "area1";
chart1.Series["series2"].ChartArea = "area2";
chart1.Series["series3"].ChartArea = "area2";
// all series are of type spline
chart1.Series["series1"].ChartType = SeriesChartType.Spline;
chart1.Series["series2"].ChartType = SeriesChartType.Spline;
chart1.Series["series3"].ChartType = SeriesChartType.Spline;
// each has a spearate color
chart1.Series["series1"].Color = Color.Red;
chart1.Series["series2"].Color = Color.Blue;
chart1.Series["series3"].Color = Color.Green;
// now we add a few points
chart1.Series["series1"].Points.AddXY(1, 100);
chart1.Series["series1"].Points.AddXY(2, 400);
chart1.Series["series1"].Points.AddXY(3, 200);
chart1.Series["series1"].Points.AddXY(4, 300);

chart1.Series["series2"].Points.AddXY(1, 120);
chart1.Series["series2"].Points.AddXY(2, 420);
chart1.Series["series2"].Points.AddXY(3, 290);
chart1.Series["series2"].Points.AddXY(4, 390);

chart1.Series["series3"].Points.AddXY(1, 220);
chart1.Series["series3"].Points.AddXY(2, 320);
chart1.Series["series3"].Points.AddXY(3, 690);
chart1.Series["series3"].Points.AddXY(4, 190);

// we can even paint a part of the spline curve in a different color
// to be precise: the part up to the point:
chart1.Series["series3"].Points[1].Color = Color.HotPink;
chart1.Series["series3"].Points[2].Color = Color.Orange;

结果如下:

在此处输入图片说明

现在,如果您只是想在达到一定数量的点后更改点的颜色,您可以这样做:

int start = x_axis.Length; 
for (int i = start ; i < chart1.Series[0].Points.Count; i++)
    chart1.Series[0].Points[i].Color = Color.Green;

请注意,您需要设置与默认图表颜色不同的每个点的颜色!

在您的charts控件属性中:

Series --> Member[n] --> Color --> Red ,依此类推

或者

chart1.Series["Chart"].Color = Color.Red

编辑(根据评论中的讨论,您可以尝试类似的操作):

假设我们有一个doubles数组,我们想用不同的颜色绘制它的每个部分:

Double[] data; // my data
int i=0;

chart1.Series["Chart"].Points[0].Clear(); // initialize the chart
chart1.Series["Chart"].Color = Color.Red; // initial color

for(i=0; i < data.Length; i++)
{
  if(i >= data.Length/2)
     chart1.Series["Chart"].Color = Color.Green; // use other color after certain data #

  chart1.Series["Chart"].Points.AddXY(i, data[i]);
}
            txtTableSQL.BackColor = Color.FromArgb(255, 255, 255);
            txtTableSQL.ForeColor = Color.FromArgb(15, 15, 15);

            txtComandoSQL.BackColor = Color.FromArgb(255, 255, 255);
            txtComandoSQL.ForeColor = Color.FromArgb(15, 15, 15);

            txtReport.BackColor = Color.FromArgb(255, 255, 255);
            txtReport.ForeColor = Color.FromArgb(15, 15, 15);

            chartSeries.BackColor = Color.FromArgb(255, 255, 255);
            chartSeries.ForeColor = Color.FromArgb(15, 15, 15);

            chartSeries.ChartAreas[0].BackColor = Color.FromArgb(255, 255, 255);
            chartSeries.Series[0].Color = Color.Gray;
            chartSeries.Series[0].LabelForeColor = Color.Black;
            chartSeries.Series[0].BorderColor = Color.Black;
            chartSeries.Series[0].MarkerColor = Color.Black;


            chartSeries.ChartAreas[0].Axes[0].LineColor = Color.Black;
            chartSeries.ChartAreas[0].Axes[1].LineColor = Color.Black;
            chartSeries.ChartAreas[0].Axes[2].LineColor = Color.Black;
            chartSeries.ChartAreas[0].Axes[3].LineColor = Color.Black;

            chartSeries.ChartAreas[0].AxisX.LineColor = Color.Black;
            chartSeries.ChartAreas[0].AxisY.LineColor = Color.Black;
            chartSeries.ChartAreas[0].AxisX2.LineColor = Color.Black;
            chartSeries.ChartAreas[0].AxisY2.LineColor = Color.Black;
            chartSeries.ChartAreas[0].AxisX.MinorGrid.LineColor = Color.Black;
            chartSeries.ChartAreas[0].AxisY.MinorGrid.LineColor = Color.Black;
            chartSeries.ChartAreas[0].AxisX.MajorGrid.LineColor = Color.Black;
            chartSeries.ChartAreas[0].AxisY.MajorGrid.LineColor = Color.Black;
            chartSeries.ChartAreas[0].AxisY.LabelStyle.ForeColor = Color.Black;
            chartSeries.ChartAreas[0].AxisX.LabelStyle.ForeColor = Color.Black;
            chartSeries.ChartAreas[0].AxisX.TitleForeColor = Color.Black;

            chartSeries.Legends[0].BackColor = Color.White;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM