简体   繁体   English

将辅助轴用于图表会导致 x 轴和主 y 轴问题 (Excel)

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

Making a chart using secondary axis, makes my chart primary y-axis is shown with some values which I don't want to have.使用辅助轴制作图表,使我的图表主y-axis显示一些我不想要的值。

Only x-axis and secondary y-axis .只有x-axis和次要y-axis and also the x-axis is drawn without the date values what I've passed.并且x-axis的绘制没有我通过的日期值。

Code:代码:

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

and Scale Function only assigns the header names and all.和 Scale Function 仅分配标题名称和所有内容。

Details about the series taken有关拍摄的系列的详细信息在此处输入图片说明

Output:输出:输出

Input输入输入

Hard to say without more code.没有更多的代码很难说。 What are those functions doing exactly?这些功能究竟在做什么?

Are you trying to just get the axis on the right side?你是想把轴放在右边吗? Based on the black chart you posted that would seem like what you are after.根据您发布的黑色图表,这看起来像是您所追求的。 You could just do chartType.YAxis.Crosses = eCrosses.Max .你可以只做chartType.YAxis.Crosses = eCrosses.Max

Or do you actually want TWO axes which would require two charts/series?或者你真的想要两个需要两个图表/系列的轴? If you want that then you would need to create a second chart based on the first (looks like your function might be doing that) and then add a unique series to each but with a common x-value dataset.如果需要,则需要基于第一个图表创建第二个图表(看起来您的函数可能正在这样做),然后向每个图表添加一个唯一的系列,但使用通用的 x 值数据集。 Just make sure you add them in the right order.只要确保以正确的顺序添加它们。

This shows both scenarios:这显示了两种情况:

[TestMethod]
public void Chart_Secondary_Axis_Test()
{
    //http://stackoverflow.com/questions/28540458/using-secondary-axis-for-chart-cause-x-axis-and-primary-y-axis-issue-excel
    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();
    }
}

在此处输入图片说明

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM