如何在System.Windows.Forms.DataVisualization.Charting中自定义图例项顺序并配置图例位置
如何在System.Windows.Forms.DataVisualization.Charting中自定义图例项顺序并配置图例位置
嘿,我来帮你搞定这个图表图例的问题!根据你的需求——把Series2和Series3固定放在图例最底部,同时搞清楚怎么把配置好的图例应用到图表、调整图例位置,我给你整理了具体的实现步骤:
一、自定义图例项顺序
图例项默认是跟着Chart中Series集合的顺序走的,所以我们有两种简单的方式来调整顺序:
方法1:调整Series集合的顺序(最简单)
既然你固定要把Series2和Series3放在最后,那直接把它们从Series集合里移除再重新添加,就能让它们排到末尾,图例也会自动跟着这个顺序显示:
public void AdjustSeriesOrder(Chart viscosityChart) { // 先找到要移到最后的两个系列 var series2 = viscosityChart.Series["Series2"]; var series3 = viscosityChart.Series["Series3"]; // 从集合中移除它们 if (series2 != null) viscosityChart.Series.Remove(series2); if (series3 != null) viscosityChart.Series.Remove(series3); // 重新添加到集合末尾,这样图例里它们就会排在最后 if (series2 != null) viscosityChart.Series.Add(series2); if (series3 != null) viscosityChart.Series.Add(series3); }
调用这个方法后,图例顺序就会变成你想要的:Series1 → Series4 → Series5 → Series6 → Series2 → Series3。
方法2:手动创建自定义图例项(更灵活)
如果以后需要更复杂的顺序控制,可以关闭图例的自动生成,手动添加每一项:
public void CreateCustomLegend(Chart viscosityChart) { // 获取默认图例(或者你可以新建一个) Legend customLegend = viscosityChart.Legends[0]; // 关闭自动生成,这样我们可以手动控制图例项 customLegend.IsAutoGenerated = false; // 清空现有图例项 customLegend.Items.Clear(); // 按你想要的顺序逐个添加图例项,这里直接从Series里取颜色和名称,保证和图表一致 customLegend.Items.Add(new LegendItem(viscosityChart.Series["Series1"].Name, viscosityChart.Series["Series1"].Color, "")); customLegend.Items.Add(new LegendItem(viscosityChart.Series["Series4"].Name, viscosityChart.Series["Series4"].Color, "")); customLegend.Items.Add(new LegendItem(viscosityChart.Series["Series5"].Name, viscosityChart.Series["Series5"].Color, "")); customLegend.Items.Add(new LegendItem(viscosityChart.Series["Series6"].Name, viscosityChart.Series["Series6"].Color, "")); customLegend.Items.Add(new LegendItem(viscosityChart.Series["Series2"].Name, viscosityChart.Series["Series2"].Color, "")); customLegend.Items.Add(new LegendItem(viscosityChart.Series["Series3"].Name, viscosityChart.Series["Series3"].Color, "")); }
二、将修改后的图例应用到Chart上
其实你不需要额外“传递”图例对象——Chart默认已经自带一个图例(存在Legends[0]里),直接修改这个对象的属性就会生效。如果要新增一个图例的话,可以这样做:
public void AddNewLegend(Chart viscosityChart) { // 创建新图例 Legend newLegend = new Legend("MyCustomLegend"); // 配置图例的各种属性(比如顺序、位置) newLegend.IsAutoGenerated = false; // 将新图例添加到Chart的图例集合 viscosityChart.Legends.Add(newLegend); // 让所有系列关联到这个新图例(可选,如果你想让系列在这个图例里显示) foreach (Series series in viscosityChart.Series) { series.Legend = "MyCustomLegend"; } }
三、配置图例在图表上的位置
你可以通过Docking(停靠)或者自由定位两种方式来设置图例位置:
方式1:停靠式定位
用Docking属性把图例固定在图表的某个边缘,再用Alignment调整对齐方式:
// 停靠在右侧,垂直居中 viscosityChart.Legends[0].Docking = Docking.Right; viscosityChart.Legends[0].Alignment = StringAlignment.Center; // 停靠在底部,左对齐 // viscosityChart.Legends[0].Docking = Docking.Bottom; // viscosityChart.Legends[0].Alignment = StringAlignment.Near;
方式2:自由定位
如果不想停靠,可以关闭停靠,用ElementPosition设置精确位置(数值是相对于图表的百分比,范围0-100):
// 关闭停靠 viscosityChart.Legends[0].Docking = Docking.None; // 设置位置:X从75%处开始,Y从10%处开始,宽度占20%,高度占80% viscosityChart.Legends[0].Position = new ElementPosition(75, 10, 20, 80);
备注:内容来源于stack exchange,提问作者Daniel Levenson
相关产品推荐
相关产品推荐

