C# 绘制一张图表,在其中操作放大和缩小

C# 绘制一张图表,在其中操作放大和缩小,c#,charts,mschart,C#,Charts,Mschart,我正在绘制一张图表,其中填充了我从不同程序中获得的数据。我想做两个按钮来放大和缩小。我看到我可以使用AxisX.ScaleView中的不同函数,我正在使用这些函数。我就快到了,但我在绘制图表的时候遇到了一个问题:如果你看到图1,这是在执行不同的程序并第一次绘制之后的图表。当我进行放大和缩小时,最后一个条形图(图2第22周)被切成两半,不会恢复到原来的大小 有人知道如何操纵X轴的开始和结束位置以进行缩放吗?有人知道如何获取图表区域开始和结束的初始值吗?我放置函数代码以缩放图表: private v

我正在绘制一张图表,其中填充了我从不同程序中获得的数据。我想做两个按钮来放大和缩小。我看到我可以使用AxisX.ScaleView中的不同函数,我正在使用这些函数。我就快到了,但我在绘制图表的时候遇到了一个问题:如果你看到图1,这是在执行不同的程序并第一次绘制之后的图表。当我进行放大和缩小时,最后一个条形图(图2第22周)被切成两半,不会恢复到原来的大小

有人知道如何操纵X轴的开始和结束位置以进行缩放吗?有人知道如何获取图表区域开始和结束的初始值吗?我放置函数代码以缩放图表:

private void setSize(int zoom)
{
 int blockSize = (Convert.ToInt32(tbZoom.Text) + zoom) / 100;

 // set view range to [0,max]
 chartReport.ChartAreas[0].AxisX.Minimum = 0;
 chartReport.ChartAreas[0].AxisX.Maximum = chartReport.Series[0].Points.Count;

 // enable autoscroll
 chartReport.ChartAreas[0].CursorX.AutoScroll = true;
 chartReport.ChartAreas[0].CursorX.IsUserSelectionEnabled = true;

 // let's zoom to [0,blockSize] (e.g. [0,100])
 chartReport.ChartAreas[0].AxisX.ScaleView.Zoomable = true;
 chartReport.ChartAreas[0].AxisX.ScaleView.SizeType = DateTimeIntervalType.Number;
 int actualHeight = chartReport.Height;
 int actualWidth = chartReport.Width;
 int position = 0;
 int size = blockSize;
 chartReport.ChartAreas[0].AxisX.ScaleView.Zoom(position, size);

 // disable zoom-reset button (only scrollbar's arrows are available)
 chartReport.ChartAreas[0].AxisX.ScrollBar.ButtonStyle = ScrollBarButtonStyles.SmallScroll;

 // set scrollbar small change to blockSize (e.g. 100)
 chartReport.ChartAreas[0].AxisX.ScaleView.SmallScrollSize = blockSize;
 tbZoom.Text = (blockSize * 100).ToString();
}


您的第一行设置轴的最大值错误:
chartReport.ChartAreas[0]。AxisX.maximum=chartReport.Series[0]。Points.Count将其设置为22,而实际上应该是23(基于第一幅图像)

如果您的数据总是这样,只需添加1:

chartReport.ChartAreas[0].AxisX.Maximum = chartReport.Series[0].Points.Count + 1;

不幸的是,在实际绘制图表之前,使用自动最小/最大值不会给出实际值。如果您的图表几乎没有
数据点
,这不是问题,因为您可以调用
chartReport.Refresh()或类似内容,然后从轴获取值。但是,如果您有很多要点,则
Refresh()
将花费很长时间,这是不可取的。在我广泛使用图表的过程中,我自己设置了轴范围,因此我可以完全控制,而不是使用自动最小/最大值。

就是这样。我认为这将是一个小的东西,会产生不同。回答接受!