Jas*_*son 7 .net charts data-visualization
我正在使用System.Windows.Forms.DataVisualization.Charting.Chart控件,并让ChartArea的AxisX和Y都将Zoomable设置为true.当图表放大时,我会看到滚动条,但无法拖动它.是否可以拖动滚动条,并在拖动滚动条按钮时让图表显示移动?我希望为用户提供直观和互动的功能.谢谢!
为了放大和缩小图表,我使用 MouseWheel 事件。我将在下面展示的解决方案远非完美,但它有效,至少对我来说:)。
应为每个数据系列计算 maxChangeRange 和 minChangeRange 的值(21 和 -1 是我在项目中使用的值)。此外,假设两个轴具有相似的值范围,如果它们不同,则需要为其中之一添加某种缩放。
从 MouseEventArgs(eX 和 eY)接收到的鼠标位置是图表控件内的鼠标位置,而不是图表内的位置:),因此此位置缩放功能有点错误。
为了使其工作,您需要定义图表区域和轴的图表控制
如果启用轴标签自动调整,图表在缩放时可能会有点“跳跃”。
我是 C# 和 winforms 世界的初学者,所以请记住,这可能不是最好的解决方案。
// Actual total zoom value
int deltaScrollTotal;
private void chart_MouseWheel(object sender, MouseEventArgs e)
{
int maxChangeRange = 21;
int minChangeRange = -1;
int deltaScroll = e.Delta / Math.Abs(e.Delta);
deltaScrollTotal += deltaScrollTotal + deltaScroll > minChangeRange
&& deltaScrollTotal + deltaScroll < maxChangeRange
? deltaScroll : 0;
// Additional calculation in order to obtain pseudo
// "positional zoom" feature
double minXScale = (double)e.X / (double)chart.Width;
double maxXScale = 1 - minXScale;
double minYScale = (double)e.Y / (double)chart.Height;
double maxYScale = 1 - minYScale;
// Max and min values into which axis need to be scaled/zoomed
double maxX = chart.ChartAreas[0].AxisX.Maximum
- deltaScrollTotal * maxXScale;
double minX = chart.ChartAreas[0].AxisX.Minimum
+ deltaScrollTotal * minXScale;
double maxY = chart.ChartAreas[0].AxisY.Maximum
- deltaScrollTotal * minYScale;
double minY = chart.ChartAreas[0].AxisY.Minimum
+ deltaScrollTotal * maxYScale;
chart.ChartAreas[0].AxisX.ScaleView.Zoom( minX, maxX);
chart.ChartAreas[0].AxisY.ScaleView.Zoom( minY, maxY);
}
Run Code Online (Sandbox Code Playgroud)该事件需要附加到图表控件:
chart.MouseWheel += new MouseEventHandler(chart_MouseWheel);
Run Code Online (Sandbox Code Playgroud)