[英]Aligning and Synchronising X Axes in MS Chart Doesn't Work
我有一个带有两个图表区域的图表控件(来自 System.Windows.Forms.DataVisualization)。 ChartArea2 与 ChartArea1 对齐如下:
ChartArea2.AlignWithChartArea = "ChartArea1";
ChartArea2.AlignmentOrientation = AreaAlignmentOrientations.Vertical;
ChartArea2.AlignmentStyle = AreaAlignmentStyles.All;
尽管 X 轴未对齐,但它运行良好,尽管 X 轴包含在 AlignmentStyle 中。 相反,它们的最小值、最大值、间隔等保持独立,并根据数据点进行设置。
我需要 X 轴相同,即最小值、最大值、间隔等。我可以在代码中设置这些属性以强制它们相同。 但是,一旦我放大 ChartArea1,X 轴就会再次错位。
无论缩放级别如何,X 轴都可以相互镜像吗?
嗯,它们实际上是对齐的 ,即无论它们的标签如何都位于相同的位置,但它们没有相同的范围 。
当垂直坐下但看Y轴时,你看不到X轴的对齐:它们有不同的字体大小但坐在同一水平位置!
如果要显示相同的范围,则需要设置范围,如您所写,通过将默认NaN
(此处为Automatic
)的Minimum
和Maximum
设置为某些值。
当您缩放一个时,只要选择了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 ;
}
请注意,不仅要保持值范围对齐,还要保持Axes的可视显示,您需要使用AlignmentStyle = AreaAlignmentStyles.All;
,不只是AxisView
或者值的格式化结果或要显示的点数的巨大差异可以移动Y轴并使X轴看起来不对齐!
设置ChartArea.AxisX.IsMarginVisible = false;
将解决问题
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.