图表中一个轴上的不同标签类型

问题描述:

我在我的应用中使用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

尝试'area.ChartAreas(0)= .AxisX.Interval 1' –

+0

@Mohit Shrivastava它使标签与1天的间隔,但我需要他们出现每小时。 btw与00:00标签不变 – SHKVal

添加CustomLabels帮助;但是如果你想要他们显示一个单独的格式,你将不得不单独添加它们到每个DataPoint

这样做并不像人们所希望的那么简单;有几个重载,但没有一个真的很容易使用。最简单的方法是使用FromPositionToPosition;这些应该被设置为他们在之间之间的DataPoints;这样,他们将很好地集中..

注意,作为X值是真的DateTimes,而是一如既往的图表中,转化为doubles,我们需要将它们转换回到DateTime为正确的格式,还可以使用它们的值计算中间或相当半间隔..

下面是一个例子:

enter image description here

// 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; 
} 
+0

非常感谢您的答案。但如果在00:00没有数据点呢?我创建了不同功能的ChartArea和Series,并且事先不知道我的数据点。所以我需要我的标签来显示尽管传入的数据。有没有办法做到这一点? – SHKVal

+0

嗯,你要求在午夜设置日期标签的代码,不是吗? - 您既可以:修改它以适应其他一些或更宽松的条件,也可以在数据进入时正常工作。但是由于我没有看到它们是如何进来的(添加到点集合或数据绑定等) 。)我不能指导如何做到最好.. – TaW

+0

是的,由于我的第一篇文章,我将它标记为答案)。但在你的例子中,你使用现有的数据点,我想问我可以添加当没有数据点时我的标签。我有一个函数'公众Chart MakeChart(...)'调用'私人ChartArea MakeChartArea(...)'和'私人系列MakeSeries(...)'。所有数据点都在'MakeSeries'函数中计数,并且图表区域在'MakeChartArea'中准备好,我正在试图设置我的标签并且没有数据点。对于'MakeSeries'时间间隔是未知的值。 – SHKVal