2016-07-29 7 views
0

私は4つのデータ系列を表示するために.Net 4のMS Chartコントロールを使用していますが、X軸はdatetime型に設定されています。Datetime型MS上のX軸週末を表示しないでChartコントロール

データに週末の日付が含まれていなくても、グラフに週末が含まれる間隔を日数に設定します。

すべてのシリーズには同じ日付ポイントがありますが、例外は最後の日付から始まり、週末を除く多くの就業日に続きます。

すべてのシリーズのチャートから週末(または価値のない日付)の表示を削除するにはどうすればよいですか?

これはwinforms .Net 4.0アプリケーションです。あなたは何をすべきかであるDateTime、としてx値を追加している

 DateTime dt = DateTime.Now; 
     chart1.ChartAreas[0].AxisX.IntervalType = DateTimeIntervalType.Days; 

     Series test1 = new Series("Test1"); 
     test1.XValueType = ChartValueType.Date; 
     for (int i = 1; i < 7; i++) 
     { 
      //skip the weekend 
      if (dt.DayOfWeek.ToString() == "Saturday") dt = dt.AddDays(1); 
      if (dt.DayOfWeek.ToString() == "Sunday") dt = dt.AddDays(1); 

      test1.Points.AddXY(dt.Date, i); 
      dt = dt.AddDays(1); 
      i++; 
     } 

     chart1.Series.Add(test1); 

     Series test2 = new Series("Test2"); 
     test1.XValueType = ChartValueType.Date; 
     for (int i = 1; i < 7; i++) 
     { 
      //skip the weekend 
      if (dt.DayOfWeek.ToString() == "Saturday") dt = dt.AddDays(1); 
      if (dt.DayOfWeek.ToString() == "Sunday") dt = dt.AddDays(1); 

      test2.Points.AddXY(dt.Date, i); 
      dt = dt.AddDays(1); 
      i++; 
     } 

     chart1.Series.Add(test2); 

     foreach (var series in chart1.Series) 
     { 
      series.ChartType = SeriesChartType.Line; 
      series.BorderWidth = 5; 
      series.IsXValueIndexed=true; 
     } 
     chart1.ChartAreas[0].AxisX.LabelStyle.Angle = 45; 
     chart1.ChartAreas[0].AxisX.LabelStyle.Interval = 1; 

答えて

2

:下の私の問題を再現するためのコードと

foreach (var series in chart2.Series) 
    { 
     series.ChartType = SeriesChartType.Line; 
     series.BorderWidth = 5; 
     series.XValueType = ChartValueType.Date; 
     // I Tried this to remove weekends but it results in the graph showing a big red X 
     series.IsXValueIndexed = true; 
    } 

編集。しかし、デフォルトでは、これは、すべてのx値が、通常はそれらが望むように、比例して配置されることを意味します。

しかし、あなたの場合は例外です、それはさえSeries.IsXValueIndexedプロパティのドキュメントに記載されています。この プロパティがtrueの場合、データポイントはなります

シリーズのすべてのデータポイントは、順次インデックスを使用し、関連するX値にかかわらず、連続してプロットされます( )。つまり、 の「欠落」データポイントはありません。

たとえば、 のX値1,2および4を持つシリーズに3つのデータポイントがあるとします。このプロパティがfalseの場合、X軸には データポイントがありません位置は「3」と表示されます。ただし、 をtrueに設定すると、3つのデータポイントが ポイント1,2,4に順次プロットされ、欠損データ が存在しなくなります。 "3"というラベルの付いたX軸の位置はグラフに表示されません。

あなたは、あなたがのためにデータを持っていないことを知っている 間隔、週末としてなどのためのデータポイントが欠落したくない時にこれが便利です。

しかし注:

あなたは複数の系列を表示しているし、少なくとも一つのシリーズは、すべてのシリーズはを揃える必要があり、 インデックス付きX-値を使用している場合 - つまり、 を持っています同数のデータポイントが必要で、対応するポイントには同じX値の が必要です。

だから、しかし、ほとんどの場合、あなたのシリーズは完全にを揃えなかった、このプロパティを使用して正しかったです。

これらが1つであることを確認するには、しばしばChart.DataManipulator.InsertEmptyPointsオーバーロードの1つを使用できます。残念ながら、それらはすべてSeriesテンプレートではなく、固定Intervalで動作します。

したがって、Seriesにデータがない場合は、Empty DataPointを必ず追加する必要があります。データがデータバインドされている場合は、DataSourceでそれを行う必要があります!

+0

こんにちはTaw、あなたの返信ありがとう、私は上記のコードを私の問題を表示するために追加しました!私はすべてのtest2のものをコメントアウトする場合は、私は赤いXを取得するtest1の両方で動作する 私は両方のシリーズにテスト1とtest2のすべての日付の空のデータポイントを追加する必要がありますか? – Adrian

+0

はい、実際に__wanted__を2つのシリーズ間でリセットせずに 'dt'をカウントアップし続ける場合です。 – TaW

+0

はいこれは実例の単なる例です。シーケンスをプロットし、そのラインを延長する投影を追加します。 空のデータポイントをすべてtest2の初めを超え、test1の終了後に追加するにはどうすればよいですか? 私はそれをどうやって行うのか教えていただけますか? – Adrian

関連する問題