我有一个带有两个图表区域的图表控件(来自System.Windows.Forms.DataVisualization)。 ChartArea2与ChartArea1对齐如下:
ChartArea2.AlignWithChartArea = "ChartArea1";
ChartArea2.AlignmentOrientation = AreaAlignmentOrientations.Vertical;
ChartArea2.AlignmentStyle = AreaAlignmentStyles.All;
除非X轴没有对齐,否则这种方法很有效,尽管它包含在AlignmentStyle中。相反,它们的最小值,最大值,间隔等保持独立,并根据数据点设置。
我需要X轴相同,即min,max,interval等。我可以在代码中设置这些属性以强制它们相同。但是,只要我放大ChartArea1,X轴就会再次错位。
无论缩放级别如何,X轴都有一种简单的方法可以相互镜像吗?
答案 0 :(得分:0)
嗯,他们实际上是对齐,即无论他们的标签如何都坐在同一位置,但他们没有相同的范围。
当垂直坐下但看Y轴时,你看不到X轴的对齐方式:它们有不同的字体大小,但坐在同一水平位置!
如果您想要显示相同的范围,则需要设置范围,如您所写,设置Minimum
& Maximum
从默认的 NaN
(此处为Automatic
}到某些值。
当您缩放时,只要选择AreaAlignmentStyles.AxesView
或AreaAlignmentStyles.All
,其他人就会自动放大。
所以你需要的是一个非自动的显式范围(对于unzoomed状态)和一个合适的AreaAlignmentStyle
(对于缩放状态)的组合。
注意,AlignmentStyle
只需要针对两个ChartAreas
中的一个进行。但是需要为 :
Minimum/Maximum
值
ChartArea CA1 = chart1.ChartAreas[0];
ChartArea CA2 = chart1.ChartAreas.Add("ChartArea2");
// 2nd CA aligns to the 1st one:
CA2.AlignWithChartArea = "ChartArea1";
CA2.AlignmentOrientation = AreaAlignmentOrientations.Vertical;
CA2.AlignmentStyle = AreaAlignmentStyles.All;
// both have the same range:
CA1.AxisX.Maximum = 30;
CA2.AxisX.Maximum = 30;
CA1.AxisX.Minimum = 0;
CA2.AxisX.Minimum = 0;
// both are interactively zoomable:
CA1.AxisX.ScaleView.Zoomable = true;
CA1.AxisX.ScrollBar.Enabled = true;
CA1.CursorX.IsUserSelectionEnabled = true;
CA2.AxisX.ScaleView.Zoomable = true;
CA2.AxisX.ScrollBar.Enabled = true;
CA2.CursorX.IsUserSelectionEnabled = true;
在缩放状态下,ChartAreas
仍然显示相同的范围且具有相同的ScaleView.ViewMinimum / ScaleView.ViewMaximum
:
用于测试ScaleView
值的代码:
private void chart1_AxisViewChanged(object sender, ViewEventArgs e)
{
AxisScaleView ASV1X = chart1.ChartAreas[0].AxisX.ScaleView;
AxisScaleView ASV2X = chart1.ChartAreas[1].AxisX.ScaleView;
label1.Text = "ScaleViews Min/Max: " + ASV1X.ViewMinimum + " - " + ASV1X.ViewMaximum +
" | " + ASV2X.ViewMinimum + " - " + ASV2X.ViewMaximum ;
}
请注意,不仅要保持值范围对齐,还要保持轴的可视显示,您需要使用AlignmentStyle = AreaAlignmentStyles.All;
,而不仅仅是{{ 1}}或者价值观的巨大差异'格式化结果或要显示的点数可以移动Y轴并使X轴看起来不对齐!