C# 在两个图表对象之间对齐图表垂直轴
在我的应用程序中,我有两个图形,一个在UI上,另一个在UI上(如靠近显示器顶部)。两个图形的水平轴表示相同的时间范围。它们的垂直轴可能会有很大的不同,所以我想把它们保留为图形。它们提供免费信息,因此,我希望保持它们的水平轴同步,即使它们的垂直轴标签允许它们移动 在这两种情况下,包含这些控件的图表控件具有相同的宽度,只是其中的数据发生了移动 我目前有:C# 在两个图表对象之间对齐图表垂直轴,c#,winforms,user-interface,mschart,C#,Winforms,User Interface,Mschart,在我的应用程序中,我有两个图形,一个在UI上,另一个在UI上(如靠近显示器顶部)。两个图形的水平轴表示相同的时间范围。它们的垂直轴可能会有很大的不同,所以我想把它们保留为图形。它们提供免费信息,因此,我希望保持它们的水平轴同步,即使它们的垂直轴标签允许它们移动 在这两种情况下,包含这些控件的图表控件具有相同的宽度,只是其中的数据发生了移动 我目前有: 10000| 8000| 6000| 4000| 2000| 0 --------------------------------
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
它们最初是单独的图表控件。我试着把它们和不同的图表区域放在同一个图表控件中,但没有解决问题
我怎样才能做到这一点?我希望它们位于单独的图表控件上,但如果有必要,我可以选择单独的图表区域。我最终找到了答案。我仍然希望在不同的图表控件中使用它,但是,如果它们是同一图表控件中的不同图表区域,则可以使用
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;
这将按照我想要的方式排列它们。答案已经晚了,但请为想要这个答案的人写信。
我的答案是使用其他图表
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中使用此代码。对于实时同步多重字符,如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);
}
}
}