在选择切片 = true 时查看饼图上的 #VAL 标签而不是系列内部

Posted

技术标签:

【中文标题】在选择切片 = true 时查看饼图上的 #VAL 标签而不是系列内部【英文标题】:View #VAL label on Pie Chart and NOT inside the Series when slice selected = true 【发布时间】:2014-01-03 14:28:02 【问题描述】:

我有一个使用 mschart 创建的饼图,现在我已经对填充的数据进行了硬编码。选择切片时,我希望一个标签出现显示值 - 它现在它现在 aswell在图表(正确) em>上显示,它在系列中显示(不正确)

伪代码

//Diplay chart and data
//Highlight over slices and get #PERCENT (also when selected slice)
//Select slice
//Expand slice
//Display #VAL on slice & NOT in Series
//Re-select slice
//Minimise slice

我有两种方法 - MouseDownMouseMove:(#PERCENT 工具提示可以正常工作)

private void PieChart_MouseDown(object sender, MouseEventArgs e)

    HitTestResult result = PieChart.HitTest(e.X, e.Y);

    // Exit event if no item was clicked on
    if (result.PointIndex < 0)
    
        return;
    

    // Check if data point is already exploded
    bool exploded = (PieChart.Series[0].Points[result.PointIndex].CustomProperties == "Exploded=true");

    // Remove all exploded attributes
    foreach (DataPoint p in PieChart.Series[0].Points)
    
        p.CustomProperties = "PieLabelStyle = Disabled, Exploded = False";
        p.Label = "";
        p.ToolTip = "";
    

    // If data point is already exploded get out
    if (exploded)
    
        return;
    

    // If data point is selected or if legend item is selected
    if (result.ChartElementType == ChartElementType.DataPoint || result.ChartElementType == ChartElementType.LegendItem)
     
        DataPoint point = PieChart.Series[0].Points[result.PointIndex];
        point.Label = "Value: #VAL";
        point.LabelBackColor = Color.Bisque;
        point.LabelBorderColor = Color.Black;
        point.Font = new Font("Calibri Light", 8);
        point.CustomProperties = "PieLabelStyle = Inside, Exploded = True";
    


private void PieChart_MouseMove(object sender, MouseEventArgs e)

    HitTestResult result = PieChart.HitTest(e.X, e.Y);

    foreach (DataPoint point in PieChart.Series[0].Points) // ALL DATA POINTS - SECTIONS OF CHART
    
        point.BackSecondaryColor = Color.Black;
        point.BackHatchStyle = ChartHatchStyle.None;
        point.BorderWidth = 1;
    

    // If a Data Point or a Legend item is selected
    if (result.ChartElementType == ChartElementType.DataPoint || result.ChartElementType == ChartElementType.LegendItem)
    
        this.Cursor = Cursors.Hand;
        DataPoint point = PieChart.Series[0].Points[result.PointIndex];
        point.ToolTip = "Percentage: #PERCENT";
        point.BackSecondaryColor = Color.White;
        point.BackHatchStyle = ChartHatchStyle.Percent25;
        point.BorderWidth = 2;
    
    else
    
        this.Cursor = Cursors.Default;
    

现在做了什么:-

我想要它做什么:-

通知 series7 现在可见,而不是值 - 正确!

尝试的解决方案:

PieChart.Series[0].Points.Add(new DataPoint(1, 1)  LegendText = "aaa" );

point.Label = "Value: #VAL";
point.LegendText = "Series#INDEX";

【问题讨论】:

【参考方案1】:

在填充图表数据时只需使用 DataPoint 的 LegendText 属性:

PieChart.Series[0].Points.Add(new DataPoint(1, 1)  LegendText = "aaa" );
PieChart.Series[0].Points.Add(new DataPoint(1, 2)  LegendText = "bbb" );
PieChart.Series[0].Points.Add(new DataPoint(1, 3)  LegendText = "ccc" );

另一种方法是在每次设置Label时设置LegendText

point.Label = "Value: #VAL";
point.LegendText = "Series#INDEX"; // Or whatever you want

【讨论】:

我试过你的解决方案都不管用:/查看更新的问题。如果选择了数据点或选择了图例(在方法 cmets 中),我将两段代码都放在 MouseDown 方法中。 代码的第一位不应放在MouseDown 事件中。在向图表添加新点时应该使用它。 我已经为你创建了示例项目:download 我尝试了示例项目,看起来工作正常。 Points.Add 应位于 Form_Load 中,如项目所示。如果你把鼠标放在里面,那么每次按下鼠标都会创建一个新点,这就是为什么你有这么多传说 谢谢谢谢谢谢! AGES 我无法理解它!

以上是关于在选择切片 = true 时查看饼图上的 #VAL 标签而不是系列内部的主要内容,如果未能解决你的问题,请参考以下文章

在饼图上填充不同颜色的切片

如何使用dojo在每个条形图或饼图上执行Click事件

如何抑制绘制在饼图上的一些 autopct 值

如何在饼图上显示文字

Legenditemclick 上的 Highcharts 饼图避免切片饼图,但在图例项上显示动画

Chart.js 在饼图上显示标签