グラフにグラフをプロットしてあります。 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.Maximum
、AxisX.Minimum
、AxisX.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によって設定されている私は、コードのこの部分が障害物であると感じています。ここでの画像です:
EDIT 2:
X軸の値は、毎分1つの値のサンプリングをシミュレートしたDateTime-値は次のとおりです。
timelist.Add(DateTime.Now.AddMinutes(i + 2));
ことなので私は間隔を設定していない多くの値です。 コードはこのように投稿されているので、そのままコピーしてすぐに実行して試してみることができます。
ありがとうございますが、残念ながら同じ結果です。スクロールボタンをドラッグしてスムーズにグラフにスクロールすることはできません。 –
私は実際にはうまくスクロールしたいと思います。これは、x軸の値で日時を混乱させないと機能します。ズームウィンドウは 'chart1.ChartAreas [0] .AxisX.ScaleView.Zoom'によって設定され、この間隔内でスライドするはずです –
あなたのチャートの値について詳しく教えてください!リフトをドラッグすると、少なくとも1ピクセル*スケールだけ移動することができます。あなたはそのステップについて確かですか?それらはあなたのDataPointsであるかもしれませんが、Axis Labelsを飛び越えます。本当にもっと知りません。イメージを見ることなく。 Axis.Intervalを設定しましたか? – TaW