我在Windows窗体中创建了折线图控件。
我将ChartArea,AxisX划分为四个区间,但我想在每个区间应用背面颜色(唯一颜色)。
有人可以帮我吗?
答案 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。您必须设置BackColor
,IntervalOffset
和StripWidth
才能显示。如果您设置StripLine.Interval
,它将按该间隔重复。
答案 1 :(得分:0)
您可以绘制这些区域,但这将始终显示在所有图表元素上方,包括网格和数据点。
所以,正如NLindborn所说,最好的方法是StripLines。
它们 所有元素,并且可以很好地扩展。
请注意,它们的属性位于数据值中,因此您需要知道图表中的值,或者更确切地说是x轴范围。
以下是使用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);
}
请注意,每当更改轴范围时,您都需要调整带状线数据!