2016-05-10 87 views
1

2つのチャート領域を持つチャートコントロール(System.Windows.Forms.DataVisualization)があります。MSチャートのX軸の整列と同期が機能しない

ChartArea2.AlignWithChartArea = "ChartArea1"; 
ChartArea2.AlignmentOrientation = AreaAlignmentOrientations.Vertical; 
ChartArea2.AlignmentStyle  = AreaAlignmentStyles.All; 

これはAlignmentStyleに含まれているにもかかわらず、整列されていないX軸を除いてうまく機能:次のようにChartArea2はChartArea1に整列されます。代わりに、それらの最小、最大、間隔などは独立したままであり、データポイントに従って設定される。

enter image description here

私は同一であるためにそれらを強制的にコードにこれらのプロパティを設定することができる等、同一であるX軸を必要とする、すなわち、MIN、MAX、間隔。ただし、ChartArea1をズームするとすぐに、X軸の位置がずれることがあります。

ズームレベルに関係なく、X軸が互いに鏡映する簡単な方法はありますか?

答えて

0

まあ、彼らは実際すなわち、整列あるにかかわらず、そのラベルの同じ位置に座っているが、彼らは同じ範囲を持っていません。

座席を縦にしてY軸を見ると、X軸のアラインメントが表示されません。異なるフォントサイズを持ちますが、同じ水平位置に座っています。

あなたは、いくつかの値に(ここでは意味Automatic)デフォルトNaNからMinimum & Maximumを設定することで、書いたように、あなたが範囲を設定する必要が同じ範囲を表示したい場合。

そしてときに、他のあなたズームを自動的に限りAreaAlignmentStyles.AxesViewまたはAreaAlignmentStyles.Allが選択されているように、平行にズームインします。

それで、あなたが必要なもの(ズーム​​状態のため。)(unzoomed状態のために)非自動、明示的な範囲の組み合わせであると、適切なAreaAlignmentStyle

AlignmentStyleニーズがあることをことをの1つだけの2つのChartAreasのために作られています。しかしMinimum/Maximum値は両方に設定する必要があります:ズーム状態で

ChartArea CA1 = chart1.ChartAreas[0]; 
ChartArea CA2 = chart1.ChartAreas.Add("ChartArea2"); 

// 2nd CA aligns to the 1st one: 
CA2.AlignWithChartArea = "ChartArea1"; 
CA2.AlignmentOrientation = AreaAlignmentOrientations.Vertical; 
CA2.AlignmentStyle = AreaAlignmentStyles.All; 

// both have the same range: 
CA1.AxisX.Maximum = 30; 
CA2.AxisX.Maximum = 30; 
CA1.AxisX.Minimum = 0; 
CA2.AxisX.Minimum = 0; 

// both are interactively zoomable: 
CA1.AxisX.ScaleView.Zoomable = true; 
CA1.AxisX.ScrollBar.Enabled = true; 
CA1.CursorX.IsUserSelectionEnabled = true; 
CA2.AxisX.ScaleView.Zoomable = true; 
CA2.AxisX.ScrollBar.Enabled = true; 
CA2.CursorX.IsUserSelectionEnabled = true; 

enter image description here

両方ChartAreasはまだ同じ範囲を示し、同じScaleView.ViewMinimum/ScaleView.ViewMaximumを持っている:

enter image description here

ScaleViewの値をテストするコード:

private void chart1_AxisViewChanged(object sender, ViewEventArgs e) 
{ 
    AxisScaleView ASV1X = chart1.ChartAreas[0].AxisX.ScaleView; 
    AxisScaleView ASV2X = chart1.ChartAreas[1].AxisX.ScaleView; 

    label1.Text = "ScaleViews Min/Max: " + ASV1X.ViewMinimum + " - " + ASV1X.ViewMaximum + 
           " | " + ASV2X.ViewMinimum + " - " + ASV2X.ViewMaximum ; 
    } 

だけでなく値を維持することは並ぶだけでなく、あなたがAlignmentStyle = AreaAlignmentStyles.All;を使用する必要が軸の視覚的ディスプレイ、値書式設定の結果や中だけでなくAxisViewか、他の大きな相違点の範囲注意表示するポイントの数がY軸を移動し、X軸がずれて見えることがあります。

+0

そしてそこに問題があります。 minとmaxを設定して整列を開始しても、ズームは期待どおりに機能しません。それらはパラレルでズームインします。しかし、それらのX軸(値)はもはや整列されません(開始点とスケール/間隔が異なります)。 ScaleViewの位置とサイズは両方のグラフで同じですが、ViewMinimumプロパティとViewMaximumプロパティは異なります。この問題は、各グラフの最初のデータポイントが互いに離れているときに最悪です。 – David

+0

私は再現できません。ズームインし、常にx軸に同じ範囲を持ちます。したがって、それらは常に同じViewMinimum/ViewMaximum値を持ちます。あなたがそれを台無しにする仕事で他のコードを持っているかどうか確認してください。 __both__ chartareasのMin&Maxを設定する必要があります! – TaW

+0

私はそれを2つの原因に分けました:1)1つのシリーズに2〜4のデータポイントしかない場合、 OR 2)Xデータポイントの大部分が非整数(すなわち、分数を含む)である場合。私はまだそれのための実行可能な解決策を見つけていない。 – David

関連する問題