x軸がシフトするac#チャートを作成しようとして問題が発生しました。
私が欲しいのは、新しい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軸があるため、これを使用することはできません。このオプションを使用すると、適切なタイムラインが生成されず(軸ラベルは通常のように最も近い時間に丸められません)、アライメントの問題も発生します。グラフの上部に日付を表示する2番目のX軸。