繁体   English   中英

在 MS 图表中对齐和同步 X 轴不起作用

[英]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 )的MinimumMaximum设置为某些值。

当您缩放一个时,只要选择了AreaAlignmentStyles.AxesViewAreaAlignmentStyles.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM