我正在绘制一张图表,其中填充了我从不同程序获得的数据。我想制作两个按钮来放大和缩小。我看到我可以使用AxisX.ScaleView的不同功能,我正在玩那些。我几乎就在那里但是我在绘制图表时遇到了问题:如果你看到图像1,这是执行不同程序并首次绘制后的图表。当我进行放大和缩小时,最后一个条(图像2中的第22周)被切成两半并且不会达到其原始大小。
有没有人知道如何操作Axis 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();
}
答案 0 :(得分:2)
你的第一行是设置错误的最大值:chartReport.ChartAreas[0].AxisX.Maximum = chartReport.Series[0].Points.Count;
将它设置为22,当它真的应该是23(基于第一张图像)。
如果您的数据总是如此,只需添加1:
chartReport.ChartAreas[0].AxisX.Maximum = chartReport.Series[0].Points.Count + 1;
不幸的是,在实际绘制图表之前,使用自动最小/最大值不会给出实际值。如果您的图表DataPoints
很少,那么这不是问题,因为您只需调用chartReport.Refresh();
或类似内容,然后从轴获取值。但是,如果你有很多分数,Refresh()
需要很长时间,这是不可取的。在我广泛使用图表的过程中,我自己设置了轴范围,因此我可以完全控制,而不是使用自动最小/最大值。