2009-05-03 4 views
2

В ZedGraph, как показывать текстовые метки для каждой точки и в XAxis все вместе?Этикетки ZedGraph

Если я

myPane.XAxis.Type = AxisType.Text; 
myPane.XAxis.Scale.TextLabels = array_of_string; 

Я получаю надписи на XAxis как этот

Enter image description here

И если я

for (int i = 0; i < myCurve.Points.Count; i++) 
{ 
    PointPair pt = myCurve.Points[i]; 
    // Create a text label from the Y data value 
    TextObj text = new TextObj(
     pt.Y.ToString("f0"), pt.X, pt.Y + 0.1, 
     CoordType.AxisXYScale, AlignH.Left, AlignV.Center); 
    text.ZOrder = ZOrder.A_InFront; 
    text.FontSpec.Angle = 0; 
    myPane.GraphObjList.Add(text); 
} 

я получаю этикетки на кривой, как это

Alt text, Pointlabel.png

Но если я делаю оба одновременно, на графике исчезают метки.

Есть ли способ комбинировать оба вида этикеток?

+0

Я обновил свой ответ в соответствии с вашими пояснениями – brianpeiris

+0

eKek0, является новым вторым емк e достаточно правильно? –

ответ

8

Я изменил свой ответ после выяснения вопроса. Вы просто должны помнить, чтобы правильно расположить этикетки:

<% 
    System.Collections.Generic.List<ZedGraphWebPointPair> points = new System.Collections.Generic.List<ZedGraphWebPointPair>(); 
    for (int i = 0; i < 15; i++) 
    { 
    // Let's have some fun with maths 
    points.Add(new ZedGraphWebPointPair 
    { 
     X = i, 
     Y = Math.Pow(i - 10, 2) * -1 + 120 
    }); 
    } 

    System.Collections.Generic.List<string> XAxisLabels = new System.Collections.Generic.List<string>(); 

    TestGraph.CurveList.Add(new ZedGraphWebLineItem { Color = System.Drawing.Color.Red }); 
    TestGraph.XAxis.Scale.FontSpec.Size = 9; 

    int j = 1; 
    foreach (ZedGraphWebPointPair point in points) 
    { 
    // Add the points we calculated 
    TestGraph.CurveList[0].Points.Add(point); 

    // Add the labels for the points 
    TestGraph.GraphObjList.Add(new ZedGraphWebTextObj 
    { 
     Location = 
     { 
     CoordinateFrame = ZedGraph.CoordType.XChartFractionYScale, 
     // Make sure we position them according to the CoordinateFrame 
     X = Convert.ToSingle(j)/points.Count - 0.05f, 
     Y = Convert.ToSingle(point.Y) + 3f, 
     AlignV = ZedGraph.AlignV.Top 
     }, 
     Text = point.Y.ToString(), 
     FontSpec = { Angle = 90, Size = 9, Border = { IsVisible = false } } 
    }); 

    // Add the labels for the XAxis 
    XAxisLabels.Add(String.Format("P{0}", j)); 

    j++; 
    } 

    TestGraph.RenderGraph += delegate(ZedGraphWeb zgw, System.Drawing.Graphics g, ZedGraph.MasterPane mp) 
    { 
    ZedGraph.GraphPane gp = mp[0]; 
    gp.XAxis.Type = ZedGraph.AxisType.Text; 
    gp.XAxis.Scale.TextLabels = XAxisLabels.ToArray(); 
    }; 

%> 

Этот код будет производить этот график:

ZedGraph sample http://img5.imageshack.us/img5/6697/testgraph2.png

0

Если тип оси текст, приведенный ниже код легче получить х -координаты точек;)

for (int tPoint = 0; tPoint < curve.Points.Count; tPoint++) 
{ 
    TextObj text = new TextObj(curve.Points[tPoint].Y.ToString(), curve.Points[tPoint].X, curve.Points[tPoint].Y + 10); 
}