7

在我的应用程序中,我有 2 个图表,一个在 UI 上的另一个上方(如靠近显示器顶部)。两张图的水平轴指的是相同的时间范围。虽然它们的垂直轴可能非常不同,所以我想将它们保留为图表。他们提供免费信息,因此,我想保持他们的水平轴同步,即使他们的垂直轴标签让他们移动。

在这两种情况下,包含它们的图表控件具有相同的宽度,只是内部的数据被移动了。

我目前有这个:

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

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

我想要这个:

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

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

它们最初是单独的 Chart MSChart 控件。我尝试将它们与不同的图表区域放在同一个图表控件中,但它并没有解决问题。

我怎么能做到这一点?我希望它们在单独的图表控件上,但如果必须,我可以满足于单独的图表区域。

4

3 回答 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;

这将使它们按照我想要的方式排列。

于 2013-03-14T20:47:15.237 回答
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 中使用此代码。

于 2013-12-12T01:08:46.333 回答
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);    
        }                
    }            
}
于 2016-03-02T14:25:19.343 回答