C#--winform--chart控件曲线和悬停显示

效果如下:

 

关键代码:

【1】 窗体加载的时候

1
InitCahrt(this.chart_trace,"Torque/Angle");

  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/// <summary>
/// 初始化chart图标,设置一些样式
/// </summary>
/// <param name="chart"></param>
/// <param name="chartName"></param>
private void InitCahrt(Chart chart, string chartName)
{
    chart.Series.Clear();
    ChartHelper.AddSeries(chart, chartName, SeriesChartType.Spline, Color.FromArgb(100, 46, 199, 201), Color.Red, false);
    ChartHelper.SetTitle(chart, "拧紧曲线图", new Font("微软雅黑", 10), Docking.Bottom, Color.Black);
    ChartHelper.SetStyle(chart, Color.Transparent, Color.Black);
    ChartHelper.SetLegend(chart, Docking.Top, StringAlignment.Center, Color.Transparent, Color.Black);
    ChartHelper.SetXY(chart, "角度.Deg", "扭矩.Nm", StringAlignment.Far, Color.Black, Color.Black, AxisArrowStyle.None, 50, 0.2);
    ChartHelper.SetMajorGrid(chart,true,true, Color.Gray, 100, 1);
}

  

【2】绘制曲线和网格线,间距等设置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
private void ITool_TracePointsEvent(List<double> arg1, List<double> arg2)
{
    this.BeginInvoke(new Action(() =>
    {
         
        double xMin = arg1.Min();
        double xMax = arg1.Max();             
        //X间隔
        double xInterval = Math.Round(xMax / 15,1) ;
        chart_trace.ChartAreas[0].AxisX.Interval = xInterval;
        //X轴网格的间距
        chart_trace.ChartAreas[0].AxisX.MajorGrid.Interval = xInterval*2;
        //X轴最小和最大
        chart_trace.ChartAreas[0].AxisX.Minimum = xMin;
        chart_trace.ChartAreas[0].AxisX.Maximum = xMax+ xInterval;
 
        //网格线设置为虚线
        chart_trace.ChartAreas[0].AxisX.MajorGrid.LineDashStyle = ChartDashStyle.Dash;
        chart_trace.ChartAreas[0].AxisY.MajorGrid.LineDashStyle = ChartDashStyle.Dash;
         
        double yMin = arg2.Min();
        double yMax = arg2.Max();
        //Y间隔
        double yInterval = Math.Round(yMax / 15, 1);
        chart_trace.ChartAreas[0].AxisY.Interval = yInterval;
        //Y轴网格的间距
        chart_trace.ChartAreas[0].AxisY.MajorGrid.Interval = yInterval * 2;
        //Y轴最小和最大
        chart_trace.ChartAreas[0].AxisY.Minimum = yMin;
        chart_trace.ChartAreas[0].AxisY.Maximum = yMax+yInterval;
 
        this.chart_trace.Series[0].Points.DataBindXY(arg1,arg2);
    }));
}

  

【3】鼠标悬停显示

1
2
3
4
5
6
7
8
9
10
11
12
13
//鼠标悬停显示曲线点的值
System.Windows.Forms.DataVisualization.Charting.ToolTipEventArgs toolTipEventArgs;
private void chart_trace_GetToolTipText(object sender, ToolTipEventArgs e)
{
    toolTipEventArgs = e;
 
    if (e.HitTestResult.ChartElementType == System.Windows.Forms.DataVisualization.Charting.ChartElementType.DataPoint)
    {
        int i = e.HitTestResult.PointIndex;
        System.Windows.Forms.DataVisualization.Charting.DataPoint dp = e.HitTestResult.Series.Points[i];
        e.Text = string.Format("A:{0},T:{1}", dp.XValue.ToString(), dp.YValues[0]);
    }
}

  

posted @   包子789654  阅读(2833)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
历史上的今天:
2020-04-08 C# --SqlServer--调用SQLServer存储过程
点击右上角即可分享
微信分享提示