Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在C中创建二维分组圆环图#_C#_.net_Winforms_C# 4.0_Charts - Fatal编程技术网

C# 在C中创建二维分组圆环图#

C# 在C中创建二维分组圆环图#,c#,.net,winforms,c#-4.0,charts,C#,.net,Winforms,C# 4.0,Charts,我正在尝试使用VS 2012创建一个2d分组甜甜圈图表C#.net。我能够做到这一点,但输出与期望的输出略有偏差 这是我用来创建图表的表格数据 以下是我用来创建图表的代码: private void GenerateHeapStatsChart() { double HeapTotalStock=0,HeapProcessedStock=0; HeapStatsChart.ChartAreas.Clear(); HeapStatsCha

我正在尝试使用VS 2012创建一个2d分组甜甜圈图表C#.net。我能够做到这一点,但输出与期望的输出略有偏差

这是我用来创建图表的表格数据

以下是我用来创建图表的代码:

private void GenerateHeapStatsChart()

    {
        double HeapTotalStock=0,HeapProcessedStock=0;
        HeapStatsChart.ChartAreas.Clear();
        HeapStatsChart.Series.Clear();
        HeapStatsChart.Legends.Clear();

        List<Heap> heap = Heap.getAllHeap();
        for (int i = 0; i < heap.Count; i++)
        {
            HeapTotalStock += Convert.ToDouble(heap[i].Total_Stock);
            HeapProcessedStock += Convert.ToDouble(heap[i].Processed_Stock);
        }

        HeapStatsChart.Size = new Size(500, 500);

        float baseDoughnutWidth = 25;
        //values 0 to 99

        //Create the outer area
        float outerSize = 100;
        //percent
        ChartArea outerArea = new ChartArea("OUTER_AREA");
        outerArea.Position = new ElementPosition(0, 0, 100, 100);
        //Set the plot position to the middle of the area depending on the size
        outerArea.InnerPlotPosition = new ElementPosition((100 - outerSize) / 2, (100 - outerSize) / 2 + 10, outerSize, outerSize - 10);
        outerArea.BackColor = Color.Linen;
        //Add the area to the chart
        HeapStatsChart.ChartAreas.Add(outerArea);

        //Create the inner area
        float innerSize = 70;
        //percent
        ChartArea innerArea = new ChartArea("INNER_AREA");
        innerArea.Position = new ElementPosition(0, 0, 100, 100);
        innerArea.InnerPlotPosition = new ElementPosition((100 - innerSize) / 2, (100 - innerSize) / 2 + 10, innerSize, innerSize - 10);
        innerArea.BackColor = Color.Transparent;
        HeapStatsChart.ChartAreas.Add(innerArea);

        //Create the outer series
        Series outerSeries = new Series("OUTER_SERIES");
        outerSeries.ChartArea = "OUTER_AREA";
        outerSeries.ChartType = SeriesChartType.Doughnut;
        //Since the areas are different size, the width of each dougnut have to be set in proportion to the 
        //size of the area in order to get the doughnut widths the same.
        outerSeries["DoughnutRadius"] = Math.Min(baseDoughnutWidth * (100 / outerSize), 99).ToString().Replace(",", ".");
        outerSeries.Palette = ChartColorPalette.Pastel;
        //Add points to the series
        DataPoint[] dp = new DataPoint[heap.Count];
        for(int i=0;i<heap.Count;i++)
        {
            dp[i] = new DataPoint(0D, (Convert.ToDouble(heap[i].Total_Stock)*100)/HeapTotalStock);
            dp[i].Label = heap[i].Total_Stock;
            dp[i].LegendText = heap[i].Heap_Name;
            dp[i].LegendToolTip = heap[i].Heap_Name;
            outerSeries.Points.Add(dp[i]);
        }

        //Legend legend1 = new Legend("OuterLegend");
        //HeapStatsChart.Legends.Add(legend1);
        //outerSeries.Legend = "OuterLegend";

        //Add the series to the chart
        HeapStatsChart.Series.Add(outerSeries);

        //Create the inner series
        Series innerSeries = new Series("INNER_SERIES");
        innerSeries.ChartArea = "INNER_AREA";
        innerSeries.ChartType = SeriesChartType.Doughnut;
        innerSeries["DoughnutRadius"] = Math.Min(baseDoughnutWidth * (100 / innerSize), 99).ToString().Replace(",", ".");
        innerSeries.Palette = ChartColorPalette.BrightPastel;

        DataPoint[][] dp1 = new DataPoint[heap.Count][];

        for (int i = 0; i < heap.Count; i++)
        {
            dp1[i] = new DataPoint[3];
            dp1[i][0] = new DataPoint(0D, (Convert.ToDouble(heap[i].Processed_Stock) * 100) / Convert.ToDouble(heap[i].Total_Stock));
            dp1[i][0].Label = heap[i].Processed_Stock;
            innerSeries.Points.Add(dp1[i][0]);
            dp1[i][2] = new DataPoint(0D, (Convert.ToDouble(heap[i].Sold_Stock) * 100) / Convert.ToDouble(heap[i].Total_Stock));
            dp1[i][3].Label = heap[i].Sold_Stock;
            innerSeries.Points.Add(dp1[i][4]);
            dp1[i][2] = new DataPoint(0D, ((Convert.ToDouble(heap[i].Total_Stock) - Convert.ToDouble(heap[i].Processed_Stock) - Convert.ToDouble(heap[i].Sold_Stock)) * 100) / Convert.ToDouble(heap[i].Total_Stock));
            dp1[i][2].Label = (Convert.ToDouble(heap[i].Total_Stock) - Convert.ToDouble(heap[i].Processed_Stock) - Convert.ToDouble(heap[i].Sold_Stock)).ToString();
            innerSeries.Points.Add(dp1[i][2]);
        }
        HeapStatsChart.Series.Add(innerSeries);



        HeapStatsChart.Titles.Add(new Title("Heap Statisitcs",Docking.Top,new Font(new FontFamily("Times New Roman"),14f,FontStyle.Bold),Color.Blue));
        ChartTablePane.Controls.Add(HeapStatsChart, 0, 0);

    }
