我在尝试创建 x 轴移动的 C# 图表时遇到问题。
我想要的是添加一个新的 Y 值,并使 x 轴向左移动,删除第一个数据点。
我可以在右边添加点就好了,
DataPoint dp2 = new DataPoint(x, rnd.Next(100));
chart1.Series[0].Points.Add(dp2);
x++;
我可以很好地删除左侧的第一个点
chart1.Series[0].Points.RemoveAt(0);
但如果我尝试同时执行这两项操作,它不起作用,它会在图表的开头添加空格,并从右侧消失,而不是留在图表区域内?
DataPoint dp2 = new DataPoint(x, rnd.Next(100));
chart1.Series[0].Points.RemoveAt(0);
chart1.Series[0].Points.Add(dp2);
x++;
我的问题的完整演示:-(制作一个图表,3个按钮和3个计时器,将我的代码粘贴到form1.cs的顶部,然后将按钮(鼠标单击)和计时器(滴答1000ms)事件连接到我的代码事件处理程序。 )
using System;
using System.Windows.Forms;
using System.Windows.Forms.DataVisualization.Charting;
namespace test_chart2
{
public partial class Form1 : Form
{
double x = 16;
Random rnd = new Random();
public Form1()
{
InitializeComponent();
DrawToGraph1();
}
private void DrawToGraph1()
{
chart1.Series[0].Points.Clear();
for (int g = 5; g <= 15; g++)
{
DataPoint dp = new DataPoint(g, rnd.Next(100));
chart1.Series[0].Points.Add(dp);
}
}
private void timer1_Tick(object sender, EventArgs e)
{
DataPoint dp2 = new DataPoint(x, rnd.Next(100));
chart1.Series[0].Points.Add(dp2);
x++;
}
private void timer2_Tick(object sender, EventArgs e)
{
chart1.Series[0].Points.RemoveAt(0);
}
private void timer3_Tick(object sender, EventArgs e)
{
DataPoint dp2 = new DataPoint(x, rnd.Next(100));
chart1.Series[0].Points.RemoveAt(0);
chart1.Series[0].Points.Add(dp2);
x++;
}
private void button2_MouseClick(object sender, MouseEventArgs e)
{
timer1.Enabled = false;
timer2.Enabled = true;
timer3.Enabled = false;
}
private void button3_MouseClick(object sender, MouseEventArgs e)
{
timer1.Enabled = false;
timer2.Enabled = false;
timer3.Enabled = true;
}
private void button1_MouseClick(object sender, MouseEventArgs e)
{
timer1.Enabled = true;
timer2.Enabled = false;
timer3.Enabled = false;
}
}
}
如果我使用它确实有效
series1.IsXValueIndexed = true;
但我不能使用这个,因为我的项目有一个时间 X 轴,当我使用这个选项时,它不会产生一个好的时间线(轴标签没有像通常那样四舍五入到最近的小时),而且它还会导致对齐问题我的辅助 X 轴在图表顶部显示日期。
请尝试一下并告诉我会发生什么:
private void timer3_Tick(object sender, EventArgs e)
{
DataPoint dp2 = new DataPoint(x, rnd.Next(100));
Series mySeries = chart1.Series[0];
chart1.Series.Clear();
mySeries.Points.RemoveAt(0);
mySeries.Points.Add(dp2);
chart1.Series.Add(mySeries);
x++;
}
也就是说,您可以尝试删除该系列,对其进行修改,然后将其添加回图表中。 我无法自己运行它,因为我无法轻松地在 Visual Studio 中重建您的项目。 希望有帮助。
添加这个 Chart1.ResetAutoValues(); 后 mySeries.Points.RemoveAt(0);