饼图透明度,多个饼图
Pie Chart transparency, multiple Pies
我想将两个饼图堆叠在一起。这里的想法是让其中一个变小,这样你只能看到后面饼图的外圈。我尝试使用:
chartCalProgres.BackColor = Color.Transparent;
chartCalProgres.ChartAreas[0].BackColor = Color.Transparent;
但是正如您在下面的 link 中看到的那样,它没有用。有人知道如何实现这种效果吗?
饼图无法做到这一点,但您可以使用 ChartType.Doughnut:
步骤如下:
1 我们需要两个 Series 和两个 ChartAreas
2 我们需要控制CA的Position、Size和InnerPlotPosition。它们必须重叠并具有正确的尺寸..
3 我们还需要控制我们使用的两个Series的DoughnutRadius。这是内半径。
4 最后我们需要将内部Series的Backcolor设置为Transparent。
这是设置我的示例的代码:
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));
}
}
注意设置 DoughnutRadius 的奇怪方式;另请注意,图表中的许多数字是图表控件大小的百分比..!
我找到了代码 here,感谢 fireblade123,Escener Technologies!!
我想将两个饼图堆叠在一起。这里的想法是让其中一个变小,这样你只能看到后面饼图的外圈。我尝试使用:
chartCalProgres.BackColor = Color.Transparent;
chartCalProgres.ChartAreas[0].BackColor = Color.Transparent;
但是正如您在下面的 link 中看到的那样,它没有用。有人知道如何实现这种效果吗?
饼图无法做到这一点,但您可以使用 ChartType.Doughnut:
步骤如下:
1 我们需要两个 Series 和两个 ChartAreas
2 我们需要控制CA的Position、Size和InnerPlotPosition。它们必须重叠并具有正确的尺寸..
3 我们还需要控制我们使用的两个Series的DoughnutRadius。这是内半径。
4 最后我们需要将内部Series的Backcolor设置为Transparent。
这是设置我的示例的代码:
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));
}
}
注意设置 DoughnutRadius 的奇怪方式;另请注意,图表中的许多数字是图表控件大小的百分比..!
我找到了代码 here,感谢 fireblade123,Escener Technologies!!