在x轴的不同间隔上使用不同颜色的折线图填写相同的系列?

时间:2018-04-11 12:44:54

标签: c# winforms charts microsoft-chart-controls

我在Windows窗体中创建了折线图控件。

我将ChartArea,AxisX划分为四个区间,但我想在每个区间应用背面颜色(唯一颜色)。

有人可以帮我吗?

2 个答案:

答案 0 :(得分:1)

  

AxisX分为四个区间,但我想应用背面颜色(唯一颜色)

这些间隔是使用彩色StripLine(s)创建的。通过代码:

var stripLine = new System.Windows.Forms.DataVisualization.Charting.StripLine()
{
    BackColor = Color.Blue,
    IntervalOffset = 4, // This is where the stripline starts
    StripWidth = 2 // And this is how long the interval is
};

chart1.ChartAreas[0].AxisX.StripLines.Add(stripLine);

您需要为要显示的时间间隔添加数据点。

或者,StripLines也可以从VS设计模式中添加(属性) - > ChartAreas - >选择ChartArea - >轴 - >选择您希望它显示的轴 - > StripLines,然后添加StripLine。您必须设置BackColorIntervalOffsetStripWidth才能显示。如果您设置StripLine.Interval,它将按该间隔重复。

答案 1 :(得分:0)

您可以绘制这些区域,但这将始终显示在所有图表元素上方,包括网格和数据点。

所以,正如NLindborn所说,最好的方法是StripLines

它们 所有元素,并且可以很好地扩展。

请注意,它们的属性位于数据中,因此您需要知道图表中的值,或者更确切地说是x轴范围。

enter image description here

以下是使用StripLines的完整代码示例:

// set up the chart:
ChartArea ca = chart.ChartAreas[0];
chart.Series.Clear();
for (int i = 0; i < 5; i++)
{
    Series s = chart.Series.Add("Series" + (i+1));
    s.ChartType = SeriesChartType.Line;
    s.BorderWidth = 2;
}

// add a few test data
for (int i = 0; i <= 360; i++)
{
    chart.Series[0].Points.AddXY(i, Math.Sin(i * Math.PI / 180f));
    chart.Series[1].Points.AddXY(i, Math.Cos(i * Math.PI / 180f));
    chart.Series[2].Points.AddXY(i, Math.Sin(i * Math.PI / 90f));
    chart.Series[3].Points.AddXY(i, Math.Cos(i * Math.PI / 90f));
    chart.Series[4].Points.AddXY(i, Math.Sin(i * Math.PI / 30f));
}

// set up the chart area:  
Axis ax = ca.AxisX;
ax.Minimum = 0;
ax.Maximum = 360;
ax.Interval = 30;

// a few semi-transparent colors
List<Color> colors = new List<Color>()  { Color.FromArgb(64, Color.LightBlue),  
  Color.FromArgb(64, Color.LightSalmon),  Color.FromArgb(64, Color.LightSeaGreen),  
  Color.FromArgb(64, Color.LightGoldenrodYellow)};

现在我们已准备好创建StripLines:

// this is the width of the chart in values:
double hrange = ax.Maximum - ax.Minimum;

// now we create and add four striplines:
for (int i = 0; i < 4; i++)
{
    StripLine sl = new StripLine();
    sl.Interval = hrange;                   // no less than the range, so it won't repeat
    sl.StripWidth = hrange / 4f;            // width
    sl.IntervalOffset = sl.StripWidth * i;  // x-position
    sl.BackColor = colors[i];
    ax.StripLines.Add(sl);
}

请注意,每当更改轴范围时,您都需要调整带状线数据!