【问题标题】:Piechart showing fewer slices than the legend饼图显示的切片数少于图例
【发布时间】:2013-04-10 00:55:50
【问题描述】:

我是一名仍在学习 C# 的学生,但遇到了问题。 我正在尝试制作一个包含 7 个不同字段和 7 个不同图例的图形(饼图)。

我有这个代码:

private void InitializeChart()
        {
            this.components = new System.ComponentModel.Container();
            ChartArea chartArea1 = new ChartArea();
            Legend legend1 = new Legend() 
            {   BackColor = Color.FromArgb(97,97,97), //achtergrondkleur legende
                ForeColor = Color.White, //kleur van tekst in legende
                Title = "Legende grafiek", //titel legende
                TitleForeColor = Color.White}; //kleur titel legende
            pieChart = new Chart();

            ((ISupportInitialize)(pieChart)).BeginInit();

            SuspendLayout();

            //===Pie chart
            chartArea1.Name = "PieChartArea";
            pieChart.ChartAreas.Add(chartArea1);
            pieChart.Height = 300;
            pieChart.Width = 300;
            pieChart.Dock = System.Windows.Forms.DockStyle.Fill;
            legend1.Name = "Legend1";
            pieChart.Legends.Add(legend1);
            pieChart.Location = new System.Drawing.Point(0, 50);

            //====Bar Chart
            chartArea1 = new ChartArea();
            chartArea1.Name = "BarChartArea";

            AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
            AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;      
            this.Load += new EventHandler(StatistiekenForm_Load);
            ((ISupportInitialize)(this.pieChart)).EndInit();
            this.ResumeLayout(false);

        }

        private void LoadPieChart()
        {
            pieChart.Series.Clear();
            pieChart.Width = 300;
            pieChart.Height = 300;
            pieChart.Palette = ChartColorPalette.Excel;
            pieChart.BackColor = Color.Transparent;
            //pieChart.Titles.Add("Overzicht uitgaven");
            pieChart.ChartAreas[0].BackColor = Color.Transparent;
            Series series = new Series
            {
                Name = "Overzicht",
                IsVisibleInLegend = true,
                Color = System.Drawing.Color.FromArgb(97,97,97),
                ChartType = SeriesChartType.Pie
            };
            pieChart.Series.Add(series);

            int teller, prijsje = 50;

            for (teller = 0; teller < 7; teller++)
            {
                series.Points.Add(teller);
                var p1 = series.Points[teller];
                p1.AxisLabel = Convert.ToString(prijsje + "€");
                p1.LegendText = Convert.ToString("legende " + teller);
                prijsje += 50;
            }

            pieChart.Invalidate();
            panelPie.Width = 400;
            panelPie.Height = 400;
            panelPie.Controls.Add(pieChart);
        }

谁能解释一下为什么我一直看到六片,但传说中显示的是七​​片? 您可以在此图像中看到问题: http://i.imgur.com/4xciNUG.png?1

非常感谢, 延特。

【问题讨论】:

  • 如何给每个饼片占整体的一定百分比?换句话说,我看到你的变量prijsje 被用来创建标签,但是它是如何被用来对饼图进行数字划分的呢?
  • 好吧,我已经通过为所有切片赋予相同的值来测试了这一点,它会自动将它们设置为正确的大小。我相信这是由 C# 正确处理的?
  • 在下面查看我的更新答案
  • 对于所有会遇到同样问题的人,我确实找到了解决方法,它不是 100% 合法的,但它可以完成工作。显然,轴的 0 与饼图部分的 0 不同。解决方案:int Teller, prijsje = 50;对于(柜员= 0;柜员
  • Yenthe - 请看下面的答案

标签: c# charts pie-chart


【解决方案1】:

有 7 个切片。第一个太小了,你只能看到一条。尝试将这一行:prijsje += 50 更改为 prijsje += 10。他应该可以让你更好地看到确实有 7 个切片。

更新:

我认为您错误地使用了Add 方法。我认为您在想的是,通过调用series.Points.Add(teller);,C# 正在向集合中的teller 位置添加一个点。这实际上是不正确的。

它所做的是插入一个值为teller 的点。第一个的值为 0,这就是您看不到它的原因。然后下一个的值为1,即“100”标签。然后下一个的值为 2(它是它之前的大小的两倍..1),即“150”标签。如果您要切出“100”切片并将其覆盖在“200”切片的顶部,您可能会通过查看标签认为两个“100”切片可以完全适合一个“200”切片。实际上,三个可以合二为一。原因是分配给“200”切片的值是3。

要解决您的问题,您应该使用Insert method 而不是Add。试试这个:

for (teller = 0; teller < 7; teller++)
{
    var dp = new DataPoint(prijsje, prijsje);
    dp.AxisLabel = Convert.ToString(prijsje + "€");
    dp.LegendText = Convert.ToString("legende " + teller);
    series.Points.Insert(teller, dp);
    prijsje += 50;
}

【讨论】:

  • 非常感谢您提供的解决方案 icemanind!谢谢你的解释,这让它更清楚了。 :) 很大,很大,谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多