4

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軸。

4

1 に答える 1

0

これを試して、何が起こるか教えてください:

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でプロジェクトを簡単に再構築できないため、自分で実行できませんでした。それが役に立てば幸い。

于 2012-11-08T18:02:32.230 に答える