将次轴用于图表原因 x-axis 和主要 y-axis 问题 (Excel)

Using secondary axis for chart cause x-axis and primary y-axis issue (Excel)

使用辅助轴制作图表, 使我的图表成为主图表 y-axis 显示了一些我不想拥有的值。

只有 x-axis 和中学 y-axis。 而且 x-axis 是在没有我传递的日期值的情况下绘制的。

代码:

chartType2 = GetChartType(worksheet, chartToDraw, endcolcnt, i, chartType2, chartType);
chartType2.UseSecondaryAxis = true;
Scale(headerString, endcolcnt, worksheet, chartType2, stcol, isFieldSame, endcol, stcolumn1, endrow, startRow);

和 Scale Function 仅分配 header 名称和所有。

拍摄系列的详细信息

输出:

输入

没有更多代码很难说。这些功能到底在做什么?

你是想把轴放在右边吗?根据您发布的黑色图表,这似乎是您所追求的。你可以做 chartType.YAxis.Crosses = eCrosses.Max

或者您真的想要两个需要两个 charts/series 的轴吗?如果你想要,那么你需要基于第一个图表创建第二个图表(看起来你的函数可能正在这样做)然后为每个图表添加一个独特的系列但具有共同的 x 值数据集。只需确保以正确的顺序添加它们即可。

这显示了两种情况:

[TestMethod]
public void Chart_Secondary_Axis_Test()
{
    //
    var existingFile = new FileInfo(@"c:\temp\temp.xlsx");
    if (existingFile.Exists)
        existingFile.Delete();

    using (var pck = new ExcelPackage(existingFile))
    {
        var wsContent = pck.Workbook.Worksheets.Add("Content");

        //Some data
        wsContent.Cells["A1"].Value = "A"; wsContent.Cells["B1"].Value = "B"; wsContent.Cells["C1"].Value = "C"; wsContent.Cells["D1"].Value = "D";
        wsContent.Cells["A2"].Value = 100; wsContent.Cells["A3"].Value = 400; wsContent.Cells["A4"].Value = 200; wsContent.Cells["A5"].Value = 300; wsContent.Cells["A6"].Value = 600; wsContent.Cells["A7"].Value = 500;
        wsContent.Cells["B2"].Value = 300; wsContent.Cells["B3"].Value = 200; wsContent.Cells["B4"].Value = 1000; wsContent.Cells["B5"].Value = 600; wsContent.Cells["B6"].Value = 500; wsContent.Cells["B7"].Value = 200;
        wsContent.Cells["D2"].Value = new DateTime(2015, 1, 1); wsContent.Cells["D3"].Value = new DateTime(2015, 1, 2); wsContent.Cells["D4"].Value = new DateTime(2015, 1, 3); wsContent.Cells["D5"].Value = new DateTime(2015, 1, 4); wsContent.Cells["D6"].Value = new DateTime(2015, 1, 5); wsContent.Cells["D7"].Value = new DateTime(2015, 1, 6);
        const int dataRow = 7;
        const string FORMATDATE = "m/d/yy";
        wsContent.Cells[2, 4, dataRow, 4].Style.Numberformat.Format = FORMATDATE;


        //Single Axis with intersection on the right
        var chart1 = wsContent.Drawings.AddChart("Chart1", eChartType.XYScatterLines);
        chart1.SetSize(600, 400);

        var serie1 = (ExcelScatterChartSerie)chart1.Series.Add(wsContent.Cells[2, 1, dataRow, 1], wsContent.Cells[2, 4, dataRow, 4]);
        serie1.Header = wsContent.Cells[1, 1].Value.ToString();

        chart1.YAxis.Crosses = eCrosses.Max;


        //Dual Axis
        var chart2a = wsContent.Drawings.AddChart("Chart2", eChartType.ColumnStacked);
        chart2a.SetSize(600, 400);
        chart2a.SetPosition(400, 0);

        var serie2a = chart2a.Series.Add(wsContent.Cells[2, 2, dataRow, 2], wsContent.Cells[2, 4, dataRow, 4]);
        serie2a.Header = wsContent.Cells[1, 2].Value.ToString();

        var chart2b = chart2a.PlotArea.ChartTypes.Add(eChartType.XYScatterLines);

        var serie2b = chart2b.Series.Add(wsContent.Cells[2, 1, dataRow, 1], wsContent.Cells[2, 4, dataRow, 4]);
        serie2b.Header = wsContent.Cells[1, 1].Value.ToString();

        chart2b.UseSecondaryAxis = true; //Flip the axes


        pck.Save();
    }
}