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

时间:2016-05-10 14:21:40

标签: c# charts axis

我有一个带有两个图表区域的图表控件(来自System.Windows.Forms.DataVisualization)。 ChartArea2与ChartArea1对齐如下:

ChartArea2.AlignWithChartArea    = "ChartArea1";
ChartArea2.AlignmentOrientation  = AreaAlignmentOrientations.Vertical;
ChartArea2.AlignmentStyle        = AreaAlignmentStyles.All;

除非X轴没有对齐,否则这种方法很有效,尽管它包含在AlignmentStyle中。相反,它们的最小值,最大值,间隔等保持独立,并根据数据点设置。

enter image description here

我需要X轴相同,即min,max,interval等。我可以在代码中设置这些属性以强制它们相同。但是,只要我放大ChartArea1,X轴就会再次错位。

无论缩放级别如何,X轴都有一种简单的方法可以相互镜像吗?

1 个答案:

答案 0 :(得分:0)

嗯,他们实际上是对齐,即无论他们的标签如何都坐在同一位置,但他们没有相同的范围

当垂直坐下但看Y轴时,你看不到X轴的对齐方式:它们有不同的字体大小,但坐在同一水平位置!

如果您想要显示相同的范围,则需要设置范围,如您所写,设置Minimum& Maximum从默认的 NaN (此处为Automatic}到某些值。

当您缩放时,只要选择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;

enter image description here

在缩放状态下,ChartAreas仍然显示相同的范围且具有相同的ScaleView.ViewMinimum / ScaleView.ViewMaximum

enter image description here

用于测试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轴看起来不对齐!