C# winform图表控件scottplot快速入门设置十字标尺显示刻度及数值

C# winform图表控件scottplot快速入门设置十字标尺显示刻度及数值

C# winform图表控件scottplot快速入门设置十字标尺显示刻度及数值_第1张图片
Hello大家好我是萌主,在C#项目开发中使用图表控件,我们希望随着鼠标的移动动态显示鼠标位置相应的数值,所以本期课程将带介绍Scottplot图表控件如何来实现这个功能。
C# winform图表控件scottplot快速入门设置十字标尺显示刻度及数值_第2张图片

本期课程的要达到的目的:

1、在scottplot中实现通过十字光标线显示当前鼠标位置对应的XY轴对应的数值

环境:

Visual Studio 2019 .net5.0

实现:

添加1个复选框,4个文本显示label

程序源码:

using ScottPlot;

using ScottPlot.Plottable;

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using System.Windows.Forms;

namespace Scottplot_01

{

public partial class Form1 : Form

{

private readonly Crosshair Crosshair;

public Form1()

{

InitializeComponent();

var plt = formsPlot1.Plot;

// sample data

//X轴数据

double[] xs = DataGen.Consecutive(51);

//Y轴数据

double[] sin = DataGen.Sin(51);

double[] cos = DataGen.Cos(51);

// 2条曲线

plt.AddScatter(xs, sin);

plt.AddScatter(xs, cos);

// plot参数设置

plt.Title("标题");

plt.XLabel("X轴");

plt.YLabel("Y轴");

//添加十字光标线

this.Crosshair = this.formsPlot1.Plot.AddCrosshair(0.0, 0.0);



//缩放进行配置

formsPlot1.Refresh();

}



private void cbZoomable_CheckedChanged(object sender, EventArgs e)

{

//鼠标右键拖拽缩放

this.formsPlot1.Configuration.RightClickDragZoom = this.cbZoomable.Checked;

//鼠标管轮缩放

this.formsPlot1.Configuration.ScrollWheelZoom = this.cbZoomable.Checked;

}

private void cbLockHorizontal_CheckedChanged(object sender, EventArgs e)

{

//锁定水平缩放

this.formsPlot1.Configuration.LockHorizontalAxis = this.cbLockHorizontal.Checked;

}

private void cbLockVertical_CheckedChanged(object sender, EventArgs e)

{

//锁定垂直缩放

this.formsPlot1.Configuration.LockVerticalAxis = this.cbLockVertical.Checked;

}

//鼠标移动时处理十字光标

private void formsPlot1_MouseMove(object sender, MouseEventArgs e)

{

if (CrosshaircheckBox.Checked) {

ValueTuple<double, double> mouseCoordinates = this.formsPlot1.GetMouseCoordinates();

double coordinateX = mouseCoordinates.Item1;

double coordinateY = mouseCoordinates.Item2;

this.XPixelLabel.Text = string.Format("{0:0.000}", e.X);

this.YPixelLabel.Text = string.Format("{0:0.000}", e.Y);

this.XCoordinateLabel.Text = string.Format("{0:0.00000000}", coordinateX);

this.YCoordinateLabel.Text = string.Format("{0:0.00000000}", coordinateY);

this.Crosshair.X = coordinateX;

this.Crosshair.Y = coordinateY;

}



//this.XPixelLabel.Location = new System.Drawing.Point(e.X, e.Y);

//如果设置十字光标线为不显示数值就不显示了

if (!CrosshaircheckBox.Checked)

{

this.XPixelLabel.Text = "";

this.YPixelLabel.Text = "";

this.XCoordinateLabel.Text = "";

this.YCoordinateLabel.Text = "";

}

this.formsPlot1.Refresh(false, false);

}

//十字功能复选框改变执行任务

private void CrosshaircheckBox_CheckedChanged(object sender, EventArgs e)

{



if (CrosshaircheckBox.Checked) {

this.Crosshair.VerticalLine.IsVisible = true;

this.Crosshair.HorizontalLine.IsVisible = true;

}

else{

this.Crosshair.VerticalLine.IsVisible = false;

this.Crosshair.HorizontalLine.IsVisible = false;

}

this.formsPlot1.Refresh(false, false);

}

//鼠标进入图表中执行的任务

private void formsPlot1_MouseEnter(object sender, EventArgs e)

{

if (CrosshaircheckBox.Checked)

{

this.Crosshair.VerticalLine.IsVisible = true;

this.Crosshair.HorizontalLine.IsVisible = true;

}

else

{

this.Crosshair.VerticalLine.IsVisible = false;

this.Crosshair.HorizontalLine.IsVisible = false;

}



this.formsPlot1.Refresh(false, false);

}

//鼠标离开图表执行的任务

private void formsPlot1_MouseLeave(object sender, EventArgs e)

{

this.Crosshair.VerticalLine.IsVisible = false;

this.Crosshair.HorizontalLine.IsVisible = false;

this.formsPlot1.Refresh(false, false);

}

}

}

你可能感兴趣的:(c#,.net,ui)