使用日期时间x轴在图表中平滑滚动

时间:2016-09-22 15:26:07

标签: c# datetime scroll charts axis

我在图表中绘制了这个简单的图表。在X轴上,值为DateTime值。

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值并仅使用doubleAxisX.MaximumAxisX.MinimumAxisX.ScaleView.Zoom的{​​{1}}值时,它就像魅力一样。但是只要我使用AxisX.ScaleView.SmallScrollSize作为X值,我就只能按步骤滚动。有人知道如何超越这个吗?我觉得这段代码是障碍:

DateTime

编辑:

X轴的间隔是自动的,范围由// set scrollbar small change to blockSize (e.g. 100) chart1.ChartAreas[0].AxisX.ScaleView.SmallScrollSize = intervall.ToOADate(); 的ZoomLevel设置。这是一张图片:

enter image description here

编辑2:

X轴的值是DateTime-Values,每分钟模拟1个值的采样:

chart1.ChartAreas[0].AxisX.ScaleView.Zoom

因为它有很多值我没有设置间隔。 代码以这种方式发布,因此可以按原样复制并立即运行以试用它。

1 个答案:

答案 0 :(得分:1)

滚动间隔错误。

它不应该是数据的开头,而是滚动时要进行的步骤。

看起来你要滚动3个小时?

以下是您的工作:

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

如果你想使用DateTime.ToOADate双倍达到同样的效果,你需要在DataTime数据类型的第一天开始(0又称'黎明时间'又名1899-12-30)然后再添加3小时:

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

要平稳地拖动升降机,这可能比设置SmallScrollSize

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

使用您的单位和数字!这仅适用于未设置 SmallScrollMinSize

的情况