开发者

C# Charting zoom problem with DataTime for X axis

开发者 https://www.devze.com 2023-02-04 04:23 出处:网络
using the MS Charting for .NET, I am trying to zoom into the chart which I have created. This works fine on the Y axis (type = float) and on the X axis if type = int, but when I have DateTime values

using the MS Charting for .NET, I am trying to zoom into the chart which I have created.

This works fine on the Y axis (type = float) and on the X axis if type = int, but when I have DateTime values on the X axis, scrolling does not behave as it should on this axis.

Vertically, everything still behaves properly, but while I can zoom into the X axis, I cannot drag the sliding bar to move where I am zoomed into. However, I can click either side and it 开发者_如何学Gowill jump.

Does anyone know how to fix this and make it behave like it does with float values?

Thanks!


Depending on your data, try setting the chart area's CursorX.IntervalType property to something other than Auto.

You may run into a similar issue when trying to use the small scroll arrows of the scroll bar once you are zoomed in. To fix that you can try to set the chart area's AxisX.ScaleView.SmallScrollSizeType property to the same thing as the CursorX.IntervalType.

For example, if you have a chart with data that is reported every 30 seconds you can use the following settings:

        chart1.ChartAreas[0].CursorX.IsUserEnabled = true;
        chart1.ChartAreas[0].CursorX.IsUserSelectionEnabled = true;
        chart1.ChartAreas[0].CursorX.IntervalType = System.Windows.Forms.DataVisualization.Charting.DateTimeIntervalType.Minutes;
        chart1.ChartAreas[0].CursorX.Interval = 0.5D;

        chart1.ChartAreas[0].AxisX.ScaleView.SmallScrollSizeType = DateTimeIntervalType.Minutes;
        chart1.ChartAreas[0].AxisX.ScaleView.SmallScrollSize = 0.5D;
        chart1.ChartAreas[0].AxisX.ScaleView.Zoomable = true;
        chart1.ChartAreas[0].AxisX.LabelStyle.Format = "hh:mm:ss";


I had the same problem and these settings solve it for me:

        _chart.ChartAreas[0].CursorX.IsUserEnabled = true;
        _chart.ChartAreas[0].CursorX.IsUserSelectionEnabled = true;
        _chart.ChartAreas[0].CursorX.IntervalType = DateTimeIntervalType.Minutes;
        _chart.ChartAreas[0].CursorX.Interval = 1D;

        _chart.ChartAreas[0].AxisX.ScaleView.SmallScrollSizeType = DateTimeIntervalType.Minutes;
        _chart.ChartAreas[0].AxisX.ScaleView.SmallScrollSize = 1D;
        _chart.ChartAreas[0].AxisX.ScaleView.Zoomable = true;

        _chart.ChartAreas[0].AxisX.ScaleView.MinSizeType = DateTimeIntervalType.Minutes;
        _chart.ChartAreas[0].AxisX.ScaleView.MinSize = 1D;

        _chart.ChartAreas[0].AxisX.ScaleView.SmallScrollMinSizeType = DateTimeIntervalType.Minutes;
        _chart.ChartAreas[0].AxisX.ScaleView.SmallScrollMinSize = 1D;

Especially the last two lines did the job.


add

    chart.ChartAreas[0].AxisX.ScaleView.SmallScrollMinSizeType = DateTimeIntervalType.Seconds;


My solution was:

chart1.ChartAreas[0].CursorX.IntervalType = DateTimeIntervalType.Milliseconds;
0

精彩评论

暂无评论...
验证码 换一张
取 消