在某些情况下需要将大于某数据阈值的部分设为不同的背景色,如将Y轴分为三个不同背景色的区间,而chart自带的控件似乎并不存在该设置,需要使用其他辅助设置,此处采用绘制线条的方法,设置一定的线条宽度,达到不同背景色的视觉效果,代码如下:
/// <summary>
/// 在Y轴上画一条平行于X轴的线
/// </summary>
/// <param name="linePosition">线的位置</param>
/// <param name="chart">所在的图表</param>
/// <param name="color">颜色</param>
/// <param name="lineWidth">线的宽度</param>
public void drawLineWithAxisY(double linePosition, Chart chart, Color color, double lineWidth)
{
StripLine stripLine = new StripLine();
// striplineSP.Text = string.Format(linePosition.ToString()); // 展示文本
// striplineSP.TextAlignment = StringAlignment.Far;// 文本对齐方式
stripLine.Interval = 0; // 设置多长间隔继续绘制,如为0则只绘制一条
stripLine.IntervalOffset = linePosition; // 线的起始位置
stripLine.StripWidth = lineWidth; // 线的宽度
stripLine.BackColor = color; // 线的颜色
stripLine.BorderDashStyle = ChartDashStyle.DashDot; // 线的形状
chart.ChartAreas[0].AxisY.StripLines.Add(stripLine);
}
函数也可用于绘制分割线,如在Y轴某刻度绘制一条平行于X轴的分割线,函数中注释的两行可对绘制的线条加以文字说明。对于绘制平行于Y轴的分割线代码如下:
/// <summary>
/// 在X轴上画一条平行于Y轴的线
/// </summary>
/// <param name="linePosition">线的位置</param>
/// <param name="chart">所在的图表</param>
/// <param name="color">颜色</param>
/// <param name="lineWidth">线宽</param>
private void drawLineWithAxisX(double linePosition, Chart chart, Color color, double lineWidth)
{
StripLine stripLine = new StripLine();
stripLine.Interval = 0;
stripLine.IntervalOffset = linePosition;
stripLine.StripWidth = lineWidth;
stripLine.BackColor = color;
stripLine.BorderDashStyle = ChartDashStyle.DashDot;
chart.ChartAreas[0].AxisX.StripLines.Add(stripLine);
}
若需要填充整个图表,代码如下:
chart1.ChartAreas[0].BackColor = Color.Red; // 设置背景为红色
函数使用及其结果:
drawLineWithAxisY(8, chart1, Color.Red, 2); // 从刻度8开始,宽度为2,即8~10区间内背景为红色
drawLineWithAxisY(6, chart1, Color.Yellow, 2); // 从刻度6开始,宽度为2,即6~8区间内背景为黄色
drawLineWithAxisX(2, chart1, Color.Red, 0.01); // 在X轴上刻度2位置绘制宽度为0.01的红色分割线
效果图如下:
若有不对的地方或有更好的方法欢迎大佬指教!!!