2017-08-21 20 views
0

2つのグラフ領域を重ねようとしていました。彼らは同じx値を共有しますが、Yは異なる値とスケールを持ちます。あなたが赤のシリーズが答えをこのサイトを探していた緑のseries.Iと整列していないが、働いていたものを見つけることができませんでした見ることができるように2つのグラフ領域の位置合わせがずれている

Graph picture

:ここ

は、私のコードの結果であります。誰かがなぜ彼らが揃えないのか説明できますか?

コード:あなたのチャートの

using System; 
using System.Drawing; 
using System.Windows.Forms; 
using System.Windows.Forms.DataVisualization.Charting; 

namespace TestGraph 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 

      #region Data 

      // Creating first series 
      Series s1 = new Series(); 
      s1.Name = "Values"; 
      s1.ChartType = SeriesChartType.Column; 
      s1.XValueType = ChartValueType.DateTime; 
      s1.Color = Color.Green; 
      s1.BorderWidth = 2; 

      // Hard Coding test values 
      DataPoint[] values = 
      { 
       new DataPoint(new DateTime(2017, 8, 1).ToOADate(), 10), 
       new DataPoint(new DateTime(2017, 8, 2).ToOADate(), 11), 
       new DataPoint(new DateTime(2017, 8, 3).ToOADate(), 12), 
       new DataPoint(new DateTime(2017, 8, 4).ToOADate(), 13), 
      }; 

      // Adding vales to s1 
      foreach (DataPoint p in values) 
      { 
       s1.Points.Add(p); 
      } 

      // Creating second series 
      Series s2 = new Series(); 
      s2.Name = "Values 2"; 
      s2.ChartType = SeriesChartType.Column; 
      s2.XValueType = ChartValueType.DateTime; 
      s2.Color = Color.Red; 
      s2.BorderWidth = 2; 

      // Hard Coding test values 
      DataPoint[] values2 = 
      { 
       new DataPoint(new DateTime(2017, 8, 1).ToOADate(), 0.1), 
       new DataPoint(new DateTime(2017, 8, 2).ToOADate(), -0.2), 
       new DataPoint(new DateTime(2017, 8, 3).ToOADate(), -0.7), 
       new DataPoint(new DateTime(2017, 8, 4).ToOADate(), 13), 
      }; 

      // Adding vales to s2 
      foreach (DataPoint p in values2) 
      { 
       s2.Points.Add(p); 
      } 

      #endregion 
      #region Charts 

      // Initializing chart 
      Chart mainChart = new Chart(); 
      ChartArea area = new ChartArea(); 
      ChartArea area2 = new ChartArea(); 

      Controls.Add(mainChart); 
      mainChart.Dock = DockStyle.Fill; 

      // Adding areas to mainChart 
      mainChart.ChartAreas.Add(area); 
      mainChart.ChartAreas.Add(area2); 

      // Adding series to areas 
      s1.ChartArea = area.Name; 
      s2.ChartArea = area2.Name; 

      mainChart.Series.Add(s1); 
      mainChart.Series.Add(s2); 

      // Aligning areas 
      // Overlapping area2 with area 
      area2.AlignmentStyle = AreaAlignmentStyles.All; 
      area2.AlignmentOrientation = AreaAlignmentOrientations.All; 
      area2.AlignWithChartArea = area.Name; 

      // Scale actualization 
      area2.RecalculateAxesScale(); 
      area.RecalculateAxesScale(); 

      // Defining Y scale 
      area2.AxisY.Maximum = 2; 
      area2.AxisY.Minimum = -2; 

      area2.BackColor = Color.Transparent; 

      // Disabling unnecessary graphics 
      area2.BackGradientStyle = GradientStyle.None; 
      area2.AxisX.IsMarginVisible = false; 

      area2.AxisX.LabelStyle.Enabled = false; 
      area2.AxisY.LabelStyle.Enabled = false; 

      area2.AxisX.Enabled = AxisEnabled.False; 
      area2.AxisY.Enabled = AxisEnabled.False; 

      // Resizing chart back to 100% 
      area.Position = new ElementPosition(0, 0, 100, 100); 

      #endregion 
     } 
    } 
} 

答えて

0

いずれかに該当するAxisX.IsMarginVisibleセット、falseに他の、それゆえのミスマッチを持っています。

しかし、重複する系列をプロットしようとすると、なぜこの問題をすべて解決するのではなく、同じグラフ領域に追加していないのですか?

+0

異なるスケールであるため、s1の値はゼロから数千、s2からマイナス1:1になります。私がそれらをプロットすると、s2は単なる直線になります。どちらが悪いですか。 これまでのところ、2番目のChartAreaを手作業で設定したスケールがありました。 'area.Position = new ElementPosition(0、0、100、100); ' ' area2.Position = new ElementPosition(4.2f、 0、87.35f、100); ' しかし、私はメインがカップルのケースでのみ動作できるように、より洗練されたソリューションがあると確信しています。 – MrJW

+0

https://stackoverflow.com/questions/15805121/c-sharp-winforms-creating-a-chart-with-multiple-y-axis-3-or-more – zeFrenchy

+0

いずれにしても、「area2.AxisX .IsMarginVisible = false; ''または '' area1.AxisX.IsMarginVisible = true; ''を追加すると、問題が解決するはずです。 – zeFrenchy

関連する問題