C# 饼图透明度,多个饼

C# 饼图透明度,多个饼,c#,winforms,charts,transparency,pie-chart,C#,Winforms,Charts,Transparency,Pie Chart,我想把两个饼图叠在一起。这里的想法是将其中一个变小,这样你只能看到饼图后面的外圈。我尝试使用: chartCalProgres.BackColor = Color.Transparent; chartCalProgres.ChartAreas[0].BackColor = Color.Transparent; 但正如你在下面的链接中看到的,它没有起作用。有人知道如何实现这种效果吗 这在饼图中是不可能的,但在ChartType中可以很好地完成。甜甜圈: 以下是步骤: 1我们需要两个系列和两个

我想把两个饼图叠在一起。这里的想法是将其中一个变小,这样你只能看到饼图后面的外圈。我尝试使用:

chartCalProgres.BackColor = Color.Transparent;
chartCalProgres.ChartAreas[0].BackColor = Color.Transparent;
但正如你在下面的链接中看到的,它没有起作用。有人知道如何实现这种效果吗


这在饼图中是不可能的,但在ChartType中可以很好地完成。甜甜圈:

以下是步骤:

1我们需要两个系列和两个图表区域

2我们需要控制CAs的位置、大小和位置。它们必须重叠并具有正确的尺寸

3我们还需要控制我们使用的两个系列的甜甜圈。这是内半径

4最后,我们需要将内部系列的背景色设置为透明

