Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

Tags:

c#

excel

epplus

Making a chart using secondary axis, makes my chart primary y-axis is shown with some values which I don't want to have.

Only x-axis and secondary y-axis. and also the x-axis is drawn without the date values what I've passed.

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.

Details about the series taken enter image description here

Output: exceloutput

Input input

like image 953
Annadate Piyush Avatar asked Mar 17 '23 00:03

Annadate Piyush


1 Answers

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.

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. 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();
    }
}

enter image description here

like image 65
Ernie S Avatar answered Apr 09 '23 01:04

Ernie S