我有一个带有多个系列的堆积条形图,我想在每个堆栈列的顶部显示堆栈总数作为标签。
答案 0 :(得分:2)
设置系列'按顺序排列'总计'系列具有透明色,未在图例中显示
TgtChart.Series.Add("Series1");
TgtChart.Series["Series1"].Color = System.Drawing.Color.LightGreen;
TgtChart.Series.Add("Series2");
TgtChart.Series["Series12"].Color = System.Drawing.Color.HotPink;
TgtChart.Series.Add("SeriesTotal");
TgtChart.Series["SeriesTotal"].Color = System.Drawing.Color.Transparent;
TgtChart.Series["SeriesTotal"].IsVisibleInLegend = false;
使用所需的X轴标签和Y轴值添加系列点,同时跟踪最高总值 - 稍后需要它。
TgtChart.Series["Series1"].Points.AddXY("XIncrement1", YValueSeries1);
TgtChart.Series["Series2"].Points.AddXY("XIncrement1", YValueSeries2);
TgtChart.Series["SeriesTotal"].Points.AddXY("XIncrement1"], SeriesTotal);
if (maxTot < SeriesTotal) maxTot = SeriesTotal;
浏览总系列中的所有点并将标签设置为等于Y值,然后将Y值设置为所有点的相同值 - 我使用了最高总值的一小部分,因此所有总标签都将具有相同的偏移量。标签总是位于(透明)条的中间,因此您可能需要使用该分数来获得各种堆栈/总计的良好外观。如果堆栈总数为零,我不想显示标签。肯定有一种更清洁的方法可以确保常量SeriesTotal堆栈高度不小于1。
foreach (DataPoint dp in TgtChart.Series["SeriesTotal"].Points)
{
if (TgtChart.Series[ii].Name == "Total RTAs")
{
dp.Label = dp.YValues[0].ToString();
dp.YValues[0] = (int)(maxTot / 20) != 0 ? (int)(maxTot / 20): 1;
if (dp.YValues[0] != 0)
dp.IsValueShownAsLabel = true;
else
dp.IsValueShownAsLabel = false;
}
答案 1 :(得分:0)
Chart1.Series.Add("Total")
Chart1.Series("Total").ChartType = SeriesChartType.Point
Chart1.Series("Total").MarkerSize = 5 'change this to 0 if you don't want a marker at the top of the col.
Chart1.Series("Total").MarkerStyle = MarkerStyle.Diamond
Chart1.Series("Total").IsValueShownAsLabel = True
For k As Integer = 0 To 1 'if there are 2 columns to add
Dim total As Double = 0
For j As Integer = 0 To 1
total += Chart1.Series(j).Points(k).YValues(0)
Next
Chart1.Series("Total").Points.AddY(total)
Next