我在我的应用中使用System.Windows.Forms.DataVisualization.Charting
,我希望在X轴上添加不同的标签类型,表示时间轴。例如,我想对标签使用"HH:mm"
格式,但是当它00:00
时,我想要显示"dd.MM"
格式。我试图添加cutom标签,但它根本没有效果。
var area = new ChartArea();
area.AxisX.LabelStyle.Format = "HH:mm";
area.AxisX.Interval = 1 / 24.0;
area.AxisX.CustomLabels.Add(1.0, DateTimeIntervalType.Days, "dd.MM");
答案 0 :(得分:1)
添加CustomLabels
将帮助;但是,如果您希望它们显示单独的格式,则必须将它们分别添加到每个 DataPoint
!
这样做并不像人们希望的那么简单;有几个重载但没有一个真的很容易使用。最简单的方法是imo,使用FromPosition
和ToPosition
的方法;然后应将它们设置为在DataPoints
之间 之间正确设置;这样他们就会很好地集中精力......
请注意,由于X值实际上是DateTimes
,但是在图表中始终转换为doubles
,我们需要将它们转换回DateTime
以获得正确的格式并使用他们的价值来计算中间或半个间隔..
以下是一个例子:
// prepare the test chart..
chart1.ChartAreas.Clear();
ChartArea CA = chart1.ChartAreas.Add("CA1");
Random R = new Random(123);
chart1.Series.Clear();
CA.AxisX.MajorTickMark.Interval = 1;
Series S = chart1.Series.Add("S1");
S.Points.Clear();
S.ChartType = SeriesChartType.Column;
S.SetCustomProperty("PixelPointWidth", "10");
// some random data:
DateTime dt0 = new DateTime(2015, 05, 01);
for (int i = 0; i< 40; i++)
{
int p = S.Points.AddXY(dt0.AddHours(i), R.Next(100));
}
// each custom label will be placed centered in a range
// so we need an amount of half an interval..
// this assumes equal spacing..
double ih = (S.Points[0].XValue - S.Points[1].XValue) / 2d;
// now we add a custom label to each data point
for (int i = 0; i < S.Points.Count; i++)
{
DataPoint pt = S.Points[i];
string s = (DateTime.FromOADate(pt.XValue)).ToString("HH:mm");
bool midnite = s == "00:00";
if (midnite) s = DateTime.FromOADate(pt.XValue).ToString("dd.MM.yyyy");
CustomLabel CL = CA.AxisX.CustomLabels.Add(pt.XValue - ih, pt.XValue + ih, s);
CL.ForeColor = midnite ? Color.Blue : Color.Black;
}