我在图表中绘制了这个简单的图表。在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值并仅使用double
,AxisX.Maximum
,AxisX.Minimum
和AxisX.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设置。这是一张图片:
编辑2:
X轴的值是DateTime-Values,每分钟模拟1个值的采样:
chart1.ChartAreas[0].AxisX.ScaleView.Zoom
因为它有很多值我没有设置间隔。 代码以这种方式发布,因此可以按原样复制并立即运行以试用它。
答案 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
。