2012-02-17 31 views
7

Được rồi vì vậy tôi có trục x ngày giờ trên MSChart. Tôi muốn âm mưu tháng dưới đầu tiên của mỗi tháng và năm dưới sự thay đổi của một năm. Dưới đây là những gì tôi có cho đến thời điểm này:Nhãn trục phụ không hoạt động?

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

Tuy nhiên vì lý do nào đó bỏ qua một số tháng ... Những năm này không hiển thị.

rdate là một mảng datetime được sử dụng để điền trục x.

Dưới đây là một ví dụ về những gì mã của tôi không: enter image description here

Như bạn có thể thấy, các nhãn được hành xử bất ngờ. Tôi cũng muốn hiển thị một dấu tick lớn hơn cho những ngày này, và giảm số lượng nhãn ngày dựa trên phạm vi ngày, nhưng tôi đang thua lỗ. Có ai làm chuyện này trước đây không?

Trả lời

3

Gần đây, tôi đã gặp sự cố tương tự với MSChart khi thêm quá nhiều nhãn vào trục x. Giải pháp đã giảm số lượng bọ ve mà không làm mất dữ liệu.

Cách tiếp cận này phù hợp với tôi nhưng bạn sẽ phải điều chỉnh nó theo nhu cầu cụ thể của bạn.

dataSeries.XValueType = ChartValueType.Auto;

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

sau đó tôi xác định min và max ngày cho dữ liệu nhất định để xác định khoảng thời gian ưu tiên, thực hiện của bạn sẽ thay đổi:

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; 

Chỉ định định dạng nhãn AxisX: Trong trường hợp của bạn y Bạn có thể phải thay đổi Format cùng với khoảng thời gian.

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

Hy vọng rằng có một số bộ phận quan trọng mà sẽ mang lại giá trị cho bạn, nhưng bạn vẫn phải sửa đổi nó cho các nhu cầu cụ thể của bạn.

+0

+1, cảm ơn biểu đồArea.AxisX.LabelStyle.Format, tôi không thể tìm thấy nó cho cuộc sống của tôi ;-) – smirkingman

Các vấn đề liên quan