我如何做到这一点?我需要通过数学计算来达到这个目的吗


感谢您的帮助

我自己找到了答案

只是计算公式中的一个小错误

for (int i = 0; i < heap.Count; i++)
{
                dp1[i] = new DataPoint[3];
                dp1[i][0] = new DataPoint(0D, (Convert.ToDouble(heap[i].Processed_Stock) * 360) / HeapTotalStock);//Convert.ToDouble(heap[i].Total_Stock));
                dp1[i][0].Label = heap[i].Processed_Stock;
                innerSeries.Points.Add(dp1[i][0]);
                dp1[i][1] = new DataPoint(0D, (Convert.ToDouble(heap[i].Sold_Stock) * 360) / HeapTotalStock);//Convert.ToDouble(heap[i].Total_Stock));
                dp1[i][1].Label = heap[i].Sold_Stock;
                innerSeries.Points.Add(dp1[i][1]);
                dp1[i][2] = new DataPoint(0D, ((Convert.ToDouble(heap[i].Total_Stock) - Convert.ToDouble(heap[i].Processed_Stock) - Convert.ToDouble(heap[i].Sold_Stock)) * 360) / HeapTotalStock);//Convert.ToDouble(heap[i].Total_Stock));
                dp1[i][2].Label = (Convert.ToDouble(heap[i].Total_Stock) - Convert.ToDouble(heap[i].Processed_Stock) - Convert.ToDouble(heap[i].Sold_Stock)).ToString();
                innerSeries.Points.Add(dp1[i][2]);
}
for(int i=0;i

希望这篇文章能对其他人有所帮助。

我自己找到了答案

只是计算公式中的一个小错误

for (int i = 0; i < heap.Count; i++)
{
                dp1[i] = new DataPoint[3];
                dp1[i][0] = new DataPoint(0D, (Convert.ToDouble(heap[i].Processed_Stock) * 360) / HeapTotalStock);//Convert.ToDouble(heap[i].Total_Stock));
                dp1[i][0].Label = heap[i].Processed_Stock;
                innerSeries.Points.Add(dp1[i][0]);
                dp1[i][1] = new DataPoint(0D, (Convert.ToDouble(heap[i].Sold_Stock) * 360) / HeapTotalStock);//Convert.ToDouble(heap[i].Total_Stock));
                dp1[i][1].Label = heap[i].Sold_Stock;
                innerSeries.Points.Add(dp1[i][1]);
                dp1[i][2] = new DataPoint(0D, ((Convert.ToDouble(heap[i].Total_Stock) - Convert.ToDouble(heap[i].Processed_Stock) - Convert.ToDouble(heap[i].Sold_Stock)) * 360) / HeapTotalStock);//Convert.ToDouble(heap[i].Total_Stock));
                dp1[i][2].Label = (Convert.ToDouble(heap[i].Total_Stock) - Convert.ToDouble(heap[i].Processed_Stock) - Convert.ToDouble(heap[i].Sold_Stock)).ToString();
                innerSeries.Points.Add(dp1[i][2]);
}
for(int i=0;i
希望这篇文章能对其他人有所帮助

for (int i = 0; i < heap.Count; i++)
{
                dp1[i] = new DataPoint[3];
                dp1[i][0] = new DataPoint(0D, (Convert.ToDouble(heap[i].Processed_Stock) * 360) / HeapTotalStock);//Convert.ToDouble(heap[i].Total_Stock));
                dp1[i][0].Label = heap[i].Processed_Stock;
                innerSeries.Points.Add(dp1[i][0]);
                dp1[i][1] = new DataPoint(0D, (Convert.ToDouble(heap[i].Sold_Stock) * 360) / HeapTotalStock);//Convert.ToDouble(heap[i].Total_Stock));
                dp1[i][1].Label = heap[i].Sold_Stock;
                innerSeries.Points.Add(dp1[i][1]);
                dp1[i][2] = new DataPoint(0D, ((Convert.ToDouble(heap[i].Total_Stock) - Convert.ToDouble(heap[i].Processed_Stock) - Convert.ToDouble(heap[i].Sold_Stock)) * 360) / HeapTotalStock);//Convert.ToDouble(heap[i].Total_Stock));
                dp1[i][2].Label = (Convert.ToDouble(heap[i].Total_Stock) - Convert.ToDouble(heap[i].Processed_Stock) - Convert.ToDouble(heap[i].Sold_Stock)).ToString();
                innerSeries.Points.Add(dp1[i][2]);
}