C#MSChart-如何创建两个并排共享同一轴的饼图?

C#MSChart-如何创建两个并排共享同一轴的饼图?,c#,charts,mschart,C#,Charts,Mschart,我试图创建两个饼图,并排,共享同一个轴。有没有人有使用MSChart实现这一点的代码示例 我想要实现的示例: 以下是我目前的代码: Chart chart = new Chart(); chart.Width = 800; string PreContractSeriesName = "PreContract"; string ContractSeriesName = "Contract"; //two char

我试图创建两个饼图,并排,共享同一个轴。有没有人有使用MSChart实现这一点的代码示例

我想要实现的示例:

以下是我目前的代码:

        Chart chart = new Chart();
        chart.Width = 800;
        string PreContractSeriesName = "PreContract";
        string ContractSeriesName = "Contract";

        //two chart areas
        chart.ChartAreas.Add(PreContractSeriesName);
        chart.ChartAreas.Add(ContractSeriesName);

        //two pie charts, so two series
        chart.Series.Add(PreContractSeriesName);
        chart.Series.Add(ContractSeriesName);

        //add series to chart area
        chart.Series[PreContractSeriesName].ChartArea = PreContractSeriesName;
        chart.Series[ContractSeriesName].ChartArea = ContractSeriesName;

        //set as pie chart
        chart.Series[PreContractSeriesName].ChartType = SeriesChartType.Pie;
        chart.Series[ContractSeriesName].ChartType = SeriesChartType.Pie;

        chart.ChartAreas[PreContractSeriesName].AlignmentOrientation = AreaAlignmentOrientations.Horizontal;
        chart.ChartAreas[ContractSeriesName].AlignmentOrientation = AreaAlignmentOrientations.Horizontal;

        chart.Series[PreContractSeriesName].Points.AddXY("source1", 100);
        chart.Series[PreContractSeriesName].Points.AddXY("source2", 200);
        chart.Series[PreContractSeriesName].Points.AddXY("source3", 300);
        chart.Series[PreContractSeriesName].Points.AddXY("source4", 400);
        chart.Series[PreContractSeriesName].Points.AddXY("source5", 500);

        chart.Series[ContractSeriesName].Points.AddXY("source1", 140);
        chart.Series[ContractSeriesName].Points.AddXY("source2", 240);
        chart.Series[ContractSeriesName].Points.AddXY("source3", 340);
        chart.Series[ContractSeriesName].Points.AddXY("source4", 440);
        chart.Series[ContractSeriesName].Points.AddXY("source5", 540);

        using (MemoryStream memStream = new MemoryStream())
        {
            chart.SaveImage(memStream, ChartImageFormat.Jpeg);

            return File(memStream.ToArray(), "image/jpeg");
        }
我的代码会在每个图形的顶部生成以下图形:

我想知道:

  • 如何将图表并排对齐
  • 这是共享轴的正确方式吗
  • 有没有人能举例说明如何做到这一点
  • 编辑:

    这是我的更新代码,感谢用户TaW

            Chart chart = new Chart();
            chart.Width = 800;
            string PreContractSeriesName = "PreContract";
            string ContractSeriesName = "Contract";
    
            //two chart areas
            chart.ChartAreas.Add(PreContractSeriesName);
            chart.ChartAreas.Add(ContractSeriesName);
    
            //two pie charts, so two series
            chart.Series.Add(PreContractSeriesName);
            chart.Series.Add(ContractSeriesName);
    
            //add series to chart area
            chart.Series[PreContractSeriesName].ChartArea = PreContractSeriesName;
            chart.Series[ContractSeriesName].ChartArea = ContractSeriesName;
    
            //position chart areas side by side
            chart.ChartAreas[PreContractSeriesName].Position = new ElementPosition(2, 5, 48, 80);
            chart.ChartAreas[ContractSeriesName].Position = new ElementPosition(50, 5, 48, 80);
    
    
            chart.Legends.Add(new Legend() {
                Alignment = StringAlignment.Center,
                Docking = Docking.Bottom }
            );
            chart.Series[ContractSeriesName].IsVisibleInLegend = false;
    
            //set as pie chart
            chart.Series[PreContractSeriesName].ChartType = SeriesChartType.Pie;
            chart.Series[ContractSeriesName].ChartType = SeriesChartType.Pie;
    
            chart.Series[PreContractSeriesName].Points.AddXY("source1", 100);
            chart.Series[PreContractSeriesName].Points.AddXY("source2", 200);
            chart.Series[PreContractSeriesName].Points.AddXY("source3", 300);
            chart.Series[PreContractSeriesName].Points.AddXY("source4", 400);
            chart.Series[PreContractSeriesName].Points.AddXY("source5", 500);
    
            chart.Series[ContractSeriesName].Points.AddXY("source1", 140);
            chart.Series[ContractSeriesName].Points.AddXY("source2", 240);
            chart.Series[ContractSeriesName].Points.AddXY("source3", 340);
            chart.Series[ContractSeriesName].Points.AddXY("source4", 440);
            chart.Series[ContractSeriesName].Points.AddXY("source5", 540);
    

    以下是如何在
    图表中对齐两个
    图表区域
    ca1和ca2:

    ca1.Position = new ElementPosition(2, 5, 48, 80);
    ca2.Position = new ElementPosition(50, 5, 48, 80);
    chart.Legends[0].Docking = Docking.Bottom;
    chart.Legends[0].Alignment = StringAlignment.Center;
    
    请注意,这会将位置硬编码为图表大小的百分比

    您尝试的对齐特性实际上是关于对齐数据,而不是定位图表区域。看他们的!要控制
    图表区的位置
    我们需要保留默认的
    Auto
    设置并选择我们自己的号码

    我把2%放在左边和右边,让这两个
    图表区域坐在一起。我添加了颜色,这样你就可以看到什么是什么

    我在底部留下了15%用于
    图例
    ,该图例停靠在底部并居中

    你需要使用自己的号码

    还请注意,默认情况下,两个Pie都有各自的图例条目。要限制一组条目,可以设置一个系列S2的此属性:

    S2.IsVisibleInLegend = false;
    

    例如,使用调试器时会发生什么。。?同时,仅仅发布代码并期望有人通过它也没有任何好处。。?你能说明你现有的电脑有什么问题吗code@MethodMan谢谢我已经编辑了我的帖子,将我所经历的结果包括在内,并提出了更具体的问题。