【问题标题】:Setting a common zero on primary and secondary Y axes在主要和次要 Y 轴上设置一个公共零
【发布时间】:2015-01-13 23:28:48
【问题描述】:

如何让辅助 Y 轴与主 Y 轴共享零点?我不关心其余的间隔排列或任何类似的东西,我只希望主 Y 轴和辅助 Y 轴共享相同的零。

我默认按周汇总数据,但我的图表也可以更改为按天或按月汇总。例如,当我按周聚合时,两个轴上的所有值都是正值,因此图表底部位于 0(请参阅http://imgur.com/aIe2kaW),但是当我每天聚合时,我会在主轴上得到一些负值。那时,我在辅助轴上仍然有所有正值,所以图表底部在主轴上跳到 -2000 并在辅助轴上保持在 0(请参阅http://imgur.com/Q1E8bLw)。

我尝试在轴上设置Axis.Crossing 属性,我尝试将最小值设置为相等,我尝试了许多其他方法,但似乎没有任何效果。有什么方法可以使用一个共同的零,以使次轴上的低正值看起来不像第二张图像中那样是负值?

编辑:我在 Visual Studio 2010 中使用 WinForms

【问题讨论】:

  • 我猜你正在使用 WinForms?
  • 是的,抱歉,我早该指定的。

标签: c# winforms charts axes


【解决方案1】:

您可以通过设置Axis.MinimumMaximum 值来强制Axes 共享他们的MinimumMaximum 值,例如像这样:

 ChartArea CA = chart1.ChartAreas[0];
 CA.AxisY2.Maximum = CA.AxisY.Maximum;
 CA.AxisY2.Minimum = CA.AxisY.Minimum;

如果您不知道这些值是如何分布的,您可能需要计算常见的最小值和最大值:

 ChartArea CA = chart1.ChartAreas[0];

 double min = Math.Min(CA.AxisY.Minimum, CA.AxisY2.Minimum);
 double max = Math.Max(CA.AxisY.Maximum, CA.AxisY2.Maximum);

 CA.AxisY.Maximum = max;
 CA.AxisY2.Maximum = max;
 CA.AxisY.Minimum = min;
 CA.AxisY2.Minimum = min; 

请注意,这将更改 Points 在一个或两个 Series.. 中的显示:

还请注意,无论您以何种方式更改这些值,轴都必须显示这些值的真相;因此,如果两个系列以不同的比例显示值,您将不得不找到一种计算最小值和最大值的方法,以便它们共享一个共同的零。

如果例如你知道第二个Series 的值是x 的两倍大,你可以将它的最小/最大值设置为xSeries1 的倍......:

 CA.AxisY.Maximum = 15 * CA.AxisY2.Maximum;
 CA.AxisY.Minimum = 15 * CA.AxisY2.Minimum;

这是一种相当简单的方法,但它有效(使用不同的数据点值):

【讨论】:

  • 我害怕那个。谢谢,这非常有用!
  • 出于某种原因,即使将辅助轴上的最小值设置为(在这种情况下)-327 仍将轴的底部显示为 0。更改最大值可以正常工作,但最小值从不显示任何内容低于 0。
  • 嗯,那不应该。在黑暗中拍摄:Axis 有一个 IsStartedFromZero 属性。你没设置好?可以链接到图片吗?
【解决方案2】:

强制两个轴具有相同的比例,只需要决定使用哪个轴比例即可。 在本例中,我使用的是主轴比例:

 private static void ForceCommonZero(Chart chart)
    {
        chart.ChartAreas[0].RecalculateAxesScale();
        Axis y1 = chart.ChartAreas[0].AxisY;
        Axis y2 = chart.ChartAreas[0].AxisY2;
        double proportion = y1.Maximum / (-y1.Minimum);
        y2.Maximum = proportion * (-y2.Minimum);
    }

请注意,我假设两个轴都过零(最大值 > 0 && 最小值

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-02
    • 1970-01-01
    • 2022-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-01
    • 1970-01-01
    相关资源
    最近更新 更多