在两个图表对象之间对齐图表垂直轴

8
在我的应用程序中,我有两个图表,一个在另一个上面,UI上的位置更靠近屏幕顶部。这两个图表的水平轴都是指向同一时间范围的。它们的垂直轴可能非常不同,所以我想保持它们作为两个图表。它们提供互补信息,因此,即使它们的垂直轴标签发生变化,我也想让它们的水平轴保持同步。
在这两种情况下,包含它们的图表控件具有相同的宽度,只是内部数据被移动了。
我目前有这个:
10000|
 8000|
 6000|
 4000|
 2000|
    0 ---------------------------------
      0                              10

Long Label 3|
Long Label 2|
Long Label 1|
Long Label 0 -----------------------
             0                    10

And I want this:

       10000|
        8000|
        6000|
        4000|
        2000|
           0 ---------------------------------
             0                              10

Long Label 3|
Long Label 2|
Long Label 1|
Long Label 0 ---------------------------------
             0                              10

他们最初是两个不同的 MSChart 控件。我试着把它们放到同一个图表控件中做成不同的图表区域,但这并没有解决问题。
我该如何实现呢?我更愿意它们分别在不同的图表控件中,但如果必须的话,我也可以将它们分成不同的图表区域。
3个回答

4

我最终找到了答案。然而,如果它们是同一个图表控件中的不同图表区域,则可以使用 ChartArea.AlignWithChartArea 属性。

//Say We have 2 Chart areas, one named "Main Info" and the other "Supplemental"
chart1.ChartAreas["Supplemental"].AlignWithChartArea = "Main Info";
chart1.ChartAreas["Supplemental"].AlignmentOrientation = AreaAlignmentOrientations.Vertical;
chart1.ChartAreas["Supplemental"].AlignmentStyle = AreaAlignmentStyles.All;

那样会按照我想要的方式排列它们。


仅仅将近10年后,这为我提供了主图和具有不同Y轴范围的子图所需的完美解决方案。谢谢你,祝2022年快乐 ;) - jim tollan

2

实时同步多个CharArea,如Temp所说:

private void chart1_AxisViewChanged(object sender, ViewEventArgs e)
{
    foreach (var charArea in chart1.ChartAreas)
    {
        if (charArea != e.ChartArea)
        {
            double x_position = e.ChartArea.AxisX.ScaleView.Position;
            double x_size = e.ChartArea.AxisX.ScaleView.Size;
            charArea.AxisX.ScaleView.Zoom(x_position, x_position + x_size);    
        }                
    }            
}

如果Y轴标签/标题不同呢? - Pedro77

2

虽然回答有些晚,但是还是写下来供需要的人参考。
我的建议是使用其他图表。

double x_position = chart1.ChartAreas[0].AxisX.ScaleView.Position;
double x_size = chart1.ChartAreas[0].AxisX.ScaleView.Size;
chart2.ChartAreas[0].AxisX.ScaleView.Zoom(x_position, x_position + x_size);    

要实现实时同步,请在图表事件AxisViewChanged中使用以下代码。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接