[GH-ISSUE #91] Feature request: Add support for Chart date axes #78

Open
opened 2026-05-05 11:37:15 -06:00 by gitea-mirror · 4 comments
Owner

Originally created by @jmcnamara on GitHub (Jan 12, 2017).
Original GitHub issue: https://github.com/jmcnamara/libxlsxwriter/issues/91

Originally assigned to: @jmcnamara on GitHub.

Add functionality like Python XlsxWriter Data Axes.

See http://xlsxwriter.readthedocs.io/working_with_charts.html#date-category-axes

  • Add date axis
  • Add date min and max
  • Add minor_unit_type
  • Add major_unit_type
  • Difficulty: 2 (Easy 1 - 5 Hard)
  • Priority: 2 (High 1 - 5 Low)

Add +1 as a comment to vote for this feature and to get an update when it is implemented.

Originally created by @jmcnamara on GitHub (Jan 12, 2017). Original GitHub issue: https://github.com/jmcnamara/libxlsxwriter/issues/91 Originally assigned to: @jmcnamara on GitHub. Add functionality like Python XlsxWriter Data Axes. See http://xlsxwriter.readthedocs.io/working_with_charts.html#date-category-axes - [ ] Add date axis - [ ] Add date min and max - [ ] Add minor_unit_type - [ ] Add major_unit_type * Difficulty: 2 (Easy 1 - 5 Hard) * Priority: 2 (High 1 - 5 Low) Add +1 as a comment to vote for this feature and to get an update when it is implemented.
gitea-mirror added the
feature request
label 2026-05-05 11:37:15 -06:00
Author
Owner

@ragundo commented on GitHub (Feb 25, 2017):

+1
Needed for daily/month/year reports generation

<!-- gh-comment-id:282520327 --> @ragundo commented on GitHub (Feb 25, 2017): +1 Needed for daily/month/year reports generation
Author
Owner

@ale275 commented on GitHub (Feb 26, 2017):

+1
perfect for report and trend analysis

<!-- gh-comment-id:282546534 --> @ale275 commented on GitHub (Feb 26, 2017): +1 perfect for report and trend analysis
Author
Owner

@jmcnamara commented on GitHub (Feb 27, 2017):

Hi,

Note, it is currently possible to use an implicit date axis by using date input data for the X-axis, see the example below. This Feature Request is mainly to add an explicit chart date axis option (like Excel) to enable max and min values and a few other features. Also note, the max and min is also currently available if you use a scatter chart (although the units won't be clear).

Example:

#include "xlsxwriter.h"

/* Create a worksheet with a chart. */
int main() {

    lxw_workbook  *workbook  = new_workbook("chart_date.xlsx");
    lxw_worksheet *worksheet = workbook_add_worksheet(workbook, NULL);


    /* Add an Excel date format. */
    lxw_format *date_format = workbook_add_format(workbook);
    format_set_num_format(date_format, "yyyy-mm-dd");

    /* Widen the first column to make the text clearer. */
    worksheet_set_column(worksheet, 0, 0, 20, NULL);

    /* Write some data for the chart. */
    lxw_datetime datetime1 = {.year = 2016, .month = 1, .day = 13};
    lxw_datetime datetime2 = {.year = 2016, .month = 1, .day = 14};
    lxw_datetime datetime3 = {.year = 2016, .month = 1, .day = 15};
    lxw_datetime datetime4 = {.year = 2016, .month = 1, .day = 16};
    lxw_datetime datetime5 = {.year = 2016, .month = 1, .day = 17};
    lxw_datetime datetime6 = {.year = 2016, .month = 1, .day = 18};
    lxw_datetime datetime7 = {.year = 2016, .month = 1, .day = 19};

    worksheet_write_datetime(worksheet, 0, 0, &datetime1, date_format);
    worksheet_write_datetime(worksheet, 1, 0, &datetime2, date_format);
    worksheet_write_datetime(worksheet, 2, 0, &datetime3, date_format);
    worksheet_write_datetime(worksheet, 3, 0, &datetime4, date_format);
    worksheet_write_datetime(worksheet, 4, 0, &datetime5, date_format);
    worksheet_write_datetime(worksheet, 5, 0, &datetime6, date_format);
    worksheet_write_datetime(worksheet, 6, 0, &datetime7, date_format);

    worksheet_write_number(worksheet, 0, 1, 10, NULL);
    worksheet_write_number(worksheet, 1, 1, 20, NULL);
    worksheet_write_number(worksheet, 2, 1, 30, NULL);
    worksheet_write_number(worksheet, 3, 1, 10, NULL);
    worksheet_write_number(worksheet, 4, 1, 30, NULL);
    worksheet_write_number(worksheet, 5, 1, 10, NULL);
    worksheet_write_number(worksheet, 6, 1, 20, NULL);

    /* Create a chart object. */
    lxw_chart *chart = workbook_add_chart(workbook, LXW_CHART_COLUMN);

    /* Add a chart series. */
    chart_add_series(chart, "=Sheet1!$A$1:$A$7", "=Sheet1!$B$1:$B$7");

    /* Rotate the axis data text to make it easier to read. */
    lxw_chart_font font = {.rotation = -30};
    chart_axis_set_num_font(chart->x_axis, &font);

    /* Insert the chart into the worksheet. */
    worksheet_insert_chart(worksheet, CELL("D2"), chart);

    return workbook_close(workbook);
}

Output:
aa_image

<!-- gh-comment-id:282701980 --> @jmcnamara commented on GitHub (Feb 27, 2017): Hi, Note, it is currently possible to use an implicit date axis by using date input data for the X-axis, see the example below. This Feature Request is mainly to add an explicit chart date axis option (like Excel) to enable max and min values and a few other features. Also note, the max and min is also currently available if you use a scatter chart (although the units won't be clear). Example: ```C #include "xlsxwriter.h" /* Create a worksheet with a chart. */ int main() { lxw_workbook *workbook = new_workbook("chart_date.xlsx"); lxw_worksheet *worksheet = workbook_add_worksheet(workbook, NULL); /* Add an Excel date format. */ lxw_format *date_format = workbook_add_format(workbook); format_set_num_format(date_format, "yyyy-mm-dd"); /* Widen the first column to make the text clearer. */ worksheet_set_column(worksheet, 0, 0, 20, NULL); /* Write some data for the chart. */ lxw_datetime datetime1 = {.year = 2016, .month = 1, .day = 13}; lxw_datetime datetime2 = {.year = 2016, .month = 1, .day = 14}; lxw_datetime datetime3 = {.year = 2016, .month = 1, .day = 15}; lxw_datetime datetime4 = {.year = 2016, .month = 1, .day = 16}; lxw_datetime datetime5 = {.year = 2016, .month = 1, .day = 17}; lxw_datetime datetime6 = {.year = 2016, .month = 1, .day = 18}; lxw_datetime datetime7 = {.year = 2016, .month = 1, .day = 19}; worksheet_write_datetime(worksheet, 0, 0, &datetime1, date_format); worksheet_write_datetime(worksheet, 1, 0, &datetime2, date_format); worksheet_write_datetime(worksheet, 2, 0, &datetime3, date_format); worksheet_write_datetime(worksheet, 3, 0, &datetime4, date_format); worksheet_write_datetime(worksheet, 4, 0, &datetime5, date_format); worksheet_write_datetime(worksheet, 5, 0, &datetime6, date_format); worksheet_write_datetime(worksheet, 6, 0, &datetime7, date_format); worksheet_write_number(worksheet, 0, 1, 10, NULL); worksheet_write_number(worksheet, 1, 1, 20, NULL); worksheet_write_number(worksheet, 2, 1, 30, NULL); worksheet_write_number(worksheet, 3, 1, 10, NULL); worksheet_write_number(worksheet, 4, 1, 30, NULL); worksheet_write_number(worksheet, 5, 1, 10, NULL); worksheet_write_number(worksheet, 6, 1, 20, NULL); /* Create a chart object. */ lxw_chart *chart = workbook_add_chart(workbook, LXW_CHART_COLUMN); /* Add a chart series. */ chart_add_series(chart, "=Sheet1!$A$1:$A$7", "=Sheet1!$B$1:$B$7"); /* Rotate the axis data text to make it easier to read. */ lxw_chart_font font = {.rotation = -30}; chart_axis_set_num_font(chart->x_axis, &font); /* Insert the chart into the worksheet. */ worksheet_insert_chart(worksheet, CELL("D2"), chart); return workbook_close(workbook); } ``` Output: ![aa_image](https://cloud.githubusercontent.com/assets/94267/23360629/51089be6-fce4-11e6-82f0-43b45b567be0.png)
Author
Owner

@kruftindustries commented on GitHub (Jan 13, 2026):

Ready for review

<!-- gh-comment-id:3742160149 --> @kruftindustries commented on GitHub (Jan 13, 2026): Ready for review
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: github-starred/libxlsxwriter#78
No description provided.