1 回答

TA貢獻1804條經驗 獲得超8個贊
默認情況下Labels顯示 y 值,但您可以Label為每個設置任意值,DataPoint例如當您添加這樣的點時:
int p = myChart.Series["Uncompleted"].Points.AddXY(workType.TypeName, rejections);
myChart.Series["Uncompleted"].Points[p].Label = sometext;
當然,您可以根據需要計算標簽的文本,例如:
string sometext = (workSubmitted / rejections * 100).ToString("0.00") + "%";
請注意,您必須Label在更改計算中的值后更新。不支持自動表達式!
更新
正如我所寫,Label 以列共享的 x 值為中心是很難甚至是不可能的;那是因為 aLabel屬于單個數據點。這是柱形(和條形)類型圖表的一個獨特問題,因為這里系列的點以群集的形式顯示在公共 x 值周圍。(我們可以通過將標簽添加到中點來解決當且僅當我們有奇數個系列時)
所以我們需要使用Annotations. 這是一個函數,它將TextAnnotation以 x 值和兩個數據點的較大 y 值的高度為中心放置..:
void setCenterAnnotation(Chart chart, ChartArea ca,
DataPoint dp1, DataPoint dp2, string lbl)
{
TextAnnotation ta = new TextAnnotation();
ta.Alignment = ContentAlignment.BottomCenter;
ta.AnchorAlignment = ContentAlignment.TopCenter;
DataPoint dp = dp1.YValues[0] > dp2.YValues[0] ? dp1 : dp2;
ta.Height = 0.36f;
ta.AxisX = ca.AxisX;
ta.AxisY = ca.AxisY;
ta.AnchorDataPoint = dp;
ta.AnchorX = dp1.XValue;
ta.Text = lbl;
chart.Annotations.Add(ta);
}
如果你有兩個以上,Series
你最好確定錨點,即之前值較大的那個,然后傳遞它而不是我在這里傳遞的兩個點。
放置/錨定注釋并不是很明顯,所以這里有一些注意事項:
我錨定到 a
DataPoint
以使其顯示在其 y 值的高度。要使用(軸)值進行錨定,必須為其分配一個或兩個軸。
然后我(順序很重要?。┰O置
AnchorX
屬性,使其不以一個點為中心,而是以公共 x 值為中心。我還設置了一些
Height
,否則文本不會在列頂部移動;不太清楚這里的理由是什么..
結果如下:
我在添加點時添加了注釋:
int ix = s1.Points.AddXY(i, rnd.Next(i+7));
s2.Points.AddXY(i, rnd.Next(i+4)+3);
double vmax = Math.Max(s1.Points[ix].YValues[0], s2.Points[ix].YValues[0]);
string lbl = (vmax / 123f).ToString("0.0") + "%";
setCenterAnnotation(chart12, ca, s1.Points[ix], s2.Points[ix], lbl );
- 1 回答
- 0 關注
- 407 瀏覽
添加回答
舉報