同步平移两个图表区域
Synchronized Panning Two Chart Areas
我有一个包含两个区域的图表。当我在一个图表区域的滚动条上缩放或滑动时,其他图表区域也会缩放和滑动。我一直在尝试将平移添加到我的项目中。当我搜索时,我发现了 MSChart Extension,我很喜欢它 (https://www.codeproject.com/Articles/357817/MSChart-Extension-Zoom-and-Pan-Control)。
我想使用 MSChart Extension,但正如我所说,我需要同步两个图表区域。当我缩放一个图表区域时,另一个图表区域必须缩放,或者当我平移一个区域时,另一个图表区域必须自动平移。
或者我只需要添加平移功能而不是没有 MSChart 扩展的滚动条。
你能帮我吗?
我是在没有 mschart 扩展的标准图表代码上完成的,使用以下代码片段它适用于鼠标滚轮缩放和在滚动条上滑动,但是当我使用 MSChart 扩展(缩放和平移)控制图表时它不会同步两个图表区域).
private void chart1_AxisViewChanged(object sender, ViewEventArgs e)
{
if (e.Axis == chart1.ChartAreas["ChartArea1"].AxisX)
{
chart1.ChartAreas["ChartArea2"].AxisX.ScaleView.Size = chart1.ChartAreas["ChartArea1"].AxisX.ScaleView.Size;
chart1.ChartAreas["ChartArea2"].AxisX.ScaleView.Position = chart1.ChartAreas["ChartArea1"].AxisX.ScaleView.Position;
}
if (e.Axis == chart1.ChartAreas["ChartArea2"].AxisX)
{
chart1.ChartAreas["ChartArea1"].AxisX.ScaleView.Size = chart1.ChartAreas["ChartArea2"].AxisX.ScaleView.Size;
chart1.ChartAreas["ChartArea1"].AxisX.ScaleView.Position = chart1.ChartAreas["ChartArea2"].AxisX.ScaleView.Position;
}
}
谨致问候,
如果您有两个图表区域,您可以使用 AlignWithChartArea
和 AlignmentStyle
方法将它们与 AxisView 等特殊属性对齐。
例如:
using System.Windows.Forms.DataVisualization.Charting;
...
// Make Chart Area 2 align to Chart Area 1
Chart1.ChartAreas["Chart Area 2"].AlignWithChartArea = "Default"; //or "ChartArea1"
// Set the alignment type
Chart1.ChartAreas["Chart Area 2"].AlignmentStyle = AreaAlignmentStyles.Position |
AreaAlignmentStyles.PlotPosition |
AreaAlignmentStyles.Cursor |
AreaAlignmentStyles.AxesView;
...
我有一个包含两个区域的图表。当我在一个图表区域的滚动条上缩放或滑动时,其他图表区域也会缩放和滑动。我一直在尝试将平移添加到我的项目中。当我搜索时,我发现了 MSChart Extension,我很喜欢它 (https://www.codeproject.com/Articles/357817/MSChart-Extension-Zoom-and-Pan-Control)。
我想使用 MSChart Extension,但正如我所说,我需要同步两个图表区域。当我缩放一个图表区域时,另一个图表区域必须缩放,或者当我平移一个区域时,另一个图表区域必须自动平移。
或者我只需要添加平移功能而不是没有 MSChart 扩展的滚动条。
你能帮我吗?
我是在没有 mschart 扩展的标准图表代码上完成的,使用以下代码片段它适用于鼠标滚轮缩放和在滚动条上滑动,但是当我使用 MSChart 扩展(缩放和平移)控制图表时它不会同步两个图表区域).
private void chart1_AxisViewChanged(object sender, ViewEventArgs e)
{
if (e.Axis == chart1.ChartAreas["ChartArea1"].AxisX)
{
chart1.ChartAreas["ChartArea2"].AxisX.ScaleView.Size = chart1.ChartAreas["ChartArea1"].AxisX.ScaleView.Size;
chart1.ChartAreas["ChartArea2"].AxisX.ScaleView.Position = chart1.ChartAreas["ChartArea1"].AxisX.ScaleView.Position;
}
if (e.Axis == chart1.ChartAreas["ChartArea2"].AxisX)
{
chart1.ChartAreas["ChartArea1"].AxisX.ScaleView.Size = chart1.ChartAreas["ChartArea2"].AxisX.ScaleView.Size;
chart1.ChartAreas["ChartArea1"].AxisX.ScaleView.Position = chart1.ChartAreas["ChartArea2"].AxisX.ScaleView.Position;
}
}
谨致问候,
如果您有两个图表区域,您可以使用 AlignWithChartArea
和 AlignmentStyle
方法将它们与 AxisView 等特殊属性对齐。
例如:
using System.Windows.Forms.DataVisualization.Charting;
...
// Make Chart Area 2 align to Chart Area 1
Chart1.ChartAreas["Chart Area 2"].AlignWithChartArea = "Default"; //or "ChartArea1"
// Set the alignment type
Chart1.ChartAreas["Chart Area 2"].AlignmentStyle = AreaAlignmentStyles.Position |
AreaAlignmentStyles.PlotPosition |
AreaAlignmentStyles.Cursor |
AreaAlignmentStyles.AxesView;
...