如何让辅助Y轴与主Y轴共享零点?我不在乎排队的其余间隔或任何类似的东西,我只想让主要和次要Y轴共享相同的零。
我默认按周汇总数据,但我的图表也可以按日或月更改为汇总。例如,当我按周汇总时,两个轴上的所有值均为正值,因此图表的底部位于0(请参阅http://imgur.com/aIe2kaW),但是当我每天汇总时,我会在主要值上得到一些负值轴。此时,我仍然在辅助轴上具有所有正值,因此图形的底部在主轴上跳至-2000并在辅助轴上保持为0(参见http://imgur.com/Q1E8bLw)。
我已尝试在轴上设置Axis.Crossing
属性,我尝试将最小值设置为相等,我尝试过其他一些事情,但似乎没有任何效果。是否有任何方法可以使用公共零点,以便辅助轴上的低正值看起来不像第二张图像中那样是否为负值?
修改:我在Visual Studio 2010中使用WinForms
答案 0 :(得分:0)
您可以通过设置Axes
和Minimum
值来强制Maximum
分享他们的Axis.Minimum
和Maximum
值。像这样:
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
的显示。:
另请注意,无论您更改这些值,Axes都必须显示有关值的真相;因此,如果两个系列显示不同比例的值,您将不得不找到一种计算最小和最大值的方法,以便它们共享一个共同的零。
如果是您知道第二个Series
值大x
倍,您可以将其最小值/最大值设置为x
的{{1}}倍...:
Series1
这是一种相当简单的方法,但它有效(使用不同的数据点值):
答案 1 :(得分:0)
强制两个轴具有相同的比例,只需要决定使用哪个轴比例。 在这个例子中,我使用的是主轴比例:
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&amp;&amp;&lt; 0),这需要检查(然后这可以作为扩展方法实现)< / p>