// Make the gap between the bars and the labels = 3% of the axis range
float labelOffset;
if (isVertical)
labelOffset = (float)(pane.YAxis.Scale.Max - pane.YAxis.Scale.Min) * 0.03f;
else
labelOffset = (float)(pane.XAxis.Scale.Max - pane.XAxis.Scale.Min) * 0.03f;
// keep a count of the number of BarItems
int curveIndex = 0;
// Get a valuehandler to do some calculations for us
ValueHandler valueHandler = new ValueHandler(pane, true);
// Loop through each curve in the list
foreach (CurveItem curve in pane.CurveList)
{
// work with BarItems only
BarItem bar = curve as BarItem;
if (bar != null)
{
IPointList points = curve.Points;
// Loop through each point in the BarItem
for (int i = 0; i < points.Count; i++)
{
// Get the high, low and base values for the current bar
// note that this method will automatically calculate the "effective" values if the bar is stacked
double baseVal, lowVal, hiVal;
valueHandler.GetValues(curve, i, out baseVal, out lowVal, out hiVal);
// Get the value that corresponds to the center of the bar base
// This method figures out how the bars are positioned within a cluster
float centerVal = (float)valueHandler.BarCenterValue(bar,
bar.GetBarWidth(pane), i, baseVal, curveIndex);
// Create a text label -- note that we have to go back to the original point
// data for this, since hiVal and lowVal could be "effective" values from a bar stack
string barLabelText = (isVertical ? points[i].Y : points[i].X).ToString(valueFormat);
// Calculate the position of the label -- this is either the X or the Y coordinate depending on whether they are horizontal or vertical bars, respectively
float position;
if (isBarCenter)
position = (float)(hiVal + lowVal) / 2.0f;
else
position = (float)hiVal + labelOffset;
// Create the new TextObj
TextObj label;
if (isVertical)
label = new TextObj(barLabelText, centerVal, position);
else
label = new TextObj(barLabelText, position, centerVal);
// Configure the TextObj
//label.Location.CoordinateFrame = CoordType.AxisXYScale;
label.FontSpec.Size = 12;
label.FontSpec.FontColor = Color.RosyBrown;
//label.FontSpec.Angle = 0;
label.Location.AlignH = AlignH.Center;
//label.Location.AlignV = AlignV.Center;
label.FontSpec.Border.IsVisible = false;
label.FontSpec.Fill.IsVisible = false;
// Add the TextObj to the GraphPane
pane.GraphObjList.Add(label);
}
}
curveIndex++;
}
}
代码出处:http://zedgraph.org/wiki/index.php?title=Horizontal_Bar_With_Labels_Demo_v4