下面是设置我的示例的代码:

    using System.Windows.Forms.DataVisualization.Charting;
    //..

    Random R = new Random(); //Added to allow code to work
    chart1.Series.Clear();
    Series S1 = chart1.Series.Add("Pie1");
    Series S2 = chart1.Series.Add("Pie2");

    chart1.ChartAreas.Clear();

    ChartArea CA1 = chart1.ChartAreas.Add("Outer");
    ChartArea CA2 = chart1.ChartAreas.Add("Inner");

    CA1.Position = new ElementPosition(0, 0, 100, 100);
    CA2.Position = new ElementPosition(0, 0, 100, 100);

    float innerSize = 60;
    float outerSize = 100;
    float baseDoughnutWidth = 25;

    CA1.InnerPlotPosition = new ElementPosition((100 - outerSize) / 2,
            (100 - outerSize) / 2 + 10, outerSize, outerSize - 10);

    CA2.InnerPlotPosition = new ElementPosition((100 - innerSize) / 2,
            (100 - innerSize) / 2 + 10, innerSize, innerSize - 10);

    S1["DoughnutRadius"] = 
     Math.Min(baseDoughnutWidth * (100 / outerSize), 99).ToString().Replace(",", ".");
    S2["DoughnutRadius"] = 
     Math.Min(baseDoughnutWidth * (100 / innerSize), 99).ToString().Replace(",", ".");
    

    S1.ChartArea = CA1.Name;
    S2.ChartArea = CA2.Name;

    S1.ChartType = SeriesChartType.Doughnut;
    S2.ChartType = SeriesChartType.Doughnut;

    CA2.BackColor = Color.Transparent;
    S1["DoughnutRadius"] = "41"; // leave just a little space!
    S2["DoughnutRadius"] = "99"; // 99 is the limit. a tiny spot remains open

    // test data, optional, R is a Random instance
    for (int i = 0; i < 7; i++)
    {
        S1.Points.AddXY(i, 42 - R.Next(44));
        S2.Points.AddXY(i, 77 - R.Next(88));
    }
}
使用System.Windows.Forms.DataVisualization.Charting;
//..
随机R=新随机()//添加以允许代码工作
图1.Series.Clear();
S1系列=图表1.系列添加(“Pie1”);
S2系列=图表1.系列添加(“Pie2”);
chart1.ChartAreas.Clear();
ChartArea CA1=chart1.ChartAreas.Add(“外部”);
ChartArea CA2=chart1.ChartAreas.Add(“内部”);
CA1.位置=新元素位置(0,0,100,100);
CA2.位置=新元素位置(0,0,100,100);
浮点数=60;
浮球外径=100;
浮动基准甜甜圈宽度=25;
CA1.InnerPlotPosition=新元素位置((100-outerSize)/2,
(100-outerSize)/2+10,outerSize,outerSize-10);
CA2.InnerPlotPosition=新图元位置((100-innerSize)/2,
(100-内部尺寸)/2+10,内部尺寸,内部尺寸-10);
S1[“甜甜圈”]=
Math.Min(baseDoughnutWidth*(100/outerSize),99.ToString().Replace(“,”,”);
S2[“甜甜圈”]=
Math.Min(baseDoughnutWidth*(100/innerSize),99.ToString().Replace(“,”,”);
S1.ChartArea=CA1.Name;
S2.ChartArea=CA2.Name;
S1.ChartType=SerieChartType.Doughnut;
S2.ChartType=SerieChartType.Doughnut;
CA2.BackColor=颜色。透明;
S1[“甜甜圈”]=“41”//留下一点空间!
S2[“甜甜圈”]=“99”//99是极限。一个小地方仍然开放
//测试数据,可选,R为随机实例
对于(int i=0;i<7;i++)
{
S1.点.AddXY(i,42-R.Next(44));
S2.点.AddXY(i,77-R.Next(88));
}
}
注意设置甜甜圈的奇怪方式;还要注意,图表中的许多数字都是图表控件大小的百分比


我找到了代码,这一切都归功于fireblade123,Escener Technologies

这在饼图中是不可能的,但在ChartType中可以很好地完成。甜甜圈:

以下是步骤:

1我们需要两个系列和两个图表区域

2我们需要控制CAs的位置、大小和位置。它们必须重叠并具有正确的尺寸

3我们还需要控制我们使用的两个系列的甜甜圈。这是内半径

4最后,我们需要将内部系列的背景色设置为透明

下面是设置我的示例的代码:

    using System.Windows.Forms.DataVisualization.Charting;
    //..

    Random R = new Random(); //Added to allow code to work
    chart1.Series.Clear();
    Series S1 = chart1.Series.Add("Pie1");
    Series S2 = chart1.Series.Add("Pie2");

    chart1.ChartAreas.Clear();

    ChartArea CA1 = chart1.ChartAreas.Add("Outer");
    ChartArea CA2 = chart1.ChartAreas.Add("Inner");

    CA1.Position = new ElementPosition(0, 0, 100, 100);
    CA2.Position = new ElementPosition(0, 0, 100, 100);

    float innerSize = 60;
    float outerSize = 100;
    float baseDoughnutWidth = 25;

    CA1.InnerPlotPosition = new ElementPosition((100 - outerSize) / 2,
            (100 - outerSize) / 2 + 10, outerSize, outerSize - 10);

    CA2.InnerPlotPosition = new ElementPosition((100 - innerSize) / 2,
            (100 - innerSize) / 2 + 10, innerSize, innerSize - 10);

    S1["DoughnutRadius"] = 
     Math.Min(baseDoughnutWidth * (100 / outerSize), 99).ToString().Replace(",", ".");
    S2["DoughnutRadius"] = 
     Math.Min(baseDoughnutWidth * (100 / innerSize), 99).ToString().Replace(",", ".");
    

    S1.ChartArea = CA1.Name;
    S2.ChartArea = CA2.Name;

    S1.ChartType = SeriesChartType.Doughnut;
    S2.ChartType = SeriesChartType.Doughnut;

    CA2.BackColor = Color.Transparent;
    S1["DoughnutRadius"] = "41"; // leave just a little space!
    S2["DoughnutRadius"] = "99"; // 99 is the limit. a tiny spot remains open

    // test data, optional, R is a Random instance
    for (int i = 0; i < 7; i++)
    {
        S1.Points.AddXY(i, 42 - R.Next(44));
        S2.Points.AddXY(i, 77 - R.Next(88));
    }
}
使用System.Windows.Forms.DataVisualization.Charting;
//..
随机R=新随机()//添加以允许代码工作
图1.Series.Clear();
S1系列=图表1.系列添加(“Pie1”);
S2系列=图表1.系列添加(“Pie2”);
chart1.ChartAreas.Clear();
ChartArea CA1=chart1.ChartAreas.Add(“外部”);
ChartArea CA2=chart1.ChartAreas.Add(“内部”);
CA1.位置=新元素位置(0,0,100,100);
CA2.位置=新元素位置(0,0,100,100);
浮点数=60;
浮球外径=100;
浮动基准甜甜圈宽度=25;
CA1.InnerPlotPosition=新元素位置((100-outerSize)/2,
(100-outerSize)/2+10,outerSize,outerSize-10);
CA2.InnerPlotPosition=新图元位置((100-innerSize)/2,
(100-内部尺寸)/2+10,内部尺寸,内部尺寸-10);
S1[“甜甜圈”]=
Math.Min(baseDoughnutWidth*(100/outerSize),99.ToString().Replace(“,”,”);
S2[“甜甜圈”]=
Math.Min(baseDoughnutWidth*(100/innerSize),99.ToString().Replace(“,”,”);
S1.ChartArea=CA1.Name;
S2.ChartArea=CA2.Name;
S1.ChartType=SerieChartType.Doughnut;
S2.ChartType=SerieChartType.Doughnut;
CA2.BackColor=颜色。透明;
S1[“甜甜圈”]=“41”//留下一点空间!
S2[“甜甜圈”]=“99”//99是极限。一个小地方仍然开放
//测试数据,可选,R为随机实例
对于(int i=0;i<7;i++)
{
S1.点.AddXY(i,42-R.Next(44));
S2.点.AddXY(i,77-R.Next(88));
}
}
注意设置甜甜圈的奇怪方式;还要注意,图表中的许多数字都是图表控件大小的百分比


我找到了代码,这一切都归功于fireblade123,Escener Technologies

这些图表只是两个位图还是动态生成的?动态生成的,在使用程序时会更改。这些图表只是两个位图还是动态生成的?动态生成的,在使用程序时会更改。