好的,我在MSChart上有一个日期时间x轴。我想在每个月的第一个月以下绘制数月,并且比一年的变化低几年。这是我到目前为止所做的:
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轴的日期时间数组。
以下是我的代码所做的示例:
如您所见,标签表现出乎意料。我还想为这些日期显示更大的刻度,并根据日期范围减少日标签的数量,但我不知所措。以前有人做过这种事吗?
答案 0 :(得分: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标签格式:
在您的情况下,您可能需要将Format
与间隔一起更改。
chartArea.AxisX.LabelStyle.Format = Thread.CurrentThread.CurrentCulture.DateTimeFormat.ShortDatePattern;
希望有一些关键部分可以为您提供价值,但您仍需根据自己的特殊需求进行修改。