本示例展示了如何在WinForms应用程序中使用ScottPlot 5.0创建一个带有十字光标的交互式图表。我们将绘制一个正弦波,并添加一个跟随鼠标移动的十字光标。
首先,确保你已经安装了必要的NuGet包:
以下是完整的C#代码,包含详细注释:
C#public partial class Form1 : Form
{
private FormsPlot formsPlot1;
private Crosshair crosshair;
private ScottPlot.Plottables.Text text;
public Form1()
{
InitializeComponent();
SetupPlot();
}
private void SetupPlot()
{
// 创建 FormsPlot 控件
formsPlot1 = new FormsPlot();
formsPlot1.Plot.Font.Set("SimSun");
formsPlot1.Dock = DockStyle.Fill;
this.Controls.Add(formsPlot1);
// 生成示例数据(正弦波)
int pointCount = 1000;
double[] dataX = new double[pointCount];
double[] dataY = new double[pointCount];
for (int i = 0; i < pointCount; i++)
{
dataX[i] = i;
dataY[i] = Math.Sin(i * 0.05);
}
// 添加散点图
var scatter = formsPlot1.Plot.Add.Scatter(dataX, dataY);
scatter.Color = Colors.Blue;
scatter.MarkerSize = 0; // 不显示点标记,只显示线
// 设置轴标签
formsPlot1.Plot.XLabel("X轴");
formsPlot1.Plot.YLabel("Y轴");
formsPlot1.Plot.Title("带十字光标的正弦波图");
// 创建十字光标
crosshair = formsPlot1.Plot.Add.Crosshair(0, 0);
crosshair.MarkerColor = Colors.Red;
crosshair.LineWidth = 1;
crosshair.LinePattern = LinePattern.Dashed;
// 创建一个文本注释来显示光标位置
text = formsPlot1.Plot.Add.Text("", 10, 10);
text.Alignment = Alignment.UpperLeft;
text.FontSize = 14;
// 添加鼠标移动事件处理器
formsPlot1.MouseMove += FormsPlot1_MouseMove;
}
private void FormsPlot1_MouseMove(object sender, MouseEventArgs e)
{
// 获取鼠标在图表坐标系中的位置
var d = formsPlot1.Plot.GetCoordinates(e.X, e.Y);
// 更新十字光标位置
crosshair.X = d.X;
crosshair.Y = d.Y;
// 更新文本注释
text.LabelText = $"X: {d.X:F2}, Y: {d.Y:F2}";
// 请求重绘
formsPlot1.Refresh();
}
}
crosshair = formsPlot1.Plot.Add.Crosshair(0, 0);
:创建一个十字光标,初始位置在 (0, 0)。
crosshair.MarkerColor = Colors.Red;
:设置十字光标的颜色为红色。crosshair.LineWidth = 1;
:设置线宽。crosshair.LinePattern = LinePattern.Dashed;
:设置线型为虚线。text = formsPlot1.Plot.Add.Text("", 10, 10);
:创建一个文本注释,用于显示十字光标的位置。
text.Alignment = Alignment.UpperLeft;
:设置文本对齐方式为左上。text.FontSize = 14;
:设置文本字体大小。这个示例展示了如何创建一个基本的交互式图表,包括十字光标和坐标显示。你可以根据需要进一步自定义和扩展这个示例。
本文作者:rick
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!