2016-09-22 15 views
1

グラフにグラフをプロットしてあります。 X軸の値はDateTimeです。日時x軸のチャートでスムーズにスクロールする

public partial class Form1 : Form 
{ 

    List<double> valuelist = new List<double>(); 
    List<DateTime> timelist = new List<DateTime>(); 

    public Form1() 
    { 
     InitializeComponent(); 

     // fill the lists with values 
     for (int i = 0; i < 2000; i++) 
     { 
      double value = Math.Sin(i/20.0); 
      valuelist.Add(value); 
      timelist.Add(DateTime.Now.AddMinutes(i + 2)); 
     } 

     // add the Values to the chart 
     for (int i = 0; i < valuelist.Count; i++) 
     { 
      this.chart1.Series[0].Points.AddXY(timelist[i], valuelist[i]); 
     } 

     this.chart1.ChartAreas[0].AxisX.LabelStyle.Format = "dd.MM-hh:mm"; 

    } 

    private void Form1_Load(object sender, EventArgs e) 
    { 

     chart1.Series[0].XValueType = ChartValueType.DateTime; 


     chart1.ChartAreas[0].AxisX.Maximum = timelist.Max().ToOADate(); 
     chart1.ChartAreas[0].AxisX.Minimum = timelist.Min().ToOADate(); 


     chart1.ChartAreas[0].CursorX.AutoScroll = true; 
     chart1.ChartAreas[0].CursorY.AutoScroll = true; 

     chart1.ChartAreas[0].CursorX.IsUserSelectionEnabled = true; 
     chart1.ChartAreas[0].CursorY.IsUserSelectionEnabled = true; 


     chart1.ChartAreas[0].AxisX.ScaleView.Zoomable = true; 
     chart1.ChartAreas[0].AxisY.ScaleView.Zoomable = true; 

     DateTime intervall = timelist.Min().AddHours(3); 


     chart1.ChartAreas[0].AxisX.ScaleView.Zoom(chart1.ChartAreas[0].AxisX.Minimum, intervall.ToOADate()); 


     // disable zoom-reset button 
     chart1.ChartAreas[0].AxisX.ScrollBar.ButtonStyle = ScrollBarButtonStyles.SmallScroll; 

     // set scrollbar small change to blockSize 
     chart1.ChartAreas[0].AxisX.ScaleView.SmallScrollSize = intervall.ToOADate(); 
    } 

} 

私の問題は、スクロールバーをスムーズに動かすことができないことです。私がY値だけをプロットし、AxisX.MaximumAxisX.MinimumAxisX.ScaleView.Zoomの値をdoubleとし、AxisX.ScaleView.SmallScrollSizeの値を使うと、それは魅力的なように機能します。しかし、X値としてDateTimeを使用するとすぐに、私はステップでスクロールできます。誰かがこれを上回る方法を知っていますか?

// set scrollbar small change to blockSize (e.g. 100) 
chart1.ChartAreas[0].AxisX.ScaleView.SmallScrollSize = intervall.ToOADate(); 

EDIT:

間隔X軸は自動であるため、範囲はchart1.ChartAreas[0].AxisX.ScaleView.ZoomのZoomLevelによって設定されている私は、コードのこの部分が障害物であると感じています。ここでの画像です:

enter image description here

EDIT 2:

X軸の値は、毎分1つの値のサンプリングをシミュレートしたDateTime-値は次のとおりです。

timelist.Add(DateTime.Now.AddMinutes(i + 2)); 

ことなので私は間隔を設定していない多くの値です。 コードはこのように投稿されているので、そのままコピーしてすぐに実行して試してみることができます。

答えて

1

スクロール間隔が間違っています。

データの開始ではなく、スクロールするときのステップです。

3時間スクロールしたいようですか?ここで

あなたが何をすべきかです:

chart1.ChartAreas[0].AxisX.ScaleView.SmallScrollSizeType = DateTimeIntervalType.Hours; 
chart1.ChartAreas[0].AxisX.ScaleView.SmallScrollSize = 3; 

あなたはそれがDataTimeデータ型の最初の日に開始する必要が同じことを達成するために、二重DateTime.ToOADateを使用したい場合(0時間の夜明け」別名「別名1899-12-30)、その後、3時間追加:これはSmallScrollSizeを設定するよりも良い仕事もスムーズにリフトをドラッグできるようにするには

DateTime interval = DateTime.FromOADate(0).AddHours(3); 
chart1.ChartAreas[0].AxisX.ScaleView.SmallScrollSizeType = DateTimeIntervalType.Number; 
chart1.ChartAreas[0].AxisX.ScaleView.SmallScrollSize = interval.ToOADate(); 

を:

chart1.ChartAreas[0].AxisX.ScaleView.SmallScrollMinSizeType =DateTimeIntervalType.Minutes; 
chart1.ChartAreas[0].AxisX.ScaleView.SmallScrollMinSize = 60; 

ユニットと番号を使用してください。これは、SmallScrollMinSizeに設定されていない場合にのみ機能します。

+0

ありがとうございますが、残念ながら同じ結果です。スクロールボタンをドラッグしてスムーズにグ​​ラフにスクロールすることはできません。 –

+0

私は実際にはうまくスクロールしたいと思います。これは、x軸の値で日時を混乱させないと機能します。ズームウィンドウは 'chart1.ChartAreas [0] .AxisX.ScaleView.Zoom'によって設定され、この間隔内でスライドするはずです –

+0

あなたのチャートの値について詳しく教えてください!リフトをドラッグすると、少なくとも1ピクセル*スケールだけ移動することができます。あなたはそのステップについて確かですか?それらはあなたのDataPointsであるかもしれませんが、Axis Labelsを飛び越えます。本当にもっと知りません。イメージを見ることなく。 Axis.Intervalを設定しましたか? – TaW

関連する問題