C#winform中有chart控件,功能十分强大可以画出多种图像类型,感兴趣的同志可以去搜索一下,我这里只用了默认的线状图,使用定时器画出数据并将100个之后的数据每个左移达到移动的效果
直接上代码
pualic int data;//画点的Y轴数据(实际应该为传入数据实时变化)
private int[] Xvalue = new int[100];//定义加入画图对象的X轴数组
private int[] Yvalue = new int[100];//定义加入画图对象的Y轴数组
int ass_data1 = 0;//赋值计数
int lim_data1 = 0;//对Y轴向向左移计数
private void XValueInit()//初始化X轴的值
{
int i = 0;
for (i = 0; i < 100; i++)
{
Xvalue[i] = i;
}
}
private void timer1(object sender, EventArgs e)//timer1定时器画图操作
{
chart1.Series.Clear();//每次清空右上角标志
//chart1.ChartAreas.Clear();
Series MotorCurrent = new Series("data1");//实例化Series类(chart控件右上角数据)
int i;
//Y轴向低位移动
if (lim_data1 > 99)//当100个数据后数据开始左移
{
for (i = 0; i < 100; i++)//每次增加X轴的值
{
Xvalue[i] += 1;
}
Yvalue[99] = data;//每次将数据给数组最后一个元素
for (i = 1; i < 100; i++)//将所有数据左移一位达到Y轴左移效果
{
Yvalue[i - 1] = Yvalue[i];
}
}
else//正常赋值
{
lim_data1++;
Yvalue[ass_data1] = data;
}
for (i = 0; i < 100; i++)//加入值开始画图
{
MotorCurrent.Points.AddXY(Xvalue[i], Yvalue[i]);//加入X轴、Y轴的值 开始画图
}
// 更改格线颜色
chart1.ChartAreas[0].AxisX.MajorGrid.LineColor = Color.Black;
chart1.ChartAreas[0].AxisY.MajorGrid.LineColor = Color.Black;
MotorCurrent.Color = Color.Red; //线条颜色 红色
MotorCurrent.BorderColor = Color.Yellow; //标记框颜色 黄色
MotorCurrent.BorderDashStyle = ChartDashStyle.Solid; //连线为虚线
MotorCurrent.MarkerStyle = MarkerStyle.Circle; // 标记点形状
MotorCurrent.MarkerSize = 3; // 标记点形状
MotorCurrent.MarkerColor = Color.Red; //标记点颜色 红色
chart1.Series.Add(MotorCurrent);
chart1.Series[0].ChartType = SeriesChartType.Spline; //图表类型为曲线
chart1.Series[0].BorderWidth = 2; //线条加粗
}
private void button1_Click(object sender, EventArgs e)//启动定时器开始画图
{
XValueInit();//初始化X轴的值
timer1.Interval = 1000;画点间隔
timer1.Enabled = true;
timer1.Start();启动定时器
}
private void button2_Click(object sender, EventArgs e)//停止定时器停止画图
{
timer1.Enabled = false;
timer1.Stop();关闭定时器
}
这里只是利用定时器和数组的变化简单地实现了左移的效果,如果有更好的方法还请大家悉心指教