2012-02-17 2 views
7

さて、MSChartにdatetime x軸があります。私は毎月の最初の1ヶ月と1年の変化よりも下の年をプロットしたいと思う。ここで私がこれまで持っているものです。セカンダリ軸ラベルが機能しませんか?

for (int i = 0; i < rdate.Length -1 ; i++) 
{ 
    if (rdate[i].Day == 01 && set == 0) 

    chart1.ChartAreas[0].AxisX.CustomLabels.Add(
     rdate[i].AddDays(-20).ToOADate(), rdate[i].AddDays(20).ToOADate(), 
     Convert.ToString(rdate[i].ToString("MMMM")), 1, LabelMarkStyle.None); 
    set = 1; 

    if (rdate[i].Day > 01) 
    set = 0; 

    i++; 

    if (rdate[i].Year > rdate[i-1].Year) 

    chart1.ChartAreas[0].AxisX.CustomLabels.Add(
     rdate[i].AddDays(-20).ToOADate(), rdate[i].AddDays(20).ToOADate(), 
     Convert.ToString(rdate[i].ToString("yyyy")), 2, LabelMarkStyle.None);  
} 

しかし、いくつかの理由で、これは数ヶ月をスキップ...年がまったく表示されません。

rdateは、x軸にデータを格納するために使用される日時配列です。ここで

は私のコードが何をするかの例です: enter image description here

あなたが見ることができるように、ラベルが予期せずに動作しています。私はまた、これらの日付のより大きな目盛りを表示し、日付範囲に基づいて日ラベルの数を減らしたいと思いますが、私は迷っています。誰も前にこの種のことをやった?

答えて

3

x軸にあまりにも多くのラベルを追加すると、MSChartで最近同様の問題が発生しました。このソリューションは、データを失うことなくダニの数を減らしました。

このアプローチは私には役立ちましたが、あなたのニーズに合わせて調整する必要があります。

dataSeries.XValueType = ChartValueType.Auto;

dataSeries.Points.AddXY(record.DateTime, value);

私はその後、分を決定し、最大は、好ましい間隔を決定するために与えられたデータの日付、あなたの実装が異なります。

var totalDays = (maxDate.Value - minDate.Value).TotalDays;

if (totalDays < 60) 
    chartArea.AxisX.IntervalType = DateTimeIntervalType.Days; 
else if (totalDays < 120) 
    chartArea.AxisX.IntervalType = DateTimeIntervalType.Weeks; 
else 
    chartArea.AxisX.IntervalType = DateTimeIntervalType.Months; 

指定AxisXラベル形式: あなたの場合y間隔と一緒にFormatを変更する必要があります。

chartArea.AxisX.LabelStyle.Format = Thread.CurrentThread.CurrentCulture.DateTimeFormat.ShortDatePattern; 

価値のある重要な部分がありますが、あなたの特定のニーズに合わせて修正する必要があることを願っています。

+0

+1、chartArea.AxisX.LabelStyle.Formatのおかげで、私は私の人生のためにそれを見つけることができませんでした;-) – smirkingman

関連する問題