C# 绘制一张图表,在其中操作放大和缩小
我正在绘制一张图表,其中填充了我从不同程序中获得的数据。我想做两个按钮来放大和缩小。我看到我可以使用AxisX.ScaleView中的不同函数,我正在使用这些函数。我就快到了,但我在绘制图表的时候遇到了一个问题:如果你看到图1,这是在执行不同的程序并第一次绘制之后的图表。当我进行放大和缩小时,最后一个条形图(图2第22周)被切成两半,不会恢复到原来的大小 有人知道如何操纵X轴的开始和结束位置以进行缩放吗?有人知道如何获取图表区域开始和结束的初始值吗?我放置函数代码以缩放图表:C# 绘制一张图表,在其中操作放大和缩小,c#,charts,mschart,C#,Charts,Mschart,我正在绘制一张图表,其中填充了我从不同程序中获得的数据。我想做两个按钮来放大和缩小。我看到我可以使用AxisX.ScaleView中的不同函数,我正在使用这些函数。我就快到了,但我在绘制图表的时候遇到了一个问题:如果你看到图1,这是在执行不同的程序并第一次绘制之后的图表。当我进行放大和缩小时,最后一个条形图(图2第22周)被切成两半,不会恢复到原来的大小 有人知道如何操纵X轴的开始和结束位置以进行缩放吗?有人知道如何获取图表区域开始和结束的初始值吗?我放置函数代码以缩放图表: private v
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()
将花费很长时间,这是不可取的。在我广泛使用图表的过程中,我自己设置了轴范围,因此我可以完全控制,而不是使用自动最小/最大值。就是这样。我认为这将是一个小的东西,会产生不同。回答接受!