C# MS图表数据值标签
我正在使用MVC中的C#通过MS图表构建一个“堆叠柱”图表。我的图表有3个系列。我试图让每个系列的数据值标签显示在X轴下方,而不是每个列上 我一直在网上搜索,希望能找到一些指向类似布局的指针,但已经两天没有找到C# MS图表数据值标签,c#,asp.net-mvc,charts,mschart,C#,Asp.net Mvc,Charts,Mschart,我正在使用MVC中的C#通过MS图表构建一个“堆叠柱”图表。我的图表有3个系列。我试图让每个系列的数据值标签显示在X轴下方,而不是每个列上 我一直在网上搜索,希望能找到一些指向类似布局的指针,但已经两天没有找到 有人能给我一些关于如何完成相同位置的数据值标签排列的指针吗 这里是最简单的解决方案。它的样式不是很好,但只需要几行: var months = new[] { "Jan", "Feb", "Mar", "Apr", "May", "Jun",
有人能给我一些关于如何完成相同位置的数据值标签排列的指针吗 这里是最简单的解决方案。它的样式不是很好,但只需要几行:
var months = new[] { "Jan", "Feb", "Mar", "Apr", "May",
"Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" };
for (int i = 0; i < pointCount; i++)
{
double sum = 0;
string label = "";
for (int j = seriesCount - 1; j >= 0; j--)
{
sum += chart.Series[j].Points[i].YValues[0];
label += "\n" + +chart.Series[j].Points[i].YValues[0] ;
}
chart.Series[0].Points[i].AxisLabel = months[i] + "\n" + sum + label;
}
var months=new[]{“一月”、“二月”、“三月”、“四月”、“五月”,
“六月”、“七月”、“八月”、“九月”、“十月”、“十一月”、“十二月”};
对于(int i=0;i=0;j--)
{
sum+=图表.系列[j].点[i].Y值[0];
label+=“\n”++图表.系列[j].点[i].Y值[0];
}
chart.Series[0]。Points[i]。AxisLabel=months[i]+“\n”+sum+label;
}
这会将标签字符串添加到第一个系列的每个数据点。注意,每个点只能显示一个这样的标签;稍后系列中的标签将被忽略
使用合适的计数器和标签月份部分所需的任何东西
为了获得更好的外观,比如粗体和彩色背景,你需要做更多的工作
请注意,标签和序列中的数字是反向堆叠的,因此内部循环是反向的
这将适用于任何数量的系列。以下是使用延迟事件的变体:
图表样式几乎占据了代码的大部分:
chart.BackColor = Color.DarkSlateGray;
ChartArea ca = chart.ChartAreas[0];
chart.Legends[0].Alignment = StringAlignment.Center;
chart.Legends[0].Docking = Docking.Top;
chart.Legends[0].BackColor = chart.BackColor;
chart.Legends[0].ForeColor = Color.White;
Legend L = chart.Legends[0];
L.CustomItems.Add(Color.Silver, "Sum");
ca.BackColor = Color.LightSteelBlue;
ca.Position = new ElementPosition(2, 8, 93, 70); // make room
ca.Area3DStyle.Enable3D = true;
ca.Area3DStyle.PointDepth = 25;
ca.Area3DStyle.WallWidth = 0;
ca.AxisX.MajorGrid.Enabled = false;
ca.AxisY.MajorGrid.LineColor = Color.White;
ca.AxisY.LineColor = Color.White;
ca.AxisY.LabelStyle.ForeColor = Color.White;
ca.AxisY.MajorTickMark.LineColor = Color.White;
ca.AxisX.LabelStyle.Enabled = false;
ca.AxisX.LineColor = Color.White;
ca.AxisX.MajorTickMark.Enabled = false;
使用ITE颜色创建系列
后,您需要应用它们,以便可以在代码中访问它们:
chart1.ApplyPaletteColors();
系列
s的漂亮圆形列是由CustomProperty
s.SetCustomProperty("DrawingStyle", "Cylinder");
更多详情:
chart.Series[1].Color = Color.Crimson;
chart.Series[0].LegendText = "Hobbits";
..
更新:您需要在我的其他一些帖子中包括两个函数InnerPlotPositionClientRectangle
和ChartAreaClientRectangle
,如或
要做到这一点,请在PageLoad
中连接事件:
chart1.PostPaint += new EventHandler<ChartPaintEventArgs>(chart1_PostPaint);
chart1.PostPaint+=新事件处理程序(chart1\u PostPaint);
这有点棘手。请参阅,以获取一个看起来不错但未与列对齐的示例。或者在标签中插入换行符,这很简单,但看起来并不好看。。或者你可以尝试自己画,这将能够做到这两个,但可能是最难的解决方案..非常感谢你TaW。这对我来说是一个很好的开始。我用尽了所有其他方法。上帝保佑你,先生。在研究了第一个答案后,你可能想看看第二个答案。我在模仿你发布的图片时玩得很开心,正如你所看到的:-)这甚至更好,颜色看起来也很漂亮。Taw,我正在使用Asp.NETMVC;我将无法使用“private void chart1_PostPaint(对象发送者,ChartPaintEventArgs e)”,因为它是针对windows版本的。是否存在调用此过程的变通方法?谢谢那么,在(MSDN)()中查到之后,我想它应该在ASP中工作得差不多。我不使用ASP,所以我不能发布实际的代码,但是参数看起来是一样的,所以应该可以工作。谢谢TaW!我使用了上面的链接:效果很好。我需要添加颜色并使框变宽。我还尝试使用您在上面的第一条注释中指定的书面代码,但是结果不好,所以我跳过了这种方法。我忘了提到MVC for asp.net没有创建页面加载事件的选项。我将查看是否有其他方法获得颜色。谢谢TaW。
chart.Series[1].Color = Color.Crimson;
chart.Series[0].LegendText = "Hobbits";
..
chart1.PostPaint += new EventHandler<ChartPaintEventArgs>(chart1_PostPaint);