2012-02-17 25 views
7

Tamam, bir MSChart üzerinde bir datetime x eksenim var. Her ayın ilkinin altında aylar ve bir yılın değişiminin altında yıllar çizmek istiyorum. İşte ben bugüne kadar ne var: İkincil eksen etiketleri çalışmıyor mu?

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);  
} 

Ancak nedense bu birkaç ay ... yıl hiç görünmüyor atlar.

rdate, x eksenini doldurmak için kullanılan bir datetime dizisidir. enter image description here

Gördüğünüz gibi , etiketler beklenmedik davranıyor: İşte

kodum ne bir örnektir. Ayrıca, bu tarihler için daha büyük bir onay işareti göstermek ve tarih aralığına göre gün sayısı etiketlerini azaltmak istiyorum, ancak bir kayıp yaşıyorum. Daha önce böyle bir şeyi yapan var mı?

cevap

3

Son zamanlarda x eksenine çok fazla etiket eklerken MSChart ile benzer bir sorun yaşadım. Çözelti, veri kaybetmeden kene sayısını azaltmıştır.

Bu yaklaşım benim için çalıştı, ancak bunu özel gereksinimlerinize uyarlamanız gerekecek.

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

dataSeries.XValueType = ChartValueType.Auto;

Daha sonra min belirlenmiş ve maksimum tercih edilen aralığını belirlemek için verilen veriler için büyük, uygulamaya koyma değişir:

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; 

belirtme AxisX etiket formatı: Sizin durumunuzda y Ou, aralıklarla birlikte Format'u değiştirmek zorunda kalabilir.

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

Umarım sizin için değerini sağlayacak bazı temel parçalar vardır ancak yine belirli ihtiyaçları için bunu değiştirmek zorundayız.

+0

+1, chartArea.AxisX.LabelStyle.Format için teşekkürler, hayatım boyunca bulamadık ;-) – smirkingman

İlgili konular