kmadej_fast_excel_fork 0.2.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (119) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +13 -0
  3. data/.travis.yml +28 -0
  4. data/CHANGELOG.md +13 -0
  5. data/Gemfile +17 -0
  6. data/Gemfile.lock +70 -0
  7. data/Makefile +14 -0
  8. data/README.md +95 -0
  9. data/Rakefile +24 -0
  10. data/appveyor.yml +25 -0
  11. data/benchmarks/1k_rows.rb +59 -0
  12. data/benchmarks/20k_rows.rb +26 -0
  13. data/benchmarks/init.rb +59 -0
  14. data/benchmarks/memory.rb +49 -0
  15. data/examples/example.rb +42 -0
  16. data/examples/example_align.rb +23 -0
  17. data/examples/example_chart.rb +21 -0
  18. data/examples/example_colors.rb +37 -0
  19. data/examples/example_formula.rb +18 -0
  20. data/examples/example_image.rb +13 -0
  21. data/examples/example_styles.rb +27 -0
  22. data/examples/logo.png +0 -0
  23. data/extconf.rb +0 -0
  24. data/fast_excel.gemspec +20 -0
  25. data/lib/fast_excel.rb +600 -0
  26. data/lib/fast_excel/binding.rb +2819 -0
  27. data/lib/fast_excel/binding/chart.rb +2666 -0
  28. data/lib/fast_excel/binding/format.rb +1177 -0
  29. data/lib/fast_excel/binding/workbook.rb +338 -0
  30. data/lib/fast_excel/binding/worksheet.rb +1555 -0
  31. data/libxlsxwriter/.gitignore +49 -0
  32. data/libxlsxwriter/.indent.pro +125 -0
  33. data/libxlsxwriter/.travis.yml +25 -0
  34. data/libxlsxwriter/CONTRIBUTING.md +226 -0
  35. data/libxlsxwriter/Changes.txt +557 -0
  36. data/libxlsxwriter/LICENSE.txt +89 -0
  37. data/libxlsxwriter/Makefile +156 -0
  38. data/libxlsxwriter/Readme.md +78 -0
  39. data/libxlsxwriter/cocoapods/libxlsxwriter-umbrella.h +30 -0
  40. data/libxlsxwriter/cocoapods/libxlsxwriter.modulemap +7 -0
  41. data/libxlsxwriter/include/xlsxwriter.h +23 -0
  42. data/libxlsxwriter/include/xlsxwriter/app.h +79 -0
  43. data/libxlsxwriter/include/xlsxwriter/chart.h +3476 -0
  44. data/libxlsxwriter/include/xlsxwriter/common.h +372 -0
  45. data/libxlsxwriter/include/xlsxwriter/content_types.h +74 -0
  46. data/libxlsxwriter/include/xlsxwriter/core.h +51 -0
  47. data/libxlsxwriter/include/xlsxwriter/custom.h +52 -0
  48. data/libxlsxwriter/include/xlsxwriter/drawing.h +111 -0
  49. data/libxlsxwriter/include/xlsxwriter/format.h +1214 -0
  50. data/libxlsxwriter/include/xlsxwriter/hash_table.h +76 -0
  51. data/libxlsxwriter/include/xlsxwriter/packager.h +80 -0
  52. data/libxlsxwriter/include/xlsxwriter/relationships.h +77 -0
  53. data/libxlsxwriter/include/xlsxwriter/shared_strings.h +83 -0
  54. data/libxlsxwriter/include/xlsxwriter/styles.h +77 -0
  55. data/libxlsxwriter/include/xlsxwriter/theme.h +47 -0
  56. data/libxlsxwriter/include/xlsxwriter/third_party/ioapi.h +214 -0
  57. data/libxlsxwriter/include/xlsxwriter/third_party/queue.h +694 -0
  58. data/libxlsxwriter/include/xlsxwriter/third_party/tmpfileplus.h +53 -0
  59. data/libxlsxwriter/include/xlsxwriter/third_party/tree.h +801 -0
  60. data/libxlsxwriter/include/xlsxwriter/third_party/zip.h +375 -0
  61. data/libxlsxwriter/include/xlsxwriter/utility.h +166 -0
  62. data/libxlsxwriter/include/xlsxwriter/workbook.h +757 -0
  63. data/libxlsxwriter/include/xlsxwriter/worksheet.h +2641 -0
  64. data/libxlsxwriter/include/xlsxwriter/xmlwriter.h +178 -0
  65. data/libxlsxwriter/lib/.gitignore +0 -0
  66. data/libxlsxwriter/libxlsxwriter.podspec +47 -0
  67. data/libxlsxwriter/src/Makefile +130 -0
  68. data/libxlsxwriter/src/app.c +443 -0
  69. data/libxlsxwriter/src/chart.c +6346 -0
  70. data/libxlsxwriter/src/content_types.c +345 -0
  71. data/libxlsxwriter/src/core.c +293 -0
  72. data/libxlsxwriter/src/custom.c +224 -0
  73. data/libxlsxwriter/src/drawing.c +746 -0
  74. data/libxlsxwriter/src/format.c +729 -0
  75. data/libxlsxwriter/src/hash_table.c +223 -0
  76. data/libxlsxwriter/src/packager.c +948 -0
  77. data/libxlsxwriter/src/relationships.c +245 -0
  78. data/libxlsxwriter/src/shared_strings.c +266 -0
  79. data/libxlsxwriter/src/styles.c +1088 -0
  80. data/libxlsxwriter/src/theme.c +348 -0
  81. data/libxlsxwriter/src/utility.c +515 -0
  82. data/libxlsxwriter/src/workbook.c +1930 -0
  83. data/libxlsxwriter/src/worksheet.c +5022 -0
  84. data/libxlsxwriter/src/xmlwriter.c +355 -0
  85. data/libxlsxwriter/third_party/minizip/Makefile +44 -0
  86. data/libxlsxwriter/third_party/minizip/Makefile.am +45 -0
  87. data/libxlsxwriter/third_party/minizip/Makefile.orig +25 -0
  88. data/libxlsxwriter/third_party/minizip/MiniZip64_Changes.txt +6 -0
  89. data/libxlsxwriter/third_party/minizip/MiniZip64_info.txt +74 -0
  90. data/libxlsxwriter/third_party/minizip/README.txt +5 -0
  91. data/libxlsxwriter/third_party/minizip/configure.ac +32 -0
  92. data/libxlsxwriter/third_party/minizip/crypt.h +131 -0
  93. data/libxlsxwriter/third_party/minizip/ioapi.c +247 -0
  94. data/libxlsxwriter/third_party/minizip/ioapi.h +208 -0
  95. data/libxlsxwriter/third_party/minizip/iowin32.c +456 -0
  96. data/libxlsxwriter/third_party/minizip/iowin32.h +28 -0
  97. data/libxlsxwriter/third_party/minizip/make_vms.com +25 -0
  98. data/libxlsxwriter/third_party/minizip/miniunz.c +660 -0
  99. data/libxlsxwriter/third_party/minizip/miniunzip.1 +63 -0
  100. data/libxlsxwriter/third_party/minizip/minizip.1 +46 -0
  101. data/libxlsxwriter/third_party/minizip/minizip.c +520 -0
  102. data/libxlsxwriter/third_party/minizip/minizip.pc.in +12 -0
  103. data/libxlsxwriter/third_party/minizip/mztools.c +291 -0
  104. data/libxlsxwriter/third_party/minizip/mztools.h +37 -0
  105. data/libxlsxwriter/third_party/minizip/unzip.c +2125 -0
  106. data/libxlsxwriter/third_party/minizip/unzip.h +437 -0
  107. data/libxlsxwriter/third_party/minizip/zip.c +2007 -0
  108. data/libxlsxwriter/third_party/minizip/zip.h +367 -0
  109. data/libxlsxwriter/third_party/tmpfileplus/Makefile +42 -0
  110. data/libxlsxwriter/third_party/tmpfileplus/tmpfileplus.c +342 -0
  111. data/libxlsxwriter/third_party/tmpfileplus/tmpfileplus.h +53 -0
  112. data/libxlsxwriter/version.txt +1 -0
  113. data/test/date_test.rb +22 -0
  114. data/test/default_format_test.rb +19 -0
  115. data/test/format_test.rb +171 -0
  116. data/test/test_helper.rb +52 -0
  117. data/test/tmpfile_test.rb +23 -0
  118. data/test/worksheet_test.rb +86 -0
  119. metadata +182 -0
@@ -0,0 +1,3476 @@
1
+ /*
2
+ * libxlsxwriter
3
+ *
4
+ * Copyright 2014-2017, John McNamara, jmcnamara@cpan.org. See LICENSE.txt.
5
+ *
6
+ * chart - A libxlsxwriter library for creating Excel XLSX chart files.
7
+ *
8
+ */
9
+
10
+ /**
11
+ * @page chart_page The Chart object
12
+ *
13
+ * The Chart object represents an Excel chart. It provides functions for
14
+ * adding data series to the chart and for configuring the chart.
15
+ *
16
+ * See @ref chart.h for full details of the functionality.
17
+ *
18
+ * @file chart.h
19
+ *
20
+ * @brief Functions related to adding data to and configuring a chart.
21
+ *
22
+ * The Chart object represents an Excel chart. It provides functions for
23
+ * adding data series to the chart and for configuring the chart.
24
+ *
25
+ * A Chart object isn't created directly. Instead a chart is created by
26
+ * calling the `workbook_add_chart()` function from a Workbook object. For
27
+ * example:
28
+ *
29
+ * @code
30
+ *
31
+ * #include "xlsxwriter.h"
32
+ *
33
+ * int main() {
34
+ *
35
+ * lxw_workbook *workbook = new_workbook("chart.xlsx");
36
+ * lxw_worksheet *worksheet = workbook_add_worksheet(workbook, NULL);
37
+ *
38
+ * // User function to add data to worksheet, not shown here.
39
+ * write_worksheet_data(worksheet);
40
+ *
41
+ * // Create a chart object.
42
+ * lxw_chart *chart = workbook_add_chart(workbook, LXW_CHART_COLUMN);
43
+ *
44
+ * // In the simplest case we just add some value data series.
45
+ * // The NULL categories will default to 1 to 5 like in Excel.
46
+ * chart_add_series(chart, NULL, "=Sheet1!$A$1:$A$5");
47
+ * chart_add_series(chart, NULL, "=Sheet1!$B$1:$B$5");
48
+ * chart_add_series(chart, NULL, "=Sheet1!$C$1:$C$5");
49
+ *
50
+ * // Insert the chart into the worksheet
51
+ * worksheet_insert_chart(worksheet, CELL("B7"), chart);
52
+ *
53
+ * return workbook_close(workbook);
54
+ * }
55
+ *
56
+ * @endcode
57
+ *
58
+ * The chart in the worksheet will look like this:
59
+ * @image html chart_simple.png
60
+ *
61
+ * The basic procedure for adding a chart to a worksheet is:
62
+ *
63
+ * 1. Create the chart with `workbook_add_chart()`.
64
+ * 2. Add one or more data series to the chart which refers to data in the
65
+ * workbook using `chart_add_series()`.
66
+ * 3. Configure the chart with the other available functions shown below.
67
+ * 4. Insert the chart into a worksheet using `worksheet_insert_chart()`.
68
+ *
69
+ */
70
+
71
+ #ifndef __LXW_CHART_H__
72
+ #define __LXW_CHART_H__
73
+
74
+ #include <stdint.h>
75
+ #include <string.h>
76
+
77
+ #include "common.h"
78
+ #include "format.h"
79
+
80
+ STAILQ_HEAD(lxw_chart_series_list, lxw_chart_series);
81
+ STAILQ_HEAD(lxw_series_data_points, lxw_series_data_point);
82
+
83
+ #define LXW_CHART_NUM_FORMAT_LEN 128
84
+ #define LXW_CHART_DEFAULT_GAP 501
85
+
86
+ /**
87
+ * @brief Available chart types.
88
+ */
89
+ typedef enum lxw_chart_type {
90
+
91
+ /** None. */
92
+ LXW_CHART_NONE = 0,
93
+
94
+ /** Area chart. */
95
+ LXW_CHART_AREA,
96
+
97
+ /** Area chart - stacked. */
98
+ LXW_CHART_AREA_STACKED,
99
+
100
+ /** Area chart - percentage stacked. */
101
+ LXW_CHART_AREA_STACKED_PERCENT,
102
+
103
+ /** Bar chart. */
104
+ LXW_CHART_BAR,
105
+
106
+ /** Bar chart - stacked. */
107
+ LXW_CHART_BAR_STACKED,
108
+
109
+ /** Bar chart - percentage stacked. */
110
+ LXW_CHART_BAR_STACKED_PERCENT,
111
+
112
+ /** Column chart. */
113
+ LXW_CHART_COLUMN,
114
+
115
+ /** Column chart - stacked. */
116
+ LXW_CHART_COLUMN_STACKED,
117
+
118
+ /** Column chart - percentage stacked. */
119
+ LXW_CHART_COLUMN_STACKED_PERCENT,
120
+
121
+ /** Doughnut chart. */
122
+ LXW_CHART_DOUGHNUT,
123
+
124
+ /** Line chart. */
125
+ LXW_CHART_LINE,
126
+
127
+ /** Pie chart. */
128
+ LXW_CHART_PIE,
129
+
130
+ /** Scatter chart. */
131
+ LXW_CHART_SCATTER,
132
+
133
+ /** Scatter chart - straight. */
134
+ LXW_CHART_SCATTER_STRAIGHT,
135
+
136
+ /** Scatter chart - straight with markers. */
137
+ LXW_CHART_SCATTER_STRAIGHT_WITH_MARKERS,
138
+
139
+ /** Scatter chart - smooth. */
140
+ LXW_CHART_SCATTER_SMOOTH,
141
+
142
+ /** Scatter chart - smooth with markers. */
143
+ LXW_CHART_SCATTER_SMOOTH_WITH_MARKERS,
144
+
145
+ /** Radar chart. */
146
+ LXW_CHART_RADAR,
147
+
148
+ /** Radar chart - with markers. */
149
+ LXW_CHART_RADAR_WITH_MARKERS,
150
+
151
+ /** Radar chart - filled. */
152
+ LXW_CHART_RADAR_FILLED
153
+ } lxw_chart_type;
154
+
155
+ /**
156
+ * @brief Chart legend positions.
157
+ */
158
+ typedef enum lxw_chart_legend_position {
159
+
160
+ /** No chart legend. */
161
+ LXW_CHART_LEGEND_NONE = 0,
162
+
163
+ /** Chart legend positioned at right side. */
164
+ LXW_CHART_LEGEND_RIGHT,
165
+
166
+ /** Chart legend positioned at left side. */
167
+ LXW_CHART_LEGEND_LEFT,
168
+
169
+ /** Chart legend positioned at top. */
170
+ LXW_CHART_LEGEND_TOP,
171
+
172
+ /** Chart legend positioned at bottom. */
173
+ LXW_CHART_LEGEND_BOTTOM,
174
+
175
+ /** Chart legend overlaid at right side. */
176
+ LXW_CHART_LEGEND_OVERLAY_RIGHT,
177
+
178
+ /** Chart legend overlaid at left side. */
179
+ LXW_CHART_LEGEND_OVERLAY_LEFT
180
+ } lxw_chart_legend_position;
181
+
182
+ /**
183
+ * @brief Chart line dash types.
184
+ *
185
+ * The dash types are shown in the order that they appear in the Excel dialog.
186
+ * See @ref chart_lines.
187
+ */
188
+ typedef enum lxw_chart_line_dash_type {
189
+
190
+ /** Solid. */
191
+ LXW_CHART_LINE_DASH_SOLID = 0,
192
+
193
+ /** Round Dot. */
194
+ LXW_CHART_LINE_DASH_ROUND_DOT,
195
+
196
+ /** Square Dot. */
197
+ LXW_CHART_LINE_DASH_SQUARE_DOT,
198
+
199
+ /** Dash. */
200
+ LXW_CHART_LINE_DASH_DASH,
201
+
202
+ /** Dash Dot. */
203
+ LXW_CHART_LINE_DASH_DASH_DOT,
204
+
205
+ /** Long Dash. */
206
+ LXW_CHART_LINE_DASH_LONG_DASH,
207
+
208
+ /** Long Dash Dot. */
209
+ LXW_CHART_LINE_DASH_LONG_DASH_DOT,
210
+
211
+ /** Long Dash Dot Dot. */
212
+ LXW_CHART_LINE_DASH_LONG_DASH_DOT_DOT,
213
+
214
+ /* These aren't available in the dialog but are used by Excel. */
215
+ LXW_CHART_LINE_DASH_DOT,
216
+ LXW_CHART_LINE_DASH_SYSTEM_DASH_DOT,
217
+ LXW_CHART_LINE_DASH_SYSTEM_DASH_DOT_DOT
218
+ } lxw_chart_line_dash_type;
219
+
220
+ /**
221
+ * @brief Chart marker types.
222
+ */
223
+ typedef enum lxw_chart_marker_type {
224
+
225
+ /** Automatic, series default, marker type. */
226
+ LXW_CHART_MARKER_AUTOMATIC,
227
+
228
+ /** No marker type. */
229
+ LXW_CHART_MARKER_NONE,
230
+
231
+ /** Square marker type. */
232
+ LXW_CHART_MARKER_SQUARE,
233
+
234
+ /** Diamond marker type. */
235
+ LXW_CHART_MARKER_DIAMOND,
236
+
237
+ /** Triangle marker type. */
238
+ LXW_CHART_MARKER_TRIANGLE,
239
+
240
+ /** X shape marker type. */
241
+ LXW_CHART_MARKER_X,
242
+
243
+ /** Star marker type. */
244
+ LXW_CHART_MARKER_STAR,
245
+
246
+ /** Short dash marker type. */
247
+ LXW_CHART_MARKER_SHORT_DASH,
248
+
249
+ /** Long dash marker type. */
250
+ LXW_CHART_MARKER_LONG_DASH,
251
+
252
+ /** Circle marker type. */
253
+ LXW_CHART_MARKER_CIRCLE,
254
+
255
+ /** Plus (+) marker type. */
256
+ LXW_CHART_MARKER_PLUS
257
+ } lxw_chart_marker_type;
258
+
259
+ /**
260
+ * @brief Chart pattern types.
261
+ */
262
+ typedef enum lxw_chart_pattern_type {
263
+
264
+ /** None pattern. */
265
+ LXW_CHART_PATTERN_NONE,
266
+
267
+ /** 5 Percent pattern. */
268
+ LXW_CHART_PATTERN_PERCENT_5,
269
+
270
+ /** 10 Percent pattern. */
271
+ LXW_CHART_PATTERN_PERCENT_10,
272
+
273
+ /** 20 Percent pattern. */
274
+ LXW_CHART_PATTERN_PERCENT_20,
275
+
276
+ /** 25 Percent pattern. */
277
+ LXW_CHART_PATTERN_PERCENT_25,
278
+
279
+ /** 30 Percent pattern. */
280
+ LXW_CHART_PATTERN_PERCENT_30,
281
+
282
+ /** 40 Percent pattern. */
283
+ LXW_CHART_PATTERN_PERCENT_40,
284
+
285
+ /** 50 Percent pattern. */
286
+ LXW_CHART_PATTERN_PERCENT_50,
287
+
288
+ /** 60 Percent pattern. */
289
+ LXW_CHART_PATTERN_PERCENT_60,
290
+
291
+ /** 70 Percent pattern. */
292
+ LXW_CHART_PATTERN_PERCENT_70,
293
+
294
+ /** 75 Percent pattern. */
295
+ LXW_CHART_PATTERN_PERCENT_75,
296
+
297
+ /** 80 Percent pattern. */
298
+ LXW_CHART_PATTERN_PERCENT_80,
299
+
300
+ /** 90 Percent pattern. */
301
+ LXW_CHART_PATTERN_PERCENT_90,
302
+
303
+ /** Light downward diagonal pattern. */
304
+ LXW_CHART_PATTERN_LIGHT_DOWNWARD_DIAGONAL,
305
+
306
+ /** Light upward diagonal pattern. */
307
+ LXW_CHART_PATTERN_LIGHT_UPWARD_DIAGONAL,
308
+
309
+ /** Dark downward diagonal pattern. */
310
+ LXW_CHART_PATTERN_DARK_DOWNWARD_DIAGONAL,
311
+
312
+ /** Dark upward diagonal pattern. */
313
+ LXW_CHART_PATTERN_DARK_UPWARD_DIAGONAL,
314
+
315
+ /** Wide downward diagonal pattern. */
316
+ LXW_CHART_PATTERN_WIDE_DOWNWARD_DIAGONAL,
317
+
318
+ /** Wide upward diagonal pattern. */
319
+ LXW_CHART_PATTERN_WIDE_UPWARD_DIAGONAL,
320
+
321
+ /** Light vertical pattern. */
322
+ LXW_CHART_PATTERN_LIGHT_VERTICAL,
323
+
324
+ /** Light horizontal pattern. */
325
+ LXW_CHART_PATTERN_LIGHT_HORIZONTAL,
326
+
327
+ /** Narrow vertical pattern. */
328
+ LXW_CHART_PATTERN_NARROW_VERTICAL,
329
+
330
+ /** Narrow horizontal pattern. */
331
+ LXW_CHART_PATTERN_NARROW_HORIZONTAL,
332
+
333
+ /** Dark vertical pattern. */
334
+ LXW_CHART_PATTERN_DARK_VERTICAL,
335
+
336
+ /** Dark horizontal pattern. */
337
+ LXW_CHART_PATTERN_DARK_HORIZONTAL,
338
+
339
+ /** Dashed downward diagonal pattern. */
340
+ LXW_CHART_PATTERN_DASHED_DOWNWARD_DIAGONAL,
341
+
342
+ /** Dashed upward diagonal pattern. */
343
+ LXW_CHART_PATTERN_DASHED_UPWARD_DIAGONAL,
344
+
345
+ /** Dashed horizontal pattern. */
346
+ LXW_CHART_PATTERN_DASHED_HORIZONTAL,
347
+
348
+ /** Dashed vertical pattern. */
349
+ LXW_CHART_PATTERN_DASHED_VERTICAL,
350
+
351
+ /** Small confetti pattern. */
352
+ LXW_CHART_PATTERN_SMALL_CONFETTI,
353
+
354
+ /** Large confetti pattern. */
355
+ LXW_CHART_PATTERN_LARGE_CONFETTI,
356
+
357
+ /** Zigzag pattern. */
358
+ LXW_CHART_PATTERN_ZIGZAG,
359
+
360
+ /** Wave pattern. */
361
+ LXW_CHART_PATTERN_WAVE,
362
+
363
+ /** Diagonal brick pattern. */
364
+ LXW_CHART_PATTERN_DIAGONAL_BRICK,
365
+
366
+ /** Horizontal brick pattern. */
367
+ LXW_CHART_PATTERN_HORIZONTAL_BRICK,
368
+
369
+ /** Weave pattern. */
370
+ LXW_CHART_PATTERN_WEAVE,
371
+
372
+ /** Plaid pattern. */
373
+ LXW_CHART_PATTERN_PLAID,
374
+
375
+ /** Divot pattern. */
376
+ LXW_CHART_PATTERN_DIVOT,
377
+
378
+ /** Dotted grid pattern. */
379
+ LXW_CHART_PATTERN_DOTTED_GRID,
380
+
381
+ /** Dotted diamond pattern. */
382
+ LXW_CHART_PATTERN_DOTTED_DIAMOND,
383
+
384
+ /** Shingle pattern. */
385
+ LXW_CHART_PATTERN_SHINGLE,
386
+
387
+ /** Trellis pattern. */
388
+ LXW_CHART_PATTERN_TRELLIS,
389
+
390
+ /** Sphere pattern. */
391
+ LXW_CHART_PATTERN_SPHERE,
392
+
393
+ /** Small grid pattern. */
394
+ LXW_CHART_PATTERN_SMALL_GRID,
395
+
396
+ /** Large grid pattern. */
397
+ LXW_CHART_PATTERN_LARGE_GRID,
398
+
399
+ /** Small check pattern. */
400
+ LXW_CHART_PATTERN_SMALL_CHECK,
401
+
402
+ /** Large check pattern. */
403
+ LXW_CHART_PATTERN_LARGE_CHECK,
404
+
405
+ /** Outlined diamond pattern. */
406
+ LXW_CHART_PATTERN_OUTLINED_DIAMOND,
407
+
408
+ /** Solid diamond pattern. */
409
+ LXW_CHART_PATTERN_SOLID_DIAMOND
410
+ } lxw_chart_pattern_type;
411
+
412
+ /**
413
+ * @brief Chart data label positions.
414
+ */
415
+ typedef enum lxw_chart_label_position {
416
+ /** Series data label position: default position. */
417
+ LXW_CHART_LABEL_POSITION_DEFAULT,
418
+
419
+ /** Series data label position: center. */
420
+ LXW_CHART_LABEL_POSITION_CENTER,
421
+
422
+ /** Series data label position: right. */
423
+ LXW_CHART_LABEL_POSITION_RIGHT,
424
+
425
+ /** Series data label position: left. */
426
+ LXW_CHART_LABEL_POSITION_LEFT,
427
+
428
+ /** Series data label position: above. */
429
+ LXW_CHART_LABEL_POSITION_ABOVE,
430
+
431
+ /** Series data label position: below. */
432
+ LXW_CHART_LABEL_POSITION_BELOW,
433
+
434
+ /** Series data label position: inside base. */
435
+ LXW_CHART_LABEL_POSITION_INSIDE_BASE,
436
+
437
+ /** Series data label position: inside end. */
438
+ LXW_CHART_LABEL_POSITION_INSIDE_END,
439
+
440
+ /** Series data label position: outside end. */
441
+ LXW_CHART_LABEL_POSITION_OUTSIDE_END,
442
+
443
+ /** Series data label position: best fit. */
444
+ LXW_CHART_LABEL_POSITION_BEST_FIT
445
+ } lxw_chart_label_position;
446
+
447
+ /**
448
+ * @brief Chart data label separator.
449
+ */
450
+ typedef enum lxw_chart_label_separator {
451
+ /** Series data label separator: comma (the default). */
452
+ LXW_CHART_LABEL_SEPARATOR_COMMA,
453
+
454
+ /** Series data label separator: semicolon. */
455
+ LXW_CHART_LABEL_SEPARATOR_SEMICOLON,
456
+
457
+ /** Series data label separator: period. */
458
+ LXW_CHART_LABEL_SEPARATOR_PERIOD,
459
+
460
+ /** Series data label separator: newline. */
461
+ LXW_CHART_LABEL_SEPARATOR_NEWLINE,
462
+
463
+ /** Series data label separator: space. */
464
+ LXW_CHART_LABEL_SEPARATOR_SPACE
465
+ } lxw_chart_label_separator;
466
+
467
+ enum lxw_chart_subtype {
468
+
469
+ LXW_CHART_SUBTYPE_NONE = 0,
470
+ LXW_CHART_SUBTYPE_STACKED,
471
+ LXW_CHART_SUBTYPE_STACKED_PERCENT
472
+ };
473
+
474
+ enum lxw_chart_grouping {
475
+ LXW_GROUPING_CLUSTERED,
476
+ LXW_GROUPING_STANDARD,
477
+ LXW_GROUPING_PERCENTSTACKED,
478
+ LXW_GROUPING_STACKED
479
+ };
480
+
481
+ /**
482
+ * @brief Axis positions for category axes.
483
+ */
484
+ typedef enum lxw_chart_axis_tick_position {
485
+
486
+ LXW_CHART_AXIS_POSITION_DEFAULT,
487
+
488
+ /** Position category axis on tick marks. */
489
+ LXW_CHART_AXIS_POSITION_ON_TICK,
490
+
491
+ /** Position category axis between tick marks. */
492
+ LXW_CHART_AXIS_POSITION_BETWEEN
493
+ } lxw_chart_axis_tick_position;
494
+
495
+ /**
496
+ * @brief Axis label positions.
497
+ */
498
+ typedef enum lxw_chart_axis_label_position {
499
+
500
+ /** Position the axis labels next to the axis. The default. */
501
+ LXW_CHART_AXIS_LABEL_POSITION_NEXT_TO,
502
+
503
+ /** Position the axis labels at the top of the chart, for horizontal
504
+ * axes, or to the right for vertical axes.*/
505
+ LXW_CHART_AXIS_LABEL_POSITION_HIGH,
506
+
507
+ /** Position the axis labels at the bottom of the chart, for horizontal
508
+ * axes, or to the left for vertical axes.*/
509
+ LXW_CHART_AXIS_LABEL_POSITION_LOW,
510
+
511
+ /** Turn off the the axis labels. */
512
+ LXW_CHART_AXIS_LABEL_POSITION_NONE
513
+ } lxw_chart_axis_label_position;
514
+
515
+ /**
516
+ * @brief Display units for chart value axis.
517
+ */
518
+ typedef enum lxw_chart_axis_display_unit {
519
+
520
+ /** Axis display units: None. The default. */
521
+ LXW_CHART_AXIS_UNITS_NONE,
522
+
523
+ /** Axis display units: Hundreds. */
524
+ LXW_CHART_AXIS_UNITS_HUNDREDS,
525
+
526
+ /** Axis display units: Thousands. */
527
+ LXW_CHART_AXIS_UNITS_THOUSANDS,
528
+
529
+ /** Axis display units: Ten thousands. */
530
+ LXW_CHART_AXIS_UNITS_TEN_THOUSANDS,
531
+
532
+ /** Axis display units: Hundred thousands. */
533
+ LXW_CHART_AXIS_UNITS_HUNDRED_THOUSANDS,
534
+
535
+ /** Axis display units: Millions. */
536
+ LXW_CHART_AXIS_UNITS_MILLIONS,
537
+
538
+ /** Axis display units: Ten millions. */
539
+ LXW_CHART_AXIS_UNITS_TEN_MILLIONS,
540
+
541
+ /** Axis display units: Hundred millions. */
542
+ LXW_CHART_AXIS_UNITS_HUNDRED_MILLIONS,
543
+
544
+ /** Axis display units: Billions. */
545
+ LXW_CHART_AXIS_UNITS_BILLIONS,
546
+
547
+ /** Axis display units: Trillions. */
548
+ LXW_CHART_AXIS_UNITS_TRILLIONS
549
+ } lxw_chart_axis_display_unit;
550
+
551
+ /**
552
+ * @brief Tick mark types for an axis.
553
+ */
554
+ typedef enum lxw_chart_axis_tick_mark {
555
+
556
+ /** Default tick mark for the chart axis. Usually outside. */
557
+ LXW_CHART_AXIS_TICK_MARK_DEFAULT,
558
+
559
+ /** No tick mark for the axis. */
560
+ LXW_CHART_AXIS_TICK_MARK_NONE,
561
+
562
+ /** Tick mark inside the axis only. */
563
+ LXW_CHART_AXIS_TICK_MARK_INSIDE,
564
+
565
+ /** Tick mark outside the axis only. */
566
+ LXW_CHART_AXIS_TICK_MARK_OUTSIDE,
567
+
568
+ /** Tick mark inside and outside the axis. */
569
+ LXW_CHART_AXIS_TICK_MARK_CROSSING
570
+ } lxw_chart_tick_mark;
571
+
572
+ typedef struct lxw_series_range {
573
+ char *formula;
574
+ char *sheetname;
575
+ lxw_row_t first_row;
576
+ lxw_row_t last_row;
577
+ lxw_col_t first_col;
578
+ lxw_col_t last_col;
579
+ uint8_t ignore_cache;
580
+
581
+ uint8_t has_string_cache;
582
+ uint16_t num_data_points;
583
+ struct lxw_series_data_points *data_cache;
584
+
585
+ } lxw_series_range;
586
+
587
+ typedef struct lxw_series_data_point {
588
+ uint8_t is_string;
589
+ double number;
590
+ char *string;
591
+ uint8_t no_data;
592
+
593
+ STAILQ_ENTRY (lxw_series_data_point) list_pointers;
594
+
595
+ } lxw_series_data_point;
596
+
597
+ /**
598
+ * @brief Struct to represent a chart line.
599
+ *
600
+ * See @ref chart_lines.
601
+ */
602
+ typedef struct lxw_chart_line {
603
+
604
+ /** The chart font color. See @ref working_with_colors. */
605
+ lxw_color_t color;
606
+
607
+ /** Turn off/hide line. Set to 0 or 1.*/
608
+ uint8_t none;
609
+
610
+ /** Width of the line in increments of 0.25. Default is 2.25. */
611
+ float width;
612
+
613
+ /** The line dash type. See #lxw_chart_line_dash_type. */
614
+ uint8_t dash_type;
615
+
616
+ /* Transparency for lines isn't generally useful. Undocumented for now. */
617
+ uint8_t transparency;
618
+
619
+ /* Members for internal use only. */
620
+ uint8_t has_color;
621
+
622
+ } lxw_chart_line;
623
+
624
+ /**
625
+ * @brief Struct to represent a chart fill.
626
+ *
627
+ * See @ref chart_fills.
628
+ */
629
+ typedef struct lxw_chart_fill {
630
+
631
+ /** The chart font color. See @ref working_with_colors. */
632
+ lxw_color_t color;
633
+
634
+ /** Turn off/hide line. Set to 0 or 1.*/
635
+ uint8_t none;
636
+
637
+ /** Set the transparency of the fill. 0 - 100. Default 0. */
638
+ uint8_t transparency;
639
+
640
+ /* Members for internal use only. */
641
+ uint8_t has_color;
642
+
643
+ } lxw_chart_fill;
644
+
645
+ /**
646
+ * @brief Struct to represent a chart pattern.
647
+ *
648
+ * See @ref chart_patterns.
649
+ */
650
+ typedef struct lxw_chart_pattern {
651
+
652
+ /** The pattern foreground color. See @ref working_with_colors. */
653
+ lxw_color_t fg_color;
654
+
655
+ /** The pattern background color. See @ref working_with_colors. */
656
+ lxw_color_t bg_color;
657
+
658
+ /** The pattern type. See #lxw_chart_pattern_type. */
659
+ uint8_t type;
660
+
661
+ /* Members for internal use only. */
662
+ uint8_t has_fg_color;
663
+ uint8_t has_bg_color;
664
+
665
+ } lxw_chart_pattern;
666
+
667
+ /**
668
+ * @brief Struct to represent a chart font.
669
+ *
670
+ * See @ref chart_fonts.
671
+ */
672
+ typedef struct lxw_chart_font {
673
+
674
+ /** The chart font name, such as "Arial" or "Calibri". */
675
+ char *name;
676
+
677
+ /** The chart font size. The default is 11. */
678
+ uint16_t size;
679
+
680
+ /** The chart font bold property. Set to 0 or 1. */
681
+ uint8_t bold;
682
+
683
+ /** The chart font italic property. Set to 0 or 1. */
684
+ uint8_t italic;
685
+
686
+ /** The chart font underline property. Set to 0 or 1. */
687
+ uint8_t underline;
688
+
689
+ /** The chart font rotation property. Range: -90 to 90. */
690
+ int32_t rotation;
691
+
692
+ /** The chart font color. See @ref working_with_colors. */
693
+ lxw_color_t color;
694
+
695
+ /* Members for internal use only. */
696
+ uint8_t pitch_family;
697
+ uint8_t charset;
698
+ int8_t baseline;
699
+ uint8_t has_color;
700
+
701
+ } lxw_chart_font;
702
+
703
+ typedef struct lxw_chart_marker {
704
+
705
+ uint8_t type;
706
+ uint8_t size;
707
+ lxw_chart_line *line;
708
+ lxw_chart_fill *fill;
709
+ lxw_chart_pattern *pattern;
710
+
711
+ } lxw_chart_marker;
712
+
713
+ typedef struct lxw_chart_legend {
714
+
715
+ lxw_chart_font *font;
716
+ uint8_t position;
717
+
718
+ } lxw_chart_legend;
719
+
720
+ typedef struct lxw_chart_title {
721
+
722
+ char *name;
723
+ lxw_row_t row;
724
+ lxw_col_t col;
725
+ lxw_chart_font *font;
726
+ uint8_t off;
727
+ uint8_t is_horizontal;
728
+ uint8_t ignore_cache;
729
+
730
+ /* We use a range to hold the title formula properties even though it
731
+ * will only have 1 point in order to re-use similar functions.*/
732
+ lxw_series_range *range;
733
+
734
+ struct lxw_series_data_point data_point;
735
+
736
+ } lxw_chart_title;
737
+
738
+ /**
739
+ * @brief Struct to represent an Excel chart data point.
740
+ *
741
+ * The lxw_chart_point used to set the line, fill and pattern of one or more
742
+ * points in a chart data series. See @ref chart_points.
743
+ */
744
+ typedef struct lxw_chart_point {
745
+
746
+ /** The line/border for the chart point. See @ref chart_lines. */
747
+ lxw_chart_line *line;
748
+
749
+ /** The fill for the chart point. See @ref chart_fills. */
750
+ lxw_chart_fill *fill;
751
+
752
+ /** The pattern for the chart point. See @ref chart_patterns.*/
753
+ lxw_chart_pattern *pattern;
754
+
755
+ } lxw_chart_point;
756
+
757
+ /**
758
+ * @brief Define how blank values are displayed in a chart.
759
+ */
760
+ typedef enum lxw_chart_blank {
761
+
762
+ /** Show empty chart cells as gaps in the data. The default. */
763
+ LXW_CHART_BLANKS_AS_GAP,
764
+
765
+ /** Show empty chart cells as zeros. */
766
+ LXW_CHART_BLANKS_AS_ZERO,
767
+
768
+ /** Show empty chart cells as connected. Only for charts with lines. */
769
+ LXW_CHART_BLANKS_AS_CONNECTED
770
+ } lxw_chart_blank;
771
+
772
+ enum lxw_chart_position {
773
+ LXW_CHART_AXIS_RIGHT,
774
+ LXW_CHART_AXIS_LEFT,
775
+ LXW_CHART_AXIS_TOP,
776
+ LXW_CHART_AXIS_BOTTOM
777
+ };
778
+
779
+ /**
780
+ * @brief Type/amount of data series error bar.
781
+ */
782
+ typedef enum lxw_chart_error_bar_type {
783
+ /** Error bar type: Standard error. */
784
+ LXW_CHART_ERROR_BAR_TYPE_STD_ERROR,
785
+
786
+ /** Error bar type: Fixed value. */
787
+ LXW_CHART_ERROR_BAR_TYPE_FIXED,
788
+
789
+ /** Error bar type: Percentage. */
790
+ LXW_CHART_ERROR_BAR_TYPE_PERCENTAGE,
791
+
792
+ /** Error bar type: Standard deviation(s). */
793
+ LXW_CHART_ERROR_BAR_TYPE_STD_DEV
794
+ } lxw_chart_error_bar_type;
795
+
796
+ /**
797
+ * @brief Direction for a data series error bar.
798
+ */
799
+ typedef enum lxw_chart_error_bar_direction {
800
+
801
+ /** Error bar extends in both directions. The default. */
802
+ LXW_CHART_ERROR_BAR_DIR_BOTH,
803
+
804
+ /** Error bar extends in positive direction. */
805
+ LXW_CHART_ERROR_BAR_DIR_PLUS,
806
+
807
+ /** Error bar extends in negative direction. */
808
+ LXW_CHART_ERROR_BAR_DIR_MINUS
809
+ } lxw_chart_error_bar_direction;
810
+
811
+ /**
812
+ * @brief End cap styles for a data series error bar.
813
+ */
814
+ typedef enum lxw_chart_error_bar_cap {
815
+ /** Flat end cap. The default. */
816
+ LXW_CHART_ERROR_BAR_END_CAP,
817
+
818
+ /** No end cap. */
819
+ LXW_CHART_ERROR_BAR_NO_CAP
820
+ } lxw_chart_error_bar_cap;
821
+
822
+ typedef struct lxw_series_error_bars {
823
+ uint8_t type;
824
+ uint8_t direction;
825
+ uint8_t endcap;
826
+ uint8_t has_value;
827
+ uint8_t is_set;
828
+ uint8_t is_x;
829
+ uint8_t chart_group;
830
+ double value;
831
+ lxw_chart_line *line;
832
+
833
+ } lxw_series_error_bars;
834
+
835
+ /**
836
+ * @brief Series trendline/regression types.
837
+ */
838
+ typedef enum lxw_chart_trendline_type {
839
+ /** Trendline type: Linear. */
840
+ LXW_CHART_TRENDLINE_TYPE_LINEAR,
841
+
842
+ /** Trendline type: Logarithm. */
843
+ LXW_CHART_TRENDLINE_TYPE_LOG,
844
+
845
+ /** Trendline type: Polynomial. */
846
+ LXW_CHART_TRENDLINE_TYPE_POLY,
847
+
848
+ /** Trendline type: Power. */
849
+ LXW_CHART_TRENDLINE_TYPE_POWER,
850
+
851
+ /** Trendline type: Exponential. */
852
+ LXW_CHART_TRENDLINE_TYPE_EXP,
853
+
854
+ /** Trendline type: Moving Average. */
855
+ LXW_CHART_TRENDLINE_TYPE_AVERAGE
856
+ } lxw_chart_trendline_type;
857
+
858
+ /**
859
+ * @brief Struct to represent an Excel chart data series.
860
+ *
861
+ * The lxw_chart_series is created using the chart_add_series function. It is
862
+ * used in functions that modify a chart series but the members of the struct
863
+ * aren't modified directly.
864
+ */
865
+ typedef struct lxw_chart_series {
866
+
867
+ lxw_series_range *categories;
868
+ lxw_series_range *values;
869
+ lxw_chart_title title;
870
+ lxw_chart_line *line;
871
+ lxw_chart_fill *fill;
872
+ lxw_chart_pattern *pattern;
873
+ lxw_chart_marker *marker;
874
+ lxw_chart_point *points;
875
+ uint16_t point_count;
876
+
877
+ uint8_t smooth;
878
+ uint8_t invert_if_negative;
879
+
880
+ /* Data label parameters. */
881
+ uint8_t has_labels;
882
+ uint8_t show_labels_value;
883
+ uint8_t show_labels_category;
884
+ uint8_t show_labels_name;
885
+ uint8_t show_labels_leader;
886
+ uint8_t show_labels_legend;
887
+ uint8_t show_labels_percent;
888
+ uint8_t label_position;
889
+ uint8_t label_separator;
890
+ uint8_t default_label_position;
891
+ char *label_num_format;
892
+ lxw_chart_font *label_font;
893
+
894
+ lxw_series_error_bars *x_error_bars;
895
+ lxw_series_error_bars *y_error_bars;
896
+
897
+ uint8_t has_trendline;
898
+ uint8_t has_trendline_forecast;
899
+ uint8_t has_trendline_equation;
900
+ uint8_t has_trendline_r_squared;
901
+ uint8_t has_trendline_intercept;
902
+ uint8_t trendline_type;
903
+ uint8_t trendline_value;
904
+ double trendline_forward;
905
+ double trendline_backward;
906
+ uint8_t trendline_value_type;
907
+ char *trendline_name;
908
+ lxw_chart_line *trendline_line;
909
+ double trendline_intercept;
910
+
911
+ STAILQ_ENTRY (lxw_chart_series) list_pointers;
912
+
913
+ } lxw_chart_series;
914
+
915
+ /* Struct for major/minor axis gridlines. */
916
+ typedef struct lxw_chart_gridline {
917
+
918
+ uint8_t visible;
919
+ lxw_chart_line *line;
920
+
921
+ } lxw_chart_gridline;
922
+
923
+ /**
924
+ * @brief Struct to represent an Excel chart axis.
925
+ *
926
+ * The lxw_chart_axis struct is used in functions that modify a chart axis
927
+ * but the members of the struct aren't modified directly.
928
+ */
929
+ typedef struct lxw_chart_axis {
930
+
931
+ lxw_chart_title title;
932
+
933
+ char *num_format;
934
+ char *default_num_format;
935
+ uint8_t source_linked;
936
+
937
+ uint8_t major_tick_mark;
938
+ uint8_t minor_tick_mark;
939
+ uint8_t is_horizontal;
940
+
941
+ lxw_chart_gridline major_gridlines;
942
+ lxw_chart_gridline minor_gridlines;
943
+
944
+ lxw_chart_font *num_font;
945
+ lxw_chart_line *line;
946
+ lxw_chart_fill *fill;
947
+ lxw_chart_pattern *pattern;
948
+
949
+ uint8_t is_category;
950
+ uint8_t is_date;
951
+ uint8_t is_value;
952
+ uint8_t axis_position;
953
+ uint8_t position_axis;
954
+ uint8_t label_position;
955
+ uint8_t hidden;
956
+ uint8_t reverse;
957
+
958
+ uint8_t has_min;
959
+ double min;
960
+ uint8_t has_max;
961
+ double max;
962
+
963
+ uint8_t has_major_unit;
964
+ double major_unit;
965
+ uint8_t has_minor_unit;
966
+ double minor_unit;
967
+
968
+ uint16_t interval_unit;
969
+ uint16_t interval_tick;
970
+
971
+ uint16_t log_base;
972
+
973
+ uint8_t display_units;
974
+ uint8_t display_units_visible;
975
+
976
+ uint8_t has_crossing;
977
+ uint8_t crossing_max;
978
+ double crossing;
979
+
980
+ } lxw_chart_axis;
981
+
982
+ /**
983
+ * @brief Struct to represent an Excel chart.
984
+ *
985
+ * The members of the lxw_chart struct aren't modified directly. Instead
986
+ * the chart properties are set by calling the functions shown in chart.h.
987
+ */
988
+ typedef struct lxw_chart {
989
+
990
+ FILE *file;
991
+
992
+ uint8_t type;
993
+ uint8_t subtype;
994
+ uint16_t series_index;
995
+
996
+ void (*write_chart_type) (struct lxw_chart *);
997
+ void (*write_plot_area) (struct lxw_chart *);
998
+
999
+ /**
1000
+ * A pointer to the chart x_axis object which can be used in functions
1001
+ * that configures the X axis.
1002
+ */
1003
+ lxw_chart_axis *x_axis;
1004
+
1005
+ /**
1006
+ * A pointer to the chart y_axis object which can be used in functions
1007
+ * that configures the Y axis.
1008
+ */
1009
+ lxw_chart_axis *y_axis;
1010
+
1011
+ lxw_chart_title title;
1012
+
1013
+ uint32_t id;
1014
+ uint32_t axis_id_1;
1015
+ uint32_t axis_id_2;
1016
+ uint32_t axis_id_3;
1017
+ uint32_t axis_id_4;
1018
+
1019
+ uint8_t in_use;
1020
+ uint8_t chart_group;
1021
+ uint8_t cat_has_num_fmt;
1022
+
1023
+ uint8_t has_horiz_cat_axis;
1024
+ uint8_t has_horiz_val_axis;
1025
+
1026
+ uint8_t style_id;
1027
+ uint16_t rotation;
1028
+ uint16_t hole_size;
1029
+
1030
+ uint8_t no_title;
1031
+ uint8_t has_overlap;
1032
+ int8_t overlap_y1;
1033
+ int8_t overlap_y2;
1034
+ uint16_t gap_y1;
1035
+ uint16_t gap_y2;
1036
+
1037
+ uint8_t grouping;
1038
+ uint8_t default_cross_between;
1039
+
1040
+ lxw_chart_legend legend;
1041
+ int16_t *delete_series;
1042
+ uint16_t delete_series_count;
1043
+ lxw_chart_marker *default_marker;
1044
+
1045
+ lxw_chart_line *chartarea_line;
1046
+ lxw_chart_fill *chartarea_fill;
1047
+ lxw_chart_pattern *chartarea_pattern;
1048
+ lxw_chart_line *plotarea_line;
1049
+ lxw_chart_fill *plotarea_fill;
1050
+ lxw_chart_pattern *plotarea_pattern;
1051
+
1052
+ uint8_t has_drop_lines;
1053
+ lxw_chart_line *drop_lines_line;
1054
+
1055
+ uint8_t has_high_low_lines;
1056
+ lxw_chart_line *high_low_lines_line;
1057
+
1058
+ struct lxw_chart_series_list *series_list;
1059
+
1060
+ uint8_t has_table;
1061
+ uint8_t has_table_vertical;
1062
+ uint8_t has_table_horizontal;
1063
+ uint8_t has_table_outline;
1064
+ uint8_t has_table_legend_keys;
1065
+ lxw_chart_font *table_font;
1066
+
1067
+ uint8_t show_blanks_as;
1068
+ uint8_t show_hidden_data;
1069
+
1070
+ uint8_t has_up_down_bars;
1071
+ lxw_chart_line *up_bar_line;
1072
+ lxw_chart_line *down_bar_line;
1073
+ lxw_chart_fill *up_bar_fill;
1074
+ lxw_chart_fill *down_bar_fill;
1075
+
1076
+ uint8_t default_label_position;
1077
+
1078
+ STAILQ_ENTRY (lxw_chart) ordered_list_pointers;
1079
+ STAILQ_ENTRY (lxw_chart) list_pointers;
1080
+
1081
+ } lxw_chart;
1082
+
1083
+
1084
+ /* *INDENT-OFF* */
1085
+ #ifdef __cplusplus
1086
+ extern "C" {
1087
+ #endif
1088
+ /* *INDENT-ON* */
1089
+
1090
+ lxw_chart *lxw_chart_new(uint8_t type);
1091
+ void lxw_chart_free(lxw_chart *chart);
1092
+ void lxw_chart_assemble_xml_file(lxw_chart *chart);
1093
+
1094
+ /**
1095
+ * @brief Add a data series to a chart.
1096
+ *
1097
+ * @param chart Pointer to a lxw_chart instance to be configured.
1098
+ * @param categories The range of categories in the data series.
1099
+ * @param values The range of values in the data series.
1100
+ *
1101
+ * @return A lxw_chart_series object pointer.
1102
+ *
1103
+ * In Excel a chart **series** is a collection of information that defines
1104
+ * which data is plotted such as the categories and values. It is also used to
1105
+ * define the formatting for the data.
1106
+ *
1107
+ * For an libxlsxwriter chart object the `%chart_add_series()` function is
1108
+ * used to set the categories and values of the series:
1109
+ *
1110
+ * @code
1111
+ * chart_add_series(chart, "=Sheet1!$A$2:$A$7", "=Sheet1!$C$2:$C$7");
1112
+ * @endcode
1113
+ *
1114
+ *
1115
+ * The series parameters are:
1116
+ *
1117
+ * - `categories`: This sets the chart category labels. The category is more
1118
+ * or less the same as the X axis. In most Excel chart types the
1119
+ * `categories` property is optional and the chart will just assume a
1120
+ * sequential series from `1..n`:
1121
+ *
1122
+ * @code
1123
+ * // The NULL category will default to 1 to 5 like in Excel.
1124
+ * chart_add_series(chart, NULL, "Sheet1!$A$1:$A$5");
1125
+ * @endcode
1126
+ *
1127
+ * - `values`: This is the most important property of a series and is the
1128
+ * only mandatory option for every chart object. This parameter links the
1129
+ * chart with the worksheet data that it displays.
1130
+ *
1131
+ * The `categories` and `values` should be a string formula like
1132
+ * `"=Sheet1!$A$2:$A$7"` in the same way it is represented in Excel. This is
1133
+ * convenient when recreating a chart from an example in Excel but it is
1134
+ * trickier to generate programmatically. For these cases you can set the
1135
+ * `categories` and `values` to `NULL` and use the
1136
+ * `chart_series_set_categories()` and `chart_series_set_values()` functions:
1137
+ *
1138
+ * @code
1139
+ * lxw_chart_series *series = chart_add_series(chart, NULL, NULL);
1140
+ *
1141
+ * // Configure the series using a syntax that is easier to define programmatically.
1142
+ * chart_series_set_categories(series, "Sheet1", 1, 0, 6, 0); // "=Sheet1!$A$2:$A$7"
1143
+ * chart_series_set_values( series, "Sheet1", 1, 2, 6, 2); // "=Sheet1!$C$2:$C$7"
1144
+ * @endcode
1145
+ *
1146
+ * As shown in the previous example the return value from
1147
+ * `%chart_add_series()` is a lxw_chart_series pointer. This can be used in
1148
+ * other functions that configure a series.
1149
+ *
1150
+ *
1151
+ * More than one series can be added to a chart. The series numbering and
1152
+ * order in the Excel chart will be the same as the order in which they are
1153
+ * added in libxlsxwriter:
1154
+ *
1155
+ * @code
1156
+ * chart_add_series(chart, NULL, "Sheet1!$A$1:$A$5");
1157
+ * chart_add_series(chart, NULL, "Sheet1!$B$1:$B$5");
1158
+ * chart_add_series(chart, NULL, "Sheet1!$C$1:$C$5");
1159
+ * @endcode
1160
+ *
1161
+ * It is also possible to specify non-contiguous ranges:
1162
+ *
1163
+ * @code
1164
+ * chart_add_series(
1165
+ * chart,
1166
+ * "=(Sheet1!$A$1:$A$9,Sheet1!$A$14:$A$25)",
1167
+ * "=(Sheet1!$B$1:$B$9,Sheet1!$B$14:$B$25)"
1168
+ * );
1169
+ * @endcode
1170
+ *
1171
+ */
1172
+ lxw_chart_series *chart_add_series(lxw_chart *chart,
1173
+ const char *categories,
1174
+ const char *values);
1175
+
1176
+ /**
1177
+ * @brief Set a series "categories" range using row and column values.
1178
+ *
1179
+ * @param series A series object created via `chart_add_series()`.
1180
+ * @param sheetname The name of the worksheet that contains the data range.
1181
+ * @param first_row The first row of the range. (All zero indexed.)
1182
+ * @param first_col The first column of the range.
1183
+ * @param last_row The last row of the range.
1184
+ * @param last_col The last col of the range.
1185
+ *
1186
+ * The `categories` and `values` of a chart data series are generally set
1187
+ * using the `chart_add_series()` function and Excel range formulas like
1188
+ * `"=Sheet1!$A$2:$A$7"`.
1189
+ *
1190
+ * The `%chart_series_set_categories()` function is an alternative method that
1191
+ * is easier to generate programmatically. It requires that you set the
1192
+ * `categories` and `values` parameters in `chart_add_series()`to `NULL` and
1193
+ * then set them using row and column values in
1194
+ * `chart_series_set_categories()` and `chart_series_set_values()`:
1195
+ *
1196
+ * @code
1197
+ * lxw_chart_series *series = chart_add_series(chart, NULL, NULL);
1198
+ *
1199
+ * // Configure the series ranges programmatically.
1200
+ * chart_series_set_categories(series, "Sheet1", 1, 0, 6, 0); // "=Sheet1!$A$2:$A$7"
1201
+ * chart_series_set_values( series, "Sheet1", 1, 2, 6, 2); // "=Sheet1!$C$2:$C$7"
1202
+ * @endcode
1203
+ *
1204
+ */
1205
+ void chart_series_set_categories(lxw_chart_series *series,
1206
+ const char *sheetname, lxw_row_t first_row,
1207
+ lxw_col_t first_col, lxw_row_t last_row,
1208
+ lxw_col_t last_col);
1209
+
1210
+ /**
1211
+ * @brief Set a series "values" range using row and column values.
1212
+ *
1213
+ * @param series A series object created via `chart_add_series()`.
1214
+ * @param sheetname The name of the worksheet that contains the data range.
1215
+ * @param first_row The first row of the range. (All zero indexed.)
1216
+ * @param first_col The first column of the range.
1217
+ * @param last_row The last row of the range.
1218
+ * @param last_col The last col of the range.
1219
+ *
1220
+ * The `categories` and `values` of a chart data series are generally set
1221
+ * using the `chart_add_series()` function and Excel range formulas like
1222
+ * `"=Sheet1!$A$2:$A$7"`.
1223
+ *
1224
+ * The `%chart_series_set_values()` function is an alternative method that is
1225
+ * easier to generate programmatically. See the documentation for
1226
+ * `chart_series_set_categories()` above.
1227
+ */
1228
+ void chart_series_set_values(lxw_chart_series *series, const char *sheetname,
1229
+ lxw_row_t first_row, lxw_col_t first_col,
1230
+ lxw_row_t last_row, lxw_col_t last_col);
1231
+
1232
+ /**
1233
+ * @brief Set the name of a chart series range.
1234
+ *
1235
+ * @param series A series object created via `chart_add_series()`.
1236
+ * @param name The series name.
1237
+ *
1238
+ * The `%chart_series_set_name` function is used to set the name for a chart
1239
+ * data series. The series name in Excel is displayed in the chart legend and
1240
+ * in the formula bar. The name property is optional and if it isn't supplied
1241
+ * it will default to `Series 1..n`.
1242
+ *
1243
+ * The function applies to a #lxw_chart_series object created using
1244
+ * `chart_add_series()`:
1245
+ *
1246
+ * @code
1247
+ * lxw_chart_series *series = chart_add_series(chart, NULL, "=Sheet1!$B$2:$B$7");
1248
+ *
1249
+ * chart_series_set_name(series, "Quarterly budget data");
1250
+ * @endcode
1251
+ *
1252
+ * The name parameter can also be a formula such as `=Sheet1!$A$1` to point to
1253
+ * a cell in the workbook that contains the name:
1254
+ *
1255
+ * @code
1256
+ * lxw_chart_series *series = chart_add_series(chart, NULL, "=Sheet1!$B$2:$B$7");
1257
+ *
1258
+ * chart_series_set_name(series, "=Sheet1!$B1$1");
1259
+ * @endcode
1260
+ *
1261
+ * See also the `chart_series_set_name_range()` function to see how to set the
1262
+ * name formula programmatically.
1263
+ */
1264
+ void chart_series_set_name(lxw_chart_series *series, const char *name);
1265
+
1266
+ /**
1267
+ * @brief Set a series name formula using row and column values.
1268
+ *
1269
+ * @param series A series object created via `chart_add_series()`.
1270
+ * @param sheetname The name of the worksheet that contains the cell range.
1271
+ * @param row The zero indexed row number of the range.
1272
+ * @param col The zero indexed column number of the range.
1273
+ *
1274
+ * The `%chart_series_set_name_range()` function can be used to set a series
1275
+ * name range and is an alternative to using `chart_series_set_name()` and a
1276
+ * string formula:
1277
+ *
1278
+ * @code
1279
+ * lxw_chart_series *series = chart_add_series(chart, NULL, "=Sheet1!$B$2:$B$7");
1280
+ *
1281
+ * chart_series_set_name_range(series, "Sheet1", 0, 2); // "=Sheet1!$C$1"
1282
+ * @endcode
1283
+ */
1284
+ void chart_series_set_name_range(lxw_chart_series *series,
1285
+ const char *sheetname, lxw_row_t row,
1286
+ lxw_col_t col);
1287
+ /**
1288
+ * @brief Set the line properties for a chart series.
1289
+ *
1290
+ * @param series A series object created via `chart_add_series()`.
1291
+ * @param line A #lxw_chart_line struct.
1292
+ *
1293
+ * Set the line/border properties of a chart series:
1294
+ *
1295
+ * @code
1296
+ * lxw_chart_line line = {.color = LXW_COLOR_RED};
1297
+ *
1298
+ * chart_series_set_line(series1, &line);
1299
+ * chart_series_set_line(series2, &line);
1300
+ * chart_series_set_line(series3, &line);
1301
+ * @endcode
1302
+ *
1303
+ * @image html chart_series_set_line.png
1304
+ *
1305
+ * For more information see @ref chart_lines.
1306
+ */
1307
+ void chart_series_set_line(lxw_chart_series *series, lxw_chart_line *line);
1308
+
1309
+ /**
1310
+ * @brief Set the fill properties for a chart series.
1311
+ *
1312
+ * @param series A series object created via `chart_add_series()`.
1313
+ * @param fill A #lxw_chart_fill struct.
1314
+ *
1315
+ * Set the fill properties of a chart series:
1316
+ *
1317
+ * @code
1318
+ * lxw_chart_fill fill1 = {.color = LXW_COLOR_RED};
1319
+ * lxw_chart_fill fill2 = {.color = LXW_COLOR_YELLOW};
1320
+ * lxw_chart_fill fill3 = {.color = LXW_COLOR_GREEN};
1321
+ *
1322
+ * chart_series_set_fill(series1, &fill1);
1323
+ * chart_series_set_fill(series2, &fill2);
1324
+ * chart_series_set_fill(series3, &fill3);
1325
+ * @endcode
1326
+ *
1327
+ * @image html chart_series_set_fill.png
1328
+ *
1329
+ * For more information see @ref chart_fills.
1330
+ */
1331
+ void chart_series_set_fill(lxw_chart_series *series, lxw_chart_fill *fill);
1332
+
1333
+ /**
1334
+ * @brief Invert the fill color for negative series values.
1335
+ *
1336
+ * @param series A series object created via `chart_add_series()`.
1337
+ *
1338
+ * Invert the fill color for negative values. Usually only applicable to
1339
+ * column and bar charts.
1340
+ *
1341
+ * @code
1342
+ * chart_series_set_invert_if_negative(series);
1343
+ * @endcode
1344
+ *
1345
+ */
1346
+ void chart_series_set_invert_if_negative(lxw_chart_series *series);
1347
+
1348
+ /**
1349
+ * @brief Set the pattern properties for a chart series.
1350
+ *
1351
+ * @param series A series object created via `chart_add_series()`.
1352
+ * @param pattern A #lxw_chart_pattern struct.
1353
+ *
1354
+ * Set the pattern properties of a chart series:
1355
+ *
1356
+ * @code
1357
+ * lxw_chart_pattern pattern1 = {.type = LXW_CHART_PATTERN_SHINGLE,
1358
+ * .fg_color = 0x804000,
1359
+ * .bg_color = 0XC68C53};
1360
+ *
1361
+ * lxw_chart_pattern pattern2 = {.type = LXW_CHART_PATTERN_HORIZONTAL_BRICK,
1362
+ * .fg_color = 0XB30000,
1363
+ * .bg_color = 0XFF6666};
1364
+ *
1365
+ * chart_series_set_pattern(series1, &pattern1);
1366
+ * chart_series_set_pattern(series2, &pattern2);
1367
+ *
1368
+ * @endcode
1369
+ *
1370
+ * @image html chart_pattern.png
1371
+ *
1372
+ * For more information see #lxw_chart_pattern_type and @ref chart_patterns.
1373
+ */
1374
+ void chart_series_set_pattern(lxw_chart_series *series,
1375
+ lxw_chart_pattern *pattern);
1376
+
1377
+ /**
1378
+ * @brief Set the data marker type for a series.
1379
+ *
1380
+ * @param series A series object created via `chart_add_series()`.
1381
+ * @param type The marker type, see #lxw_chart_marker_type.
1382
+ *
1383
+ * In Excel a chart marker is used to distinguish data points in a plotted
1384
+ * series. In general only Line and Scatter and Radar chart types use
1385
+ * markers. The libxlsxwriter chart types that can have markers are:
1386
+ *
1387
+ * - #LXW_CHART_LINE
1388
+ * - #LXW_CHART_SCATTER
1389
+ * - #LXW_CHART_SCATTER_STRAIGHT
1390
+ * - #LXW_CHART_SCATTER_STRAIGHT_WITH_MARKERS
1391
+ * - #LXW_CHART_SCATTER_SMOOTH
1392
+ * - #LXW_CHART_SCATTER_SMOOTH_WITH_MARKERS
1393
+ * - #LXW_CHART_RADAR
1394
+ * - #LXW_CHART_RADAR_WITH_MARKERS
1395
+ *
1396
+ * The chart types with `MARKERS` in the name have markers with default colors
1397
+ * and shapes turned on by default but it is possible using the various
1398
+ * `chart_series_set_marker_xxx()` functions below to change these defaults. It
1399
+ * is also possible to turn on an off markers.
1400
+ *
1401
+ * The `%chart_series_set_marker_type()` function is used to specify the
1402
+ * type of the series marker:
1403
+ *
1404
+ * @code
1405
+ * chart_series_set_marker_type(series, LXW_CHART_MARKER_DIAMOND);
1406
+ * @endcode
1407
+ *
1408
+ * @image html chart_marker1.png
1409
+ *
1410
+ * The available marker types defined by #lxw_chart_marker_type are:
1411
+ *
1412
+ * - #LXW_CHART_MARKER_AUTOMATIC
1413
+ * - #LXW_CHART_MARKER_NONE
1414
+ * - #LXW_CHART_MARKER_SQUARE
1415
+ * - #LXW_CHART_MARKER_DIAMOND
1416
+ * - #LXW_CHART_MARKER_TRIANGLE
1417
+ * - #LXW_CHART_MARKER_X
1418
+ * - #LXW_CHART_MARKER_STAR
1419
+ * - #LXW_CHART_MARKER_SHORT_DASH
1420
+ * - #LXW_CHART_MARKER_LONG_DASH
1421
+ * - #LXW_CHART_MARKER_CIRCLE
1422
+ * - #LXW_CHART_MARKER_PLUS
1423
+ *
1424
+ * The `#LXW_CHART_MARKER_NONE` type can be used to turn off default markers:
1425
+ *
1426
+ * @code
1427
+ * chart_series_set_marker_type(series, LXW_CHART_MARKER_NONE);
1428
+ * @endcode
1429
+ *
1430
+ * @image html chart_series_set_marker_none.png
1431
+ *
1432
+ * The `#LXW_CHART_MARKER_AUTOMATIC` type is a special case which turns on a
1433
+ * marker using the default marker style for the particular series. If
1434
+ * automatic is on then other marker properties such as size, line or fill
1435
+ * cannot be set.
1436
+ */
1437
+ void chart_series_set_marker_type(lxw_chart_series *series, uint8_t type);
1438
+
1439
+ /**
1440
+ * @brief Set the size of a data marker for a series.
1441
+ *
1442
+ * @param series A series object created via `chart_add_series()`.
1443
+ * @param size The size of the marker.
1444
+ *
1445
+ * The `%chart_series_set_marker_size()` function is used to specify the
1446
+ * size of the series marker:
1447
+ *
1448
+ * @code
1449
+ * chart_series_set_marker_type(series, LXW_CHART_MARKER_CIRCLE);
1450
+ * chart_series_set_marker_size(series, 10);
1451
+ * @endcode
1452
+ *
1453
+ * @image html chart_series_set_marker_size.png
1454
+ *
1455
+ */
1456
+ void chart_series_set_marker_size(lxw_chart_series *series, uint8_t size);
1457
+
1458
+ /**
1459
+ * @brief Set the line properties for a chart series marker.
1460
+ *
1461
+ * @param series A series object created via `chart_add_series()`.
1462
+ * @param line A #lxw_chart_line struct.
1463
+ *
1464
+ * Set the line/border properties of a chart marker:
1465
+ *
1466
+ * @code
1467
+ * lxw_chart_line line = {.color = LXW_COLOR_BLACK};
1468
+ * lxw_chart_fill fill = {.color = LXW_COLOR_RED};
1469
+ *
1470
+ * chart_series_set_marker_type(series, LXW_CHART_MARKER_SQUARE);
1471
+ * chart_series_set_marker_size(series, 8);
1472
+ *
1473
+ * chart_series_set_marker_line(series, &line);
1474
+ * chart_series_set_marker_fill(series, &fill);
1475
+ * @endcode
1476
+ *
1477
+ * @image html chart_marker2.png
1478
+ *
1479
+ * For more information see @ref chart_lines.
1480
+ */
1481
+ void chart_series_set_marker_line(lxw_chart_series *series,
1482
+ lxw_chart_line *line);
1483
+
1484
+ /**
1485
+ * @brief Set the fill properties for a chart series marker.
1486
+ *
1487
+ * @param series A series object created via `chart_add_series()`.
1488
+ * @param fill A #lxw_chart_fill struct.
1489
+ *
1490
+ * Set the fill properties of a chart marker:
1491
+ *
1492
+ * @code
1493
+ * chart_series_set_marker_fill(series, &fill);
1494
+ * @endcode
1495
+ *
1496
+ * See the example and image above and also see @ref chart_fills.
1497
+ */
1498
+ void chart_series_set_marker_fill(lxw_chart_series *series,
1499
+ lxw_chart_fill *fill);
1500
+
1501
+ /**
1502
+ * @brief Set the pattern properties for a chart series marker.
1503
+ *
1504
+ * @param series A series object created via `chart_add_series()`.
1505
+ * @param pattern A #lxw_chart_pattern struct.
1506
+ *
1507
+ * Set the pattern properties of a chart marker:
1508
+ *
1509
+ * @code
1510
+ * chart_series_set_marker_pattern(series, &pattern);
1511
+ * @endcode
1512
+ *
1513
+ * For more information see #lxw_chart_pattern_type and @ref chart_patterns.
1514
+ */
1515
+ void chart_series_set_marker_pattern(lxw_chart_series *series,
1516
+ lxw_chart_pattern *pattern);
1517
+
1518
+ /**
1519
+ * @brief Set the formatting for points in the series.
1520
+ *
1521
+ * @param series A series object created via `chart_add_series()`.
1522
+ * @param points An NULL terminated array of #lxw_chart_point pointers.
1523
+ *
1524
+ * @return A #lxw_error.
1525
+ *
1526
+ * In general formatting is applied to an entire series in a chart. However,
1527
+ * it is occasionally required to format individual points in a series. In
1528
+ * particular this is required for Pie/Doughnut charts where each segment is
1529
+ * represented by a point.
1530
+ *
1531
+ * @dontinclude chart_pie_colors.c
1532
+ * @skip Add the data series
1533
+ * @until chart_series_set_points
1534
+ *
1535
+ * @image html chart_points1.png
1536
+ *
1537
+ * @note The array of #lxw_chart_point pointers should be NULL terminated
1538
+ * as shown in the example.
1539
+ *
1540
+ * For more details see @ref chart_points
1541
+ */
1542
+ lxw_error chart_series_set_points(lxw_chart_series *series,
1543
+ lxw_chart_point *points[]);
1544
+
1545
+ /**
1546
+ * @brief Smooth a line or scatter chart series.
1547
+ *
1548
+ * @param series A series object created via `chart_add_series()`.
1549
+ * @param smooth Turn off/on the line smoothing. (0/1)
1550
+ *
1551
+ * The `chart_series_set_smooth()` function is used to set the smooth property
1552
+ * of a line series. It is only applicable to the line and scatter chart
1553
+ * types:
1554
+ *
1555
+ * @code
1556
+ * chart_series_set_smooth(series2, LXW_TRUE);
1557
+ * @endcode
1558
+ *
1559
+ * @image html chart_smooth.png
1560
+ *
1561
+ *
1562
+ */
1563
+ void chart_series_set_smooth(lxw_chart_series *series, uint8_t smooth);
1564
+
1565
+ /**
1566
+ * @brief Add data labels to a chart series.
1567
+ *
1568
+ * @param series A series object created via `chart_add_series()`.
1569
+ *
1570
+ * The `%chart_series_set_labels()` function is used to turn on data labels
1571
+ * for a chart series. Data labels indicate the values of the plotted data
1572
+ * points.
1573
+ *
1574
+ * @code
1575
+ * chart_series_set_labels(series);
1576
+ * @endcode
1577
+ *
1578
+ * @image html chart_labels1.png
1579
+ *
1580
+ * By default data labels are displayed in Excel with only the values shown:
1581
+ *
1582
+ * @image html chart_labels2.png
1583
+ *
1584
+ * However, it is possible to configure other display options, as shown
1585
+ * in the functions below.
1586
+ *
1587
+ * For more information see @ref chart_labels.
1588
+ */
1589
+ void chart_series_set_labels(lxw_chart_series *series);
1590
+
1591
+ /**
1592
+ * @brief Set the display options for the labels of a data series.
1593
+ *
1594
+ * @param series A series object created via `chart_add_series()`.
1595
+ * @param show_name Turn on/off the series name in the label caption.
1596
+ * @param show_category Turn on/off the category name in the label caption.
1597
+ * @param show_value Turn on/off the value in the label caption.
1598
+ *
1599
+ * The `%chart_series_set_labels_options()` function is used to set the
1600
+ * parameters that are displayed in the series data label:
1601
+ *
1602
+ * @code
1603
+ * chart_series_set_labels(series);
1604
+ * chart_series_set_labels_options(series, LXW_TRUE, LXW_TRUE, LXW_TRUE);
1605
+ * @endcode
1606
+ *
1607
+ * @image html chart_labels3.png
1608
+ *
1609
+ * For more information see @ref chart_labels.
1610
+ */
1611
+ void chart_series_set_labels_options(lxw_chart_series *series,
1612
+ uint8_t show_name, uint8_t show_category,
1613
+ uint8_t show_value);
1614
+
1615
+ /**
1616
+ * @brief Set the separator for the data label captions.
1617
+ *
1618
+ * @param series A series object created via `chart_add_series()`.
1619
+ * @param separator The separator for the data label options:
1620
+ * #lxw_chart_label_separator.
1621
+ *
1622
+ * The `%chart_series_set_labels_separator()` function is used to change the
1623
+ * separator between multiple data label items. The default options is a comma
1624
+ * separator as shown in the previous example.
1625
+ *
1626
+ * The available options are:
1627
+ *
1628
+ * - #LXW_CHART_LABEL_SEPARATOR_SEMICOLON: semicolon separator.
1629
+ * - #LXW_CHART_LABEL_SEPARATOR_PERIOD: a period (dot) separator.
1630
+ * - #LXW_CHART_LABEL_SEPARATOR_NEWLINE: a newline separator.
1631
+ * - #LXW_CHART_LABEL_SEPARATOR_SPACE: a space separator.
1632
+ *
1633
+ * For example:
1634
+ *
1635
+ * @code
1636
+ * chart_series_set_labels(series);
1637
+ * chart_series_set_labels_options(series, LXW_TRUE, LXW_TRUE, LXW_TRUE);
1638
+ * chart_series_set_labels_separator(series, LXW_CHART_LABEL_SEPARATOR_NEWLINE);
1639
+ * @endcode
1640
+ *
1641
+ * @image html chart_labels4.png
1642
+ *
1643
+ * For more information see @ref chart_labels.
1644
+ */
1645
+ void chart_series_set_labels_separator(lxw_chart_series *series,
1646
+ uint8_t separator);
1647
+
1648
+ /**
1649
+ * @brief Set the data label position for a series.
1650
+ *
1651
+ * @param series A series object created via `chart_add_series()`.
1652
+ * @param position The data label position: #lxw_chart_label_position.
1653
+ *
1654
+ * The `%chart_series_set_labels_position()` function sets the position of
1655
+ * the labels in the data series:
1656
+ *
1657
+ * @code
1658
+ * chart_series_set_labels(series);
1659
+ * chart_series_set_labels_position(series, LXW_CHART_LABEL_POSITION_ABOVE);
1660
+ * @endcode
1661
+ *
1662
+ * @image html chart_labels5.png
1663
+ *
1664
+ * In Excel the allowable data label positions vary for different chart
1665
+ * types. The allowable, and default, positions are:
1666
+ *
1667
+ * | Position | Line, Scatter | Bar, Column | Pie, Doughnut | Area, Radar |
1668
+ * | :------------------------------------ | :------------ | :------------ | :------------ | :------------ |
1669
+ * | #LXW_CHART_LABEL_POSITION_CENTER | Yes | Yes | Yes | Yes (default) |
1670
+ * | #LXW_CHART_LABEL_POSITION_RIGHT | Yes (default) | | | |
1671
+ * | #LXW_CHART_LABEL_POSITION_LEFT | Yes | | | |
1672
+ * | #LXW_CHART_LABEL_POSITION_ABOVE | Yes | | | |
1673
+ * | #LXW_CHART_LABEL_POSITION_BELOW | Yes | | | |
1674
+ * | #LXW_CHART_LABEL_POSITION_INSIDE_BASE | | Yes | | |
1675
+ * | #LXW_CHART_LABEL_POSITION_INSIDE_END | | Yes | Yes | |
1676
+ * | #LXW_CHART_LABEL_POSITION_OUTSIDE_END | | Yes (default) | Yes | |
1677
+ * | #LXW_CHART_LABEL_POSITION_BEST_FIT | | | Yes (default) | |
1678
+ *
1679
+ *
1680
+ * For more information see @ref chart_labels.
1681
+ */
1682
+ void chart_series_set_labels_position(lxw_chart_series *series,
1683
+ uint8_t position);
1684
+
1685
+ /**
1686
+ * @brief Set leader lines for Pie and Doughnut charts.
1687
+ *
1688
+ * @param series A series object created via `chart_add_series()`.
1689
+ *
1690
+ * The `%chart_series_set_labels_leader_line()` function is used to turn on
1691
+ * leader lines for the data label of a series. It is mainly used for pie
1692
+ * or doughnut charts:
1693
+ *
1694
+ * @code
1695
+ * chart_series_set_labels(series);
1696
+ * chart_series_set_labels_leader_line(series);
1697
+ * @endcode
1698
+ *
1699
+ * @note Even when leader lines are turned on they aren't automatically
1700
+ * visible in Excel or XlsxWriter. Due to an Excel limitation
1701
+ * (or design) leader lines only appear if the data label is moved
1702
+ * manually or if the data labels are very close and need to be
1703
+ * adjusted automatically.
1704
+ *
1705
+ * For more information see @ref chart_labels.
1706
+ */
1707
+ void chart_series_set_labels_leader_line(lxw_chart_series *series);
1708
+
1709
+ /**
1710
+ * @brief Set the legend key for a data label in a chart series.
1711
+ *
1712
+ * @param series A series object created via `chart_add_series()`.
1713
+ *
1714
+ * The `%chart_series_set_labels_legend()` function is used to set the
1715
+ * legend key for a data series:
1716
+ *
1717
+ * @code
1718
+ * chart_series_set_labels(series);
1719
+ * chart_series_set_labels_legend(series);
1720
+ * @endcode
1721
+ *
1722
+ * @image html chart_labels6.png
1723
+ *
1724
+ * For more information see @ref chart_labels.
1725
+ */
1726
+ void chart_series_set_labels_legend(lxw_chart_series *series);
1727
+
1728
+ /**
1729
+ * @brief Set the percentage for a Pie/Doughnut data point.
1730
+ *
1731
+ * @param series A series object created via `chart_add_series()`.
1732
+ *
1733
+ * The `%chart_series_set_labels_percentage()` function is used to turn on
1734
+ * the display of data labels as a percentage for a series. It is mainly
1735
+ * used for pie charts:
1736
+ *
1737
+ * @code
1738
+ * chart_series_set_labels(series);
1739
+ * chart_series_set_labels_options(series, LXW_FALSE, LXW_FALSE, LXW_FALSE);
1740
+ * chart_series_set_labels_percentage(series);
1741
+ * @endcode
1742
+ *
1743
+ * @image html chart_labels7.png
1744
+ *
1745
+ * For more information see @ref chart_labels.
1746
+ */
1747
+ void chart_series_set_labels_percentage(lxw_chart_series *series);
1748
+
1749
+ /**
1750
+ * @brief Set the number format for chart data labels in a series.
1751
+ *
1752
+ * @param series A series object created via `chart_add_series()`.
1753
+ * @param num_format The number format string.
1754
+ *
1755
+ * The `%chart_series_set_labels_num_format()` function is used to set the
1756
+ * number format for data labels:
1757
+ *
1758
+ * @code
1759
+ * chart_series_set_labels(series);
1760
+ * chart_series_set_labels_num_format(series, "$0.00");
1761
+ * @endcode
1762
+ *
1763
+ * @image html chart_labels8.png
1764
+ *
1765
+ * The number format is similar to the Worksheet Cell Format num_format,
1766
+ * see `format_set_num_format()`.
1767
+ *
1768
+ * For more information see @ref chart_labels.
1769
+ */
1770
+ void chart_series_set_labels_num_format(lxw_chart_series *series,
1771
+ char *num_format);
1772
+
1773
+ /**
1774
+ * @brief Set the font properties for chart data labels in a series
1775
+ *
1776
+ * @param series A series object created via `chart_add_series()`.
1777
+ * @param font A pointer to a chart #lxw_chart_font font struct.
1778
+ *
1779
+ *
1780
+ * The `%chart_series_set_labels_font()` function is used to set the font
1781
+ * for data labels:
1782
+ *
1783
+ * @code
1784
+ * lxw_chart_font font = {.name = "Consolas", .color = LXW_COLOR_RED};
1785
+ *
1786
+ * chart_series_set_labels(series);
1787
+ * chart_series_set_labels_font(series, &font);
1788
+ * @endcode
1789
+ *
1790
+ * @image html chart_labels9.png
1791
+ *
1792
+ * For more information see @ref chart_fonts and @ref chart_labels.
1793
+ *
1794
+ */
1795
+ void chart_series_set_labels_font(lxw_chart_series *series,
1796
+ lxw_chart_font *font);
1797
+
1798
+ /**
1799
+ * @brief Turn on a trendline for a chart data series.
1800
+ *
1801
+ * @param series A series object created via `chart_add_series()`.
1802
+ * @param type The type of trendline: #lxw_chart_trendline_type.
1803
+ * @param value The order/period value for polynomial and moving average
1804
+ * trendlines.
1805
+ *
1806
+ * A trendline can be added to a chart series to indicate trends in the data
1807
+ * such as a moving average or a polynomial fit. The trendlines types are
1808
+ * shown in the following Excel dialog:
1809
+ *
1810
+ * @image html chart_trendline0.png
1811
+ *
1812
+ * The `%chart_series_set_trendline()` function turns on these trendlines for
1813
+ * a data series:
1814
+ *
1815
+ * @code
1816
+ * chart = workbook_add_chart(workbook, LXW_CHART_LINE);
1817
+ * series = chart_add_series(chart, NULL, "Sheet1!$A$1:$A$6");
1818
+ *
1819
+ * chart_series_set_trendline(series, LXW_CHART_TRENDLINE_TYPE_LINEAR, 0);
1820
+ * @endcode
1821
+ *
1822
+ * @image html chart_trendline2.png
1823
+ *
1824
+ * The `value` parameter corresponds to *order* for a polynomial trendline
1825
+ * and *period* for a Moving Average trendline. It both cases it must be >= 2.
1826
+ * The `value` parameter is ignored for all other trendlines:
1827
+ *
1828
+ * @code
1829
+ * chart_series_set_trendline(series, LXW_CHART_TRENDLINE_TYPE_AVERAGE, 2);
1830
+ * @endcode
1831
+ *
1832
+ * @image html chart_trendline3.png
1833
+ *
1834
+ * The allowable values for the the trendline `type` are:
1835
+ *
1836
+ * - #LXW_CHART_TRENDLINE_TYPE_LINEAR: Linear trendline.
1837
+ * - #LXW_CHART_TRENDLINE_TYPE_LOG: Logarithm trendline.
1838
+ * - #LXW_CHART_TRENDLINE_TYPE_POLY: Polynomial trendline. The `value`
1839
+ * parameter corresponds to *order*.
1840
+ * - #LXW_CHART_TRENDLINE_TYPE_POWER: Power trendline.
1841
+ * - #LXW_CHART_TRENDLINE_TYPE_EXP: Exponential trendline.
1842
+ * - #LXW_CHART_TRENDLINE_TYPE_AVERAGE: Moving Average trendline. The `value`
1843
+ * parameter corresponds to *period*.
1844
+ *
1845
+ * Other trendline options, such as those shown in the following Excel
1846
+ * dialog, can be set using the functions below.
1847
+ *
1848
+ * @image html chart_trendline1.png
1849
+ *
1850
+ * For more information see @ref chart_trendlines.
1851
+ */
1852
+ void chart_series_set_trendline(lxw_chart_series *series, uint8_t type,
1853
+ uint8_t value);
1854
+
1855
+ /**
1856
+ * @brief Set the trendline forecast for a chart data series.
1857
+ *
1858
+ * @param series A series object created via `chart_add_series()`.
1859
+ * @param forward The forward period.
1860
+ * @param backward The backwards period.
1861
+ *
1862
+ * The `%chart_series_set_trendline_forecast()` function sets the forward
1863
+ * and backward forecast periods for the trendline:
1864
+ *
1865
+ * @code
1866
+ * chart_series_set_trendline(series, LXW_CHART_TRENDLINE_TYPE_LINEAR, 0);
1867
+ * chart_series_set_trendline_forecast(series, 0.5, 0.5);
1868
+ * @endcode
1869
+ *
1870
+ * @image html chart_trendline4.png
1871
+ *
1872
+ * @note This feature isn't available for Moving Average in Excel.
1873
+ *
1874
+ * For more information see @ref chart_trendlines.
1875
+ */
1876
+ void chart_series_set_trendline_forecast(lxw_chart_series *series,
1877
+ double forward, double backward);
1878
+
1879
+ /**
1880
+ * @brief Display the equation of a trendline for a chart data series.
1881
+ *
1882
+ * @param series A series object created via `chart_add_series()`.
1883
+ *
1884
+ * The `%chart_series_set_trendline_equation()` function displays the
1885
+ * equation of the trendline on the chart:
1886
+ *
1887
+ * @code
1888
+ * chart_series_set_trendline(series, LXW_CHART_TRENDLINE_TYPE_LINEAR, 0);
1889
+ * chart_series_set_trendline_equation(series);
1890
+ * @endcode
1891
+ *
1892
+ * @image html chart_trendline5.png
1893
+ *
1894
+ * @note This feature isn't available for Moving Average in Excel.
1895
+ *
1896
+ * For more information see @ref chart_trendlines.
1897
+ */
1898
+ void chart_series_set_trendline_equation(lxw_chart_series *series);
1899
+
1900
+ /**
1901
+ * @brief Display the R squared value of a trendline for a chart data series.
1902
+ *
1903
+ * @param series A series object created via `chart_add_series()`.
1904
+ *
1905
+ * The `%chart_series_set_trendline_r_squared()` function displays the
1906
+ * R-squared value for the trendline on the chart:
1907
+ *
1908
+ * @code
1909
+ * chart_series_set_trendline(series, LXW_CHART_TRENDLINE_TYPE_LINEAR, 0);
1910
+ * chart_series_set_trendline_r_squared(series);
1911
+ * @endcode
1912
+ *
1913
+ * @image html chart_trendline6.png
1914
+ *
1915
+ * @note This feature isn't available for Moving Average in Excel.
1916
+ *
1917
+ * For more information see @ref chart_trendlines.
1918
+ */
1919
+ void chart_series_set_trendline_r_squared(lxw_chart_series *series);
1920
+
1921
+ /**
1922
+ * @brief Set the trendline Y-axis intercept for a chart data series.
1923
+ *
1924
+ * @param series A series object created via `chart_add_series()`.
1925
+ * @param intercept Y-axis intercept value.
1926
+ *
1927
+ * The `%chart_series_set_trendline_intercept()` function sets the Y-axis
1928
+ * intercept for the trendline:
1929
+ *
1930
+ * @code
1931
+ * chart_series_set_trendline(series, LXW_CHART_TRENDLINE_TYPE_LINEAR, 0);
1932
+ * chart_series_set_trendline_equation(series);
1933
+ * chart_series_set_trendline_intercept(series, 0.8);
1934
+ * @endcode
1935
+ *
1936
+ * @image html chart_trendline7.png
1937
+ *
1938
+ * As can be seen from the equation on the chart the intercept point
1939
+ * (when X=0) is the same as the value set in the equation.
1940
+ *
1941
+ * @note The intercept feature is only available in Excel for Exponential,
1942
+ * Linear and Polynomial trendline types.
1943
+ *
1944
+ * For more information see @ref chart_trendlines.
1945
+ */
1946
+ void chart_series_set_trendline_intercept(lxw_chart_series *series,
1947
+ double intercept);
1948
+
1949
+ /**
1950
+ * @brief Set the trendline name for a chart data series.
1951
+ *
1952
+ * @param series A series object created via `chart_add_series()`.
1953
+ * @param name The name of the trendline to display in the legend.
1954
+ *
1955
+ * The `%chart_series_set_trendline_name()` function sets the name of the
1956
+ * trendline that is displayed in the chart legend. In the examples above
1957
+ * the trendlines are displayed with default names like "Linear (Series 1)"
1958
+ * and "2 per Mov. Avg. (Series 1)". If these names are too verbose or not
1959
+ * descriptive enough you can set your own trendline name:
1960
+ *
1961
+ * @code
1962
+ * chart_series_set_trendline(series, LXW_CHART_TRENDLINE_TYPE_LINEAR, 0);
1963
+ * chart_series_set_trendline_name(series, "My trendline");
1964
+ * @endcode
1965
+ *
1966
+ * @image html chart_trendline8.png
1967
+ *
1968
+ * It is often preferable to turn off the trendline caption in the legend.
1969
+ * This is down in Excel by deleting the trendline name from the legend.
1970
+ * In libxlsxwriter this is done using the `chart_legend_delete_series()`
1971
+ * function to delete the zero based series numbers:
1972
+ *
1973
+ * @code
1974
+ * chart_series_set_trendline(series, LXW_CHART_TRENDLINE_TYPE_LINEAR, 0);
1975
+ *
1976
+ * // Delete the series name for the second series (=1 in zero base).
1977
+ * // The -1 value indicates the end of the array of values.
1978
+ * int16_t names[] = {1, -1};
1979
+ * chart_legend_delete_series(chart, names);
1980
+ * @endcode
1981
+ *
1982
+ * @image html chart_trendline9.png
1983
+ *
1984
+ * For more information see @ref chart_trendlines.
1985
+ */
1986
+ void chart_series_set_trendline_name(lxw_chart_series *series, char *name);
1987
+
1988
+ /**
1989
+ * @brief Set the trendline line properties for a chart data series.
1990
+ *
1991
+ * @param series A series object created via `chart_add_series()`.
1992
+ * @param line A #lxw_chart_line struct.
1993
+ *
1994
+ * The `%chart_series_set_trendline_line()` function is used to set the line
1995
+ * properties of a trendline:
1996
+ *
1997
+ * @code
1998
+ * lxw_chart_line line = {.color = LXW_COLOR_RED,
1999
+ * .dash_type = LXW_CHART_LINE_DASH_LONG_DASH};
2000
+ *
2001
+ * chart_series_set_trendline(series, LXW_CHART_TRENDLINE_TYPE_LINEAR, 0);
2002
+ * chart_series_set_trendline_line(series, &line);
2003
+ * @endcode
2004
+ *
2005
+ * @image html chart_trendline10.png
2006
+ *
2007
+ * For more information see @ref chart_trendlines and @ref chart_lines.
2008
+ */
2009
+ void chart_series_set_trendline_line(lxw_chart_series *series,
2010
+ lxw_chart_line *line);
2011
+
2012
+ /**
2013
+ * Set the X or Y error bars for a chart series.
2014
+ *
2015
+ * @param error_bars A pointer to the series X or Y error bars.
2016
+ * @param type The type of error bar: #lxw_chart_error_bar_type.
2017
+ * @param value The error value.
2018
+ *
2019
+ * Error bars can be added to a chart series to indicate error bounds in the
2020
+ * data. The error bars can be vertical `y_error_bars` (the most common type)
2021
+ * or horizontal `x_error_bars` (for Bar and Scatter charts only).
2022
+ *
2023
+ * @image html chart_error_bars0.png
2024
+ *
2025
+ * The `%chart_series_set_error_bars()` function sets the error bar type
2026
+ * and value associated with the type:
2027
+ *
2028
+ * @code
2029
+ * lxw_chart_series *series = chart_add_series(chart,
2030
+ * "=Sheet1!$A$1:$A$5",
2031
+ * "=Sheet1!$B$1:$B$5");
2032
+ *
2033
+ * chart_series_set_error_bars(series->y_error_bars,
2034
+ * LXW_CHART_ERROR_BAR_TYPE_STD_ERROR, 0);
2035
+ * @endcode
2036
+ *
2037
+ * @image html chart_error_bars1.png
2038
+ *
2039
+ * The error bar types that be used are:
2040
+ *
2041
+ * - #LXW_CHART_ERROR_BAR_TYPE_STD_ERROR: Standard error.
2042
+ * - #LXW_CHART_ERROR_BAR_TYPE_FIXED: Fixed value.
2043
+ * - #LXW_CHART_ERROR_BAR_TYPE_PERCENTAGE: Percentage.
2044
+ * - #LXW_CHART_ERROR_BAR_TYPE_STD_DEV: Standard deviation(s).
2045
+ *
2046
+ * @note Custom error bars are not currently supported.
2047
+ *
2048
+ * All error bar types, apart from Standard error, should have a valid
2049
+ * value to set the error range:
2050
+ *
2051
+ * @code
2052
+ * chart_series_set_error_bars(series1->y_error_bars,
2053
+ * LXW_CHART_ERROR_BAR_TYPE_FIXED, 2);
2054
+ *
2055
+ * chart_series_set_error_bars(series2->y_error_bars,
2056
+ * LXW_CHART_ERROR_BAR_TYPE_PERCENTAGE, 5);
2057
+ *
2058
+ * chart_series_set_error_bars(series3->y_error_bars,
2059
+ * LXW_CHART_ERROR_BAR_TYPE_STD_DEV, 1);
2060
+ * @endcode
2061
+ *
2062
+ * For the Standard error type the value is ignored.
2063
+ *
2064
+ * For more information see @ref chart_error_bars.
2065
+ */
2066
+ void chart_series_set_error_bars(lxw_series_error_bars *error_bars,
2067
+ uint8_t type, double value);
2068
+
2069
+ /**
2070
+ * @brief Set the direction (up, down or both) of the error bars for a chart
2071
+ * series.
2072
+ *
2073
+ * @param error_bars A pointer to the series X or Y error bars.
2074
+ * @param direction The bar direction: #lxw_chart_error_bar_direction .
2075
+ *
2076
+ * The `%chart_series_set_error_bars_direction()` function sets the
2077
+ * direction of the error bars:
2078
+ *
2079
+ * @code
2080
+ * chart_series_set_error_bars(series->y_error_bars,
2081
+ * LXW_CHART_ERROR_BAR_TYPE_STD_ERROR, 0);
2082
+ *
2083
+ * chart_series_set_error_bars_direction(series->y_error_bars,
2084
+ * LXW_CHART_ERROR_BAR_DIR_PLUS);
2085
+ * @endcode
2086
+ *
2087
+ * @image html chart_error_bars2.png
2088
+ *
2089
+ * The valid directions are:
2090
+ *
2091
+ * - #LXW_CHART_ERROR_BAR_DIR_BOTH: Error bar extends in both directions.
2092
+ * The default.
2093
+ * - #LXW_CHART_ERROR_BAR_DIR_PLUS: Error bar extends in positive direction.
2094
+ * - #LXW_CHART_ERROR_BAR_DIR_MINUS: Error bar extends in negative direction.
2095
+ *
2096
+ * For more information see @ref chart_error_bars.
2097
+ */
2098
+ void chart_series_set_error_bars_direction(lxw_series_error_bars *error_bars,
2099
+ uint8_t direction);
2100
+
2101
+ /**
2102
+ * @brief Set the end cap type for the error bars of a chart series.
2103
+ *
2104
+ * @param error_bars A pointer to the series X or Y error bars.
2105
+ * @param endcap The error bar end cap type: #lxw_chart_error_bar_cap .
2106
+ *
2107
+ * The `%chart_series_set_error_bars_endcap()` function sets the end cap
2108
+ * type for the error bars:
2109
+ *
2110
+ * @code
2111
+ * chart_series_set_error_bars(series->y_error_bars,
2112
+ * LXW_CHART_ERROR_BAR_TYPE_STD_ERROR, 0);
2113
+ *
2114
+ * chart_series_set_error_bars_endcap(series->y_error_bars,
2115
+ LXW_CHART_ERROR_BAR_NO_CAP);
2116
+ * @endcode
2117
+ *
2118
+ * @image html chart_error_bars3.png
2119
+ *
2120
+ * The valid values are:
2121
+ *
2122
+ * - #LXW_CHART_ERROR_BAR_END_CAP: Flat end cap. The default.
2123
+ * - #LXW_CHART_ERROR_BAR_NO_CAP: No end cap.
2124
+ *
2125
+ * For more information see @ref chart_error_bars.
2126
+ */
2127
+ void chart_series_set_error_bars_endcap(lxw_series_error_bars *error_bars,
2128
+ uint8_t endcap);
2129
+
2130
+ /**
2131
+ * @brief Set the line properties for a chart series error bars.
2132
+ *
2133
+ * @param error_bars A pointer to the series X or Y error bars.
2134
+ * @param line A #lxw_chart_line struct.
2135
+ *
2136
+ * The `%chart_series_set_error_bars_line()` function sets the line
2137
+ * properties for the error bars:
2138
+ *
2139
+ * @code
2140
+ * lxw_chart_line line = {.color = LXW_COLOR_RED,
2141
+ * .dash_type = LXW_CHART_LINE_DASH_ROUND_DOT};
2142
+ *
2143
+ * chart_series_set_error_bars(series->y_error_bars,
2144
+ * LXW_CHART_ERROR_BAR_TYPE_STD_ERROR, 0);
2145
+ *
2146
+ * chart_series_set_error_bars_line(series->y_error_bars, &line);
2147
+ * @endcode
2148
+ *
2149
+ * @image html chart_error_bars4.png
2150
+ *
2151
+ * For more information see @ref chart_lines and @ref chart_error_bars.
2152
+ */
2153
+ void chart_series_set_error_bars_line(lxw_series_error_bars *error_bars,
2154
+ lxw_chart_line *line);
2155
+
2156
+ /**
2157
+ * @brief Set the name caption of the an axis.
2158
+ *
2159
+ * @param axis A pointer to a chart #lxw_chart_axis object.
2160
+ * @param name The name caption of the axis.
2161
+ *
2162
+ * The `%chart_axis_set_name()` function sets the name (also known as title or
2163
+ * caption) for an axis. It can be used for the X or Y axes. The name is
2164
+ * displayed below an X axis and to the side of a Y axis.
2165
+ *
2166
+ * @code
2167
+ * chart_axis_set_name(chart->x_axis, "Earnings per Quarter");
2168
+ * chart_axis_set_name(chart->y_axis, "US Dollars (Millions)");
2169
+ * @endcode
2170
+ *
2171
+ * @image html chart_axis_set_name.png
2172
+ *
2173
+ * The name parameter can also be a formula such as `=Sheet1!$A$1` to point to
2174
+ * a cell in the workbook that contains the name:
2175
+ *
2176
+ * @code
2177
+ * chart_axis_set_name(chart->x_axis, "=Sheet1!$B1$1");
2178
+ * @endcode
2179
+ *
2180
+ * See also the `chart_axis_set_name_range()` function to see how to set the
2181
+ * name formula programmatically.
2182
+ *
2183
+ * **Axis types**: This function is applicable to to all axes types.
2184
+ * See @ref ww_charts_axes.
2185
+ */
2186
+ void chart_axis_set_name(lxw_chart_axis *axis, const char *name);
2187
+
2188
+ /**
2189
+ * @brief Set a chart axis name formula using row and column values.
2190
+ *
2191
+ * @param axis A pointer to a chart #lxw_chart_axis object.
2192
+ * @param sheetname The name of the worksheet that contains the cell range.
2193
+ * @param row The zero indexed row number of the range.
2194
+ * @param col The zero indexed column number of the range.
2195
+ *
2196
+ * The `%chart_axis_set_name_range()` function can be used to set an axis name
2197
+ * range and is an alternative to using `chart_axis_set_name()` and a string
2198
+ * formula:
2199
+ *
2200
+ * @code
2201
+ * chart_axis_set_name_range(chart->x_axis, "Sheet1", 1, 0);
2202
+ * chart_axis_set_name_range(chart->y_axis, "Sheet1", 2, 0);
2203
+ * @endcode
2204
+ *
2205
+ * **Axis types**: This function is applicable to to all axes types.
2206
+ * See @ref ww_charts_axes.
2207
+ */
2208
+ void chart_axis_set_name_range(lxw_chart_axis *axis, const char *sheetname,
2209
+ lxw_row_t row, lxw_col_t col);
2210
+
2211
+ /**
2212
+ * @brief Set the font properties for a chart axis name.
2213
+ *
2214
+ * @param axis A pointer to a chart #lxw_chart_axis object.
2215
+ * @param font A pointer to a chart #lxw_chart_font font struct.
2216
+ *
2217
+ * The `%chart_axis_set_name_font()` function is used to set the font of an
2218
+ * axis name:
2219
+ *
2220
+ * @code
2221
+ * lxw_chart_font font = {.bold = LXW_TRUE, .color = LXW_COLOR_BLUE};
2222
+ *
2223
+ * chart_axis_set_name(chart->x_axis, "Yearly data");
2224
+ * chart_axis_set_name_font(chart->x_axis, &font);
2225
+ * @endcode
2226
+ *
2227
+ * @image html chart_axis_set_name_font.png
2228
+ *
2229
+ * For more information see @ref chart_fonts.
2230
+ *
2231
+ * **Axis types**: This function is applicable to to all axes types.
2232
+ * See @ref ww_charts_axes.
2233
+ */
2234
+ void chart_axis_set_name_font(lxw_chart_axis *axis, lxw_chart_font *font);
2235
+
2236
+ /**
2237
+ * @brief Set the font properties for the numbers of a chart axis.
2238
+ *
2239
+ * @param axis A pointer to a chart #lxw_chart_axis object.
2240
+ * @param font A pointer to a chart #lxw_chart_font font struct.
2241
+ *
2242
+ * The `%chart_axis_set_num_font()` function is used to set the font of the
2243
+ * numbers on an axis:
2244
+ *
2245
+ * @code
2246
+ * lxw_chart_font font = {.bold = LXW_TRUE, .color = LXW_COLOR_BLUE};
2247
+ *
2248
+ * chart_axis_set_num_font(chart->x_axis, &font1);
2249
+ * @endcode
2250
+ *
2251
+ * @image html chart_axis_set_num_font.png
2252
+ *
2253
+ * For more information see @ref chart_fonts.
2254
+ *
2255
+ * **Axis types**: This function is applicable to to all axes types.
2256
+ * See @ref ww_charts_axes.
2257
+ */
2258
+ void chart_axis_set_num_font(lxw_chart_axis *axis, lxw_chart_font *font);
2259
+
2260
+ /**
2261
+ * @brief Set the number format for a chart axis.
2262
+ *
2263
+ * @param axis A pointer to a chart #lxw_chart_axis object.
2264
+ * @param num_format The number format string.
2265
+ *
2266
+ * The `%chart_axis_set_num_format()` function is used to set the format of
2267
+ * the numbers on an axis:
2268
+ *
2269
+ * @code
2270
+ * chart_axis_set_num_format(chart->x_axis, "0.00%");
2271
+ * chart_axis_set_num_format(chart->y_axis, "$#,##0.00");
2272
+ * @endcode
2273
+ *
2274
+ * The number format is similar to the Worksheet Cell Format num_format,
2275
+ * see `format_set_num_format()`.
2276
+ *
2277
+ * @image html chart_axis_num_format.png
2278
+ *
2279
+ * **Axis types**: This function is applicable to to all axes types.
2280
+ * See @ref ww_charts_axes.
2281
+ */
2282
+ void chart_axis_set_num_format(lxw_chart_axis *axis, char *num_format);
2283
+
2284
+ /**
2285
+ * @brief Set the line properties for a chart axis.
2286
+ *
2287
+ * @param axis A pointer to a chart #lxw_chart_axis object.
2288
+ * @param line A #lxw_chart_line struct.
2289
+ *
2290
+ * Set the line properties of a chart axis:
2291
+ *
2292
+ * @code
2293
+ * // Hide the Y axis.
2294
+ * lxw_chart_line line = {.none = LXW_TRUE};
2295
+ *
2296
+ * chart_axis_set_line(chart->y_axis, &line);
2297
+ * @endcode
2298
+ *
2299
+ * @image html chart_axis_set_line.png
2300
+ *
2301
+ * For more information see @ref chart_lines.
2302
+ *
2303
+ * **Axis types**: This function is applicable to to all axes types.
2304
+ * See @ref ww_charts_axes.
2305
+ */
2306
+ void chart_axis_set_line(lxw_chart_axis *axis, lxw_chart_line *line);
2307
+
2308
+ /**
2309
+ * @brief Set the fill properties for a chart axis.
2310
+ *
2311
+ * @param axis A pointer to a chart #lxw_chart_axis object.
2312
+ * @param fill A #lxw_chart_fill struct.
2313
+ *
2314
+ * Set the fill properties of a chart axis:
2315
+ *
2316
+ * @code
2317
+ * lxw_chart_fill fill = {.color = LXW_COLOR_YELLOW};
2318
+ *
2319
+ * chart_axis_set_fill(chart->y_axis, &fill);
2320
+ * @endcode
2321
+ *
2322
+ * @image html chart_axis_set_fill.png
2323
+ *
2324
+ * For more information see @ref chart_fills.
2325
+ *
2326
+ * **Axis types**: This function is applicable to to all axes types.
2327
+ * See @ref ww_charts_axes.
2328
+ */
2329
+ void chart_axis_set_fill(lxw_chart_axis *axis, lxw_chart_fill *fill);
2330
+
2331
+ /**
2332
+ * @brief Set the pattern properties for a chart axis.
2333
+ *
2334
+ * @param axis A pointer to a chart #lxw_chart_axis object.
2335
+ * @param pattern A #lxw_chart_pattern struct.
2336
+ *
2337
+ * Set the pattern properties of a chart axis:
2338
+ *
2339
+ * @code
2340
+ * chart_axis_set_pattern(chart->y_axis, &pattern);
2341
+ * @endcode
2342
+ *
2343
+ * For more information see #lxw_chart_pattern_type and @ref chart_patterns.
2344
+ *
2345
+ * **Axis types**: This function is applicable to to all axes types.
2346
+ * See @ref ww_charts_axes.
2347
+ */
2348
+ void chart_axis_set_pattern(lxw_chart_axis *axis, lxw_chart_pattern *pattern);
2349
+
2350
+ /**
2351
+ * @brief Reverse the order of the axis categories or values.
2352
+ *
2353
+ * @param axis A pointer to a chart #lxw_chart_axis object.
2354
+ *
2355
+ * Reverse the order of the axis categories or values:
2356
+ *
2357
+ * @code
2358
+ * chart_axis_set_reverse(chart->x_axis);
2359
+ * @endcode
2360
+ *
2361
+ * @image html chart_reverse.png
2362
+ *
2363
+ * **Axis types**: This function is applicable to to all axes types.
2364
+ * See @ref ww_charts_axes.
2365
+ */
2366
+ void chart_axis_set_reverse(lxw_chart_axis *axis);
2367
+
2368
+ /**
2369
+ * @brief Set the position that the axis will cross the opposite axis.
2370
+ *
2371
+ * @param axis A pointer to a chart #lxw_chart_axis object.
2372
+ * @param value The category or value that the axis crosses at.
2373
+ *
2374
+ * Set the position that the axis will cross the opposite axis:
2375
+ *
2376
+ * @code
2377
+ * chart_axis_set_crossing(chart->x_axis, 3);
2378
+ * chart_axis_set_crossing(chart->y_axis, 8);
2379
+ * @endcode
2380
+ *
2381
+ * @image html chart_crossing1.png
2382
+ *
2383
+ * If crossing is omitted (the default) the crossing will be set automatically
2384
+ * by Excel based on the chart data.
2385
+ *
2386
+ * **Axis types**: This function is applicable to to all axes types.
2387
+ * See @ref ww_charts_axes.
2388
+ */
2389
+ void chart_axis_set_crossing(lxw_chart_axis *axis, double value);
2390
+
2391
+ /**
2392
+ * @brief Set the opposite axis crossing position as the axis maximum.
2393
+ *
2394
+ * @param axis A pointer to a chart #lxw_chart_axis object.
2395
+ *
2396
+ * Set the position that the opposite axis will cross as the axis maximum.
2397
+ * The default axis crossing position is generally the axis minimum so this
2398
+ * function can be used to reverse the location of the axes without reversing
2399
+ * the number sequence:
2400
+ *
2401
+ * @code
2402
+ * chart_axis_set_crossing_max(chart->x_axis);
2403
+ * chart_axis_set_crossing_max(chart->y_axis);
2404
+ * @endcode
2405
+ *
2406
+ * @image html chart_crossing2.png
2407
+ *
2408
+ * **Axis types**: This function is applicable to to all axes types.
2409
+ * See @ref ww_charts_axes.
2410
+ */
2411
+ void chart_axis_set_crossing_max(lxw_chart_axis *axis);
2412
+
2413
+ /**
2414
+ * @brief Turn off/hide an axis.
2415
+ *
2416
+ * @param axis A pointer to a chart #lxw_chart_axis object.
2417
+ *
2418
+ * Turn off, hide, a chart axis:
2419
+ *
2420
+ * @code
2421
+ * chart_axis_off(chart->x_axis);
2422
+ * @endcode
2423
+ *
2424
+ * @image html chart_axis_off.png
2425
+ *
2426
+ * **Axis types**: This function is applicable to to all axes types.
2427
+ * See @ref ww_charts_axes.
2428
+ */
2429
+ void chart_axis_off(lxw_chart_axis *axis);
2430
+
2431
+ /**
2432
+ * @brief Position a category axis on or between the axis tick marks.
2433
+ *
2434
+ * @param axis A pointer to a chart #lxw_chart_axis object.
2435
+ * @param position A #lxw_chart_axis_tick_position value.
2436
+ *
2437
+ * Position a category axis horizontally on, or between, the axis tick marks.
2438
+ *
2439
+ * There are two allowable values:
2440
+ *
2441
+ * - #LXW_CHART_AXIS_POSITION_ON_TICK
2442
+ * - #LXW_CHART_AXIS_POSITION_BETWEEN
2443
+ *
2444
+ * @code
2445
+ * chart_axis_set_position(chart->x_axis, LXW_CHART_AXIS_POSITION_BETWEEN);
2446
+ * @endcode
2447
+ *
2448
+ * @image html chart_axis_set_position.png
2449
+ *
2450
+ * **Axis types**: This function is applicable to category axes only.
2451
+ * See @ref ww_charts_axes.
2452
+ */
2453
+ void chart_axis_set_position(lxw_chart_axis *axis, uint8_t position);
2454
+
2455
+ /**
2456
+ * @brief Position the axis labels.
2457
+ *
2458
+ * @param axis A pointer to a chart #lxw_chart_axis object.
2459
+ * @param position A #lxw_chart_axis_label_position value.
2460
+ *
2461
+ * Position the axis labels for the chart. The labels are the numbers, or
2462
+ * strings or dates, on the axis that indicate the categories or values of
2463
+ * the axis.
2464
+ *
2465
+ * For example:
2466
+ *
2467
+ * @code
2468
+ * chart_axis_set_label_position(chart->x_axis, LXW_CHART_AXIS_LABEL_POSITION_HIGH);
2469
+ chart_axis_set_label_position(chart->y_axis, LXW_CHART_AXIS_LABEL_POSITION_HIGH);
2470
+ * @endcode
2471
+ *
2472
+ * @image html chart_label_position2.png
2473
+ *
2474
+ * The allowable values:
2475
+ *
2476
+ * - #LXW_CHART_AXIS_LABEL_POSITION_NEXT_TO - The default.
2477
+ * - #LXW_CHART_AXIS_LABEL_POSITION_HIGH - Also right for vertical axes.
2478
+ * - #LXW_CHART_AXIS_LABEL_POSITION_LOW - Also left for vertical axes.
2479
+ * - #LXW_CHART_AXIS_LABEL_POSITION_NONE
2480
+ *
2481
+ * @image html chart_label_position1.png
2482
+ *
2483
+ * The #LXW_CHART_AXIS_LABEL_POSITION_NONE turns off the axis labels. This
2484
+ * is slightly different from `chart_axis_off()` which also turns off the
2485
+ * labels but also turns off tick marks.
2486
+ *
2487
+ * **Axis types**: This function is applicable to to all axes types.
2488
+ * See @ref ww_charts_axes.
2489
+ */
2490
+ void chart_axis_set_label_position(lxw_chart_axis *axis, uint8_t position);
2491
+
2492
+ /**
2493
+ * @brief Set the minimum value for a chart axis.
2494
+ *
2495
+ * @param axis A pointer to a chart #lxw_chart_axis object.
2496
+ * @param min Minimum value for chart axis. Value axes only.
2497
+ *
2498
+ * Set the minimum value for the axis range.
2499
+ *
2500
+ * @code
2501
+ * chart_axis_set_min(chart->y_axis, -4);
2502
+ * chart_axis_set_max(chart->y_axis, 21);
2503
+ * @endcode
2504
+ *
2505
+ * @image html chart_max_min.png
2506
+ *
2507
+ * **Axis types**: This function is applicable to value and date axes only.
2508
+ * See @ref ww_charts_axes.
2509
+ */
2510
+ void chart_axis_set_min(lxw_chart_axis *axis, double min);
2511
+
2512
+ /**
2513
+ * @brief Set the maximum value for a chart axis.
2514
+ *
2515
+ * @param axis A pointer to a chart #lxw_chart_axis object.
2516
+ * @param max Maximum value for chart axis. Value axes only.
2517
+ *
2518
+ * Set the maximum value for the axis range.
2519
+ *
2520
+ * @code
2521
+ * chart_axis_set_min(chart->y_axis, -4);
2522
+ * chart_axis_set_max(chart->y_axis, 21);
2523
+ * @endcode
2524
+ *
2525
+ * See the above image.
2526
+ *
2527
+ * **Axis types**: This function is applicable to value and date axes only.
2528
+ * See @ref ww_charts_axes.
2529
+ */
2530
+ void chart_axis_set_max(lxw_chart_axis *axis, double max);
2531
+
2532
+ /**
2533
+ * @brief Set the log base of the axis range.
2534
+ *
2535
+ * @param axis A pointer to a chart #lxw_chart_axis object.
2536
+ * @param log_base The log base for value axis. Value axes only.
2537
+ *
2538
+ * Set the log base for the axis:
2539
+ *
2540
+ * @code
2541
+ * chart_axis_set_log_base(chart->y_axis, 10);
2542
+ * @endcode
2543
+ *
2544
+ * @image html chart_log_base.png
2545
+ *
2546
+ * The allowable range of values for the log base in Excel is between 2 and
2547
+ * 1000.
2548
+ *
2549
+ * **Axis types**: This function is applicable to value axes only.
2550
+ * See @ref ww_charts_axes.
2551
+ */
2552
+ void chart_axis_set_log_base(lxw_chart_axis *axis, uint16_t log_base);
2553
+
2554
+ /**
2555
+ * @brief Set the major axis tick mark type.
2556
+ *
2557
+ * @param axis A pointer to a chart #lxw_chart_axis object.
2558
+ * @param type The tick mark type, defined by #lxw_chart_tick_mark.
2559
+ *
2560
+ * Set the type of the major axis tick mark:
2561
+ *
2562
+ * @code
2563
+ * chart_axis_set_major_tick_mark(chart->x_axis, LXW_CHART_AXIS_TICK_MARK_CROSSING);
2564
+ * chart_axis_set_minor_tick_mark(chart->x_axis, LXW_CHART_AXIS_TICK_MARK_INSIDE);
2565
+ *
2566
+ * chart_axis_set_major_tick_mark(chart->x_axis, LXW_CHART_AXIS_TICK_MARK_OUTSIDE);
2567
+ * chart_axis_set_minor_tick_mark(chart->y_axis, LXW_CHART_AXIS_TICK_MARK_INSIDE);
2568
+ *
2569
+ * // Hide the default gridlines so the tick marks are visible.
2570
+ * chart_axis_major_gridlines_set_visible(chart->y_axis, LXW_FALSE);
2571
+ * @endcode
2572
+ *
2573
+ * @image html chart_tick_marks.png
2574
+ *
2575
+ * The tick mark types are:
2576
+ *
2577
+ * - #LXW_CHART_AXIS_TICK_MARK_NONE
2578
+ * - #LXW_CHART_AXIS_TICK_MARK_INSIDE
2579
+ * - #LXW_CHART_AXIS_TICK_MARK_OUTSIDE
2580
+ * - #LXW_CHART_AXIS_TICK_MARK_CROSSING
2581
+ *
2582
+ * **Axis types**: This function is applicable to to all axes types.
2583
+ * See @ref ww_charts_axes.
2584
+ */
2585
+ void chart_axis_set_major_tick_mark(lxw_chart_axis *axis, uint8_t type);
2586
+
2587
+ /**
2588
+ * @brief Set the minor axis tick mark type.
2589
+ *
2590
+ * @param axis A pointer to a chart #lxw_chart_axis object.
2591
+ * @param type The tick mark type, defined by #lxw_chart_tick_mark.
2592
+ *
2593
+ * Set the type of the minor axis tick mark:
2594
+ *
2595
+ * @code
2596
+ * chart_axis_set_minor_tick_mark(chart->x_axis, LXW_CHART_AXIS_TICK_MARK_INSIDE);
2597
+ * @endcode
2598
+ *
2599
+ * See the image and example above.
2600
+ *
2601
+ * **Axis types**: This function is applicable to to all axes types.
2602
+ * See @ref ww_charts_axes.
2603
+ */
2604
+ void chart_axis_set_minor_tick_mark(lxw_chart_axis *axis, uint8_t type);
2605
+
2606
+ /**
2607
+ * @brief Set the interval between category values.
2608
+ *
2609
+ * @param axis A pointer to a chart #lxw_chart_axis object.
2610
+ * @param unit The interval between the categories.
2611
+ *
2612
+ * Set the interval between the category values. The default interval is 1
2613
+ * which gives the intervals shown in the charts above:
2614
+ *
2615
+ * 1, 2, 3, 4, 5, etc.
2616
+ *
2617
+ * Setting it to 2 gives:
2618
+ *
2619
+ * 1, 3, 5, 7, etc.
2620
+ *
2621
+ * For example:
2622
+ *
2623
+ * @code
2624
+ * chart_axis_set_interval_unit(chart->x_axis, 2);
2625
+ * @endcode
2626
+ *
2627
+ * @image html chart_set_interval1.png
2628
+ *
2629
+ * **Axis types**: This function is applicable to category and date axes only.
2630
+ * See @ref ww_charts_axes.
2631
+ */
2632
+ void chart_axis_set_interval_unit(lxw_chart_axis *axis, uint16_t unit);
2633
+
2634
+ /**
2635
+ * @brief Set the interval between category tick marks.
2636
+ *
2637
+ * @param axis A pointer to a chart #lxw_chart_axis object.
2638
+ * @param unit The interval between the category ticks.
2639
+ *
2640
+ * Set the interval between the category tick marks. The default interval is 1
2641
+ * between each category but it can be set to other integer values:
2642
+ *
2643
+ * @code
2644
+ * chart_axis_set_interval_tick(chart->x_axis, 2);
2645
+ * @endcode
2646
+ *
2647
+ * @image html chart_set_interval2.png
2648
+ *
2649
+ * **Axis types**: This function is applicable to category and date axes only.
2650
+ * See @ref ww_charts_axes.
2651
+ */
2652
+ void chart_axis_set_interval_tick(lxw_chart_axis *axis, uint16_t unit);
2653
+
2654
+ /**
2655
+ * @brief Set the increment of the major units in the axis.
2656
+ *
2657
+ * @param axis A pointer to a chart #lxw_chart_axis object.
2658
+ * @param unit The increment of the major units.
2659
+ *
2660
+ * Set the increment of the major units in the axis range.
2661
+ *
2662
+ * @code
2663
+ * // Turn on the minor gridline (it is off by default).
2664
+ * chart_axis_minor_gridlines_set_visible(chart->y_axis, LXW_TRUE);
2665
+ *
2666
+ * chart_axis_set_major_unit(chart->y_axis, 4);
2667
+ * chart_axis_set_minor_unit(chart->y_axis, 2);
2668
+ * @endcode
2669
+ *
2670
+ * @image html chart_set_major_units.png
2671
+ *
2672
+ * **Axis types**: This function is applicable to value and date axes only.
2673
+ * See @ref ww_charts_axes.
2674
+ */
2675
+ void chart_axis_set_major_unit(lxw_chart_axis *axis, double unit);
2676
+
2677
+ /**
2678
+ * @brief Set the increment of the minor units in the axis.
2679
+ *
2680
+ * @param axis A pointer to a chart #lxw_chart_axis object.
2681
+ * @param unit The increment of the minor units.
2682
+ *
2683
+ * Set the increment of the minor units in the axis range.
2684
+ *
2685
+ * @code
2686
+ * chart_axis_set_minor_unit(chart->y_axis, 2);
2687
+ * @endcode
2688
+ *
2689
+ * See the image above
2690
+ *
2691
+ * **Axis types**: This function is applicable to value and date axes only.
2692
+ * See @ref ww_charts_axes.
2693
+ */
2694
+ void chart_axis_set_minor_unit(lxw_chart_axis *axis, double unit);
2695
+
2696
+ /**
2697
+ * @brief Set the display units for a value axis.
2698
+ *
2699
+ * @param axis A pointer to a chart #lxw_chart_axis object.
2700
+ * @param units The display units: #lxw_chart_axis_display_unit.
2701
+ *
2702
+ * Set the display units for the axis. This can be useful if the axis numbers
2703
+ * are very large but you don't want to represent them in scientific notation:
2704
+ *
2705
+ * @code
2706
+ * chart_axis_set_display_units(chart->x_axis, LXW_CHART_AXIS_UNITS_THOUSANDS);
2707
+ * chart_axis_set_display_units(chart->y_axis, LXW_CHART_AXIS_UNITS_MILLIONS);
2708
+ * @endcode
2709
+ *
2710
+ * @image html chart_display_units.png
2711
+ *
2712
+ * **Axis types**: This function is applicable to value axes only.
2713
+ * See @ref ww_charts_axes.
2714
+ */
2715
+ void chart_axis_set_display_units(lxw_chart_axis *axis, uint8_t units);
2716
+
2717
+ /**
2718
+ * @brief Turn on/off the display units for a value axis.
2719
+
2720
+ * @param axis A pointer to a chart #lxw_chart_axis object.
2721
+ * @param visible Turn off/on the display units. (0/1)
2722
+ *
2723
+ * Turn on or off the display units for the axis. This option is set on
2724
+ * automatically by `chart_axis_set_display_units()`.
2725
+ *
2726
+ * @code
2727
+ * chart_axis_set_display_units_visible(chart->y_axis, LXW_TRUE);
2728
+ * @endcode
2729
+ *
2730
+ * **Axis types**: This function is applicable to value axes only.
2731
+ * See @ref ww_charts_axes.
2732
+ */
2733
+ void chart_axis_set_display_units_visible(lxw_chart_axis *axis,
2734
+ uint8_t visible);
2735
+
2736
+ /**
2737
+ * @brief Turn on/off the major gridlines for an axis.
2738
+ *
2739
+ * @param axis A pointer to a chart #lxw_chart_axis object.
2740
+ * @param visible Turn off/on the major gridline. (0/1)
2741
+ *
2742
+ * Turn on or off the major gridlines for an X or Y axis. In most Excel charts
2743
+ * the Y axis major gridlines are on by default and the X axis major
2744
+ * gridlines are off by default.
2745
+ *
2746
+ * Example:
2747
+ *
2748
+ * @code
2749
+ * // Reverse the normal visible/hidden gridlines for a column chart.
2750
+ * chart_axis_major_gridlines_set_visible(chart->x_axis, LXW_TRUE);
2751
+ * chart_axis_major_gridlines_set_visible(chart->y_axis, LXW_FALSE);
2752
+ * @endcode
2753
+ *
2754
+ * @image html chart_gridline1.png
2755
+ *
2756
+ * **Axis types**: This function is applicable to to all axes types.
2757
+ * See @ref ww_charts_axes.
2758
+ */
2759
+ void chart_axis_major_gridlines_set_visible(lxw_chart_axis *axis,
2760
+ uint8_t visible);
2761
+
2762
+ /**
2763
+ * @brief Turn on/off the minor gridlines for an axis.
2764
+ *
2765
+ * @param axis A pointer to a chart #lxw_chart_axis object.
2766
+ * @param visible Turn off/on the minor gridline. (0/1)
2767
+ *
2768
+ * Turn on or off the minor gridlines for an X or Y axis. In most Excel charts
2769
+ * the X and Y axis minor gridlines are off by default.
2770
+ *
2771
+ * Example, turn on all major and minor gridlines:
2772
+ *
2773
+ * @code
2774
+ * chart_axis_major_gridlines_set_visible(chart->x_axis, LXW_TRUE);
2775
+ * chart_axis_minor_gridlines_set_visible(chart->x_axis, LXW_TRUE);
2776
+ * chart_axis_major_gridlines_set_visible(chart->y_axis, LXW_TRUE);
2777
+ * chart_axis_minor_gridlines_set_visible(chart->y_axis, LXW_TRUE);
2778
+ * @endcode
2779
+ *
2780
+ * @image html chart_gridline2.png
2781
+ *
2782
+ * **Axis types**: This function is applicable to to all axes types.
2783
+ * See @ref ww_charts_axes.
2784
+ */
2785
+ void chart_axis_minor_gridlines_set_visible(lxw_chart_axis *axis,
2786
+ uint8_t visible);
2787
+
2788
+ /**
2789
+ * @brief Set the line properties for the chart axis major gridlines.
2790
+ *
2791
+ * @param axis A pointer to a chart #lxw_chart_axis object.
2792
+ * @param line A #lxw_chart_line struct.
2793
+ *
2794
+ * Format the line properties of the major gridlines of a chart:
2795
+ *
2796
+ * @code
2797
+ * lxw_chart_line line1 = {.color = LXW_COLOR_RED,
2798
+ * .width = 0.5,
2799
+ * .dash_type = LXW_CHART_LINE_DASH_SQUARE_DOT};
2800
+ *
2801
+ * lxw_chart_line line2 = {.color = LXW_COLOR_YELLOW};
2802
+ *
2803
+ * lxw_chart_line line3 = {.width = 1.25,
2804
+ * .dash_type = LXW_CHART_LINE_DASH_DASH};
2805
+ *
2806
+ * lxw_chart_line line4 = {.color = 0x00B050};
2807
+ *
2808
+ * chart_axis_major_gridlines_set_line(chart->x_axis, &line1);
2809
+ * chart_axis_minor_gridlines_set_line(chart->x_axis, &line2);
2810
+ * chart_axis_major_gridlines_set_line(chart->y_axis, &line3);
2811
+ * chart_axis_minor_gridlines_set_line(chart->y_axis, &line4);
2812
+ * @endcode
2813
+ *
2814
+ * @image html chart_gridline3.png
2815
+ *
2816
+ * For more information see @ref chart_lines.
2817
+ *
2818
+ * **Axis types**: This function is applicable to to all axes types.
2819
+ * See @ref ww_charts_axes.
2820
+ */
2821
+ void chart_axis_major_gridlines_set_line(lxw_chart_axis *axis,
2822
+ lxw_chart_line *line);
2823
+
2824
+ /**
2825
+ * @brief Set the line properties for the chart axis minor gridlines.
2826
+ *
2827
+ * @param axis A pointer to a chart #lxw_chart_axis object.
2828
+ * @param line A #lxw_chart_line struct.
2829
+ *
2830
+ * Format the line properties of the minor gridlines of a chart, see the
2831
+ * example above.
2832
+ *
2833
+ * For more information see @ref chart_lines.
2834
+ *
2835
+ * **Axis types**: This function is applicable to to all axes types.
2836
+ * See @ref ww_charts_axes.
2837
+ */
2838
+ void chart_axis_minor_gridlines_set_line(lxw_chart_axis *axis,
2839
+ lxw_chart_line *line);
2840
+
2841
+ /**
2842
+ * @brief Set the title of the chart.
2843
+ *
2844
+ * @param chart Pointer to a lxw_chart instance to be configured.
2845
+ * @param name The chart title name.
2846
+ *
2847
+ * The `%chart_title_set_name()` function sets the name (title) for the
2848
+ * chart. The name is displayed above the chart.
2849
+ *
2850
+ * @code
2851
+ * chart_title_set_name(chart, "Year End Results");
2852
+ * @endcode
2853
+ *
2854
+ * @image html chart_title_set_name.png
2855
+ *
2856
+ * The name parameter can also be a formula such as `=Sheet1!$A$1` to point to
2857
+ * a cell in the workbook that contains the name:
2858
+ *
2859
+ * @code
2860
+ * chart_title_set_name(chart, "=Sheet1!$B1$1");
2861
+ * @endcode
2862
+ *
2863
+ * See also the `chart_title_set_name_range()` function to see how to set the
2864
+ * name formula programmatically.
2865
+ *
2866
+ * The Excel default is to have no chart title.
2867
+ */
2868
+ void chart_title_set_name(lxw_chart *chart, const char *name);
2869
+
2870
+ /**
2871
+ * @brief Set a chart title formula using row and column values.
2872
+ *
2873
+ * @param chart Pointer to a lxw_chart instance to be configured.
2874
+ * @param sheetname The name of the worksheet that contains the cell range.
2875
+ * @param row The zero indexed row number of the range.
2876
+ * @param col The zero indexed column number of the range.
2877
+ *
2878
+ * The `%chart_title_set_name_range()` function can be used to set a chart
2879
+ * title range and is an alternative to using `chart_title_set_name()` and a
2880
+ * string formula:
2881
+ *
2882
+ * @code
2883
+ * chart_title_set_name_range(chart, "Sheet1", 1, 0);
2884
+ * @endcode
2885
+ */
2886
+ void chart_title_set_name_range(lxw_chart *chart, const char *sheetname,
2887
+ lxw_row_t row, lxw_col_t col);
2888
+
2889
+ /**
2890
+ * @brief Set the font properties for a chart title.
2891
+ *
2892
+ * @param chart Pointer to a lxw_chart instance to be configured.
2893
+ * @param font A pointer to a chart #lxw_chart_font font struct.
2894
+ *
2895
+ * The `%chart_title_set_name_font()` function is used to set the font of a
2896
+ * chart title:
2897
+ *
2898
+ * @code
2899
+ * lxw_chart_font font = {.bold = LXW_TRUE, .color = LXW_COLOR_BLUE};
2900
+ *
2901
+ * chart_title_set_name(chart, "Year End Results");
2902
+ * chart_title_set_name_font(chart, &font);
2903
+ * @endcode
2904
+ *
2905
+ * @image html chart_title_set_name_font.png
2906
+ *
2907
+ * For more information see @ref chart_fonts.
2908
+ */
2909
+ void chart_title_set_name_font(lxw_chart *chart, lxw_chart_font *font);
2910
+
2911
+ /**
2912
+ * @brief Turn off an automatic chart title.
2913
+ *
2914
+ * @param chart Pointer to a lxw_chart instance to be configured.
2915
+ *
2916
+ * In general in Excel a chart title isn't displayed unless the user
2917
+ * explicitly adds one. However, Excel adds an automatic chart title to charts
2918
+ * with a single series and a user defined series name. The
2919
+ * `chart_title_off()` function allows you to turn off this automatic chart
2920
+ * title:
2921
+ *
2922
+ * @code
2923
+ * chart_title_off(chart);
2924
+ * @endcode
2925
+ */
2926
+ void chart_title_off(lxw_chart *chart);
2927
+
2928
+ /**
2929
+ * @brief Set the position of the chart legend.
2930
+ *
2931
+ * @param chart Pointer to a lxw_chart instance to be configured.
2932
+ * @param position The #lxw_chart_legend_position value for the legend.
2933
+ *
2934
+ * The `%chart_legend_set_position()` function is used to set the chart
2935
+ * legend to one of the #lxw_chart_legend_position values:
2936
+ *
2937
+ * LXW_CHART_LEGEND_NONE
2938
+ * LXW_CHART_LEGEND_RIGHT
2939
+ * LXW_CHART_LEGEND_LEFT
2940
+ * LXW_CHART_LEGEND_TOP
2941
+ * LXW_CHART_LEGEND_BOTTOM
2942
+ * LXW_CHART_LEGEND_OVERLAY_RIGHT
2943
+ * LXW_CHART_LEGEND_OVERLAY_LEFT
2944
+ *
2945
+ * For example:
2946
+ *
2947
+ * @code
2948
+ * chart_legend_set_position(chart, LXW_CHART_LEGEND_BOTTOM);
2949
+ * @endcode
2950
+ *
2951
+ * @image html chart_legend_bottom.png
2952
+ *
2953
+ * This function can also be used to turn off a chart legend:
2954
+ *
2955
+ * @code
2956
+ * chart_legend_set_position(chart, LXW_CHART_LEGEND_NONE);
2957
+ * @endcode
2958
+ *
2959
+ * @image html chart_legend_none.png
2960
+ *
2961
+ */
2962
+ void chart_legend_set_position(lxw_chart *chart, uint8_t position);
2963
+
2964
+ /**
2965
+ * @brief Set the font properties for a chart legend.
2966
+ *
2967
+ * @param chart Pointer to a lxw_chart instance to be configured.
2968
+ * @param font A pointer to a chart #lxw_chart_font font struct.
2969
+ *
2970
+ * The `%chart_legend_set_font()` function is used to set the font of a
2971
+ * chart legend:
2972
+ *
2973
+ * @code
2974
+ * lxw_chart_font font = {.bold = LXW_TRUE, .color = LXW_COLOR_BLUE};
2975
+ *
2976
+ * chart_legend_set_font(chart, &font);
2977
+ * @endcode
2978
+ *
2979
+ * @image html chart_legend_set_font.png
2980
+ *
2981
+ * For more information see @ref chart_fonts.
2982
+ */
2983
+ void chart_legend_set_font(lxw_chart *chart, lxw_chart_font *font);
2984
+
2985
+ /**
2986
+ * @brief Remove one or more series from the the legend.
2987
+ *
2988
+ * @param chart Pointer to a lxw_chart instance to be configured.
2989
+ * @param delete_series An array of zero-indexed values to delete from series.
2990
+ *
2991
+ * @return A #lxw_error.
2992
+ *
2993
+ * The `%chart_legend_delete_series()` function allows you to remove/hide one
2994
+ * or more series in a chart legend (the series will still display on the chart).
2995
+ *
2996
+ * This function takes an array of one or more zero indexed series
2997
+ * numbers. The array should be terminated with -1.
2998
+ *
2999
+ * For example to remove the first and third zero-indexed series from the
3000
+ * legend of a chart with 3 series:
3001
+ *
3002
+ * @code
3003
+ * int16_t series[] = {0, 2, -1};
3004
+ *
3005
+ * chart_legend_delete_series(chart, series);
3006
+ * @endcode
3007
+ *
3008
+ * @image html chart_legend_delete.png
3009
+ */
3010
+ lxw_error chart_legend_delete_series(lxw_chart *chart,
3011
+ int16_t delete_series[]);
3012
+
3013
+ /**
3014
+ * @brief Set the line properties for a chartarea.
3015
+ *
3016
+ * @param chart Pointer to a lxw_chart instance to be configured.
3017
+ * @param line A #lxw_chart_line struct.
3018
+ *
3019
+ * Set the line/border properties of a chartarea. In Excel the chartarea
3020
+ * is the background area behind the chart:
3021
+ *
3022
+ * @code
3023
+ * lxw_chart_line line = {.none = LXW_TRUE};
3024
+ * lxw_chart_fill fill = {.color = LXW_COLOR_RED};
3025
+ *
3026
+ * chart_chartarea_set_line(chart, &line);
3027
+ * chart_chartarea_set_fill(chart, &fill);
3028
+ * @endcode
3029
+ *
3030
+ * @image html chart_chartarea.png
3031
+ *
3032
+ * For more information see @ref chart_lines.
3033
+ */
3034
+ void chart_chartarea_set_line(lxw_chart *chart, lxw_chart_line *line);
3035
+
3036
+ /**
3037
+ * @brief Set the fill properties for a chartarea.
3038
+ *
3039
+ * @param chart Pointer to a lxw_chart instance to be configured.
3040
+ * @param fill A #lxw_chart_fill struct.
3041
+ *
3042
+ * Set the fill properties of a chartarea:
3043
+ *
3044
+ * @code
3045
+ * chart_chartarea_set_fill(chart, &fill);
3046
+ * @endcode
3047
+ *
3048
+ * See the example and image above.
3049
+ *
3050
+ * For more information see @ref chart_fills.
3051
+ */
3052
+ void chart_chartarea_set_fill(lxw_chart *chart, lxw_chart_fill *fill);
3053
+
3054
+ /**
3055
+ * @brief Set the pattern properties for a chartarea.
3056
+ *
3057
+ * @param chart Pointer to a lxw_chart instance to be configured.
3058
+ * @param pattern A #lxw_chart_pattern struct.
3059
+ *
3060
+ * Set the pattern properties of a chartarea:
3061
+ *
3062
+ * @code
3063
+ * chart_chartarea_set_pattern(series1, &pattern);
3064
+ * @endcode
3065
+ *
3066
+ * For more information see #lxw_chart_pattern_type and @ref chart_patterns.
3067
+ */
3068
+ void chart_chartarea_set_pattern(lxw_chart *chart,
3069
+ lxw_chart_pattern *pattern);
3070
+
3071
+ /**
3072
+ * @brief Set the line properties for a plotarea.
3073
+ *
3074
+ * @param chart Pointer to a lxw_chart instance to be configured.
3075
+ * @param line A #lxw_chart_line struct.
3076
+ *
3077
+ * Set the line/border properties of a plotarea. In Excel the plotarea is
3078
+ * the area between the axes on which the chart series are plotted:
3079
+ *
3080
+ * @code
3081
+ * lxw_chart_line line = {.color = LXW_COLOR_RED,
3082
+ * .width = 2,
3083
+ * .dash_type = LXW_CHART_LINE_DASH_DASH};
3084
+ * lxw_chart_fill fill = {.color = 0xFFFFC2};
3085
+ *
3086
+ * chart_plotarea_set_line(chart, &line);
3087
+ * chart_plotarea_set_fill(chart, &fill);
3088
+ *
3089
+ * @endcode
3090
+ *
3091
+ * @image html chart_plotarea.png
3092
+ *
3093
+ * For more information see @ref chart_lines.
3094
+ */
3095
+ void chart_plotarea_set_line(lxw_chart *chart, lxw_chart_line *line);
3096
+
3097
+ /**
3098
+ * @brief Set the fill properties for a plotarea.
3099
+ *
3100
+ * @param chart Pointer to a lxw_chart instance to be configured.
3101
+ * @param fill A #lxw_chart_fill struct.
3102
+ *
3103
+ * Set the fill properties of a plotarea:
3104
+ *
3105
+ * @code
3106
+ * chart_plotarea_set_fill(chart, &fill);
3107
+ * @endcode
3108
+ *
3109
+ * See the example and image above.
3110
+ *
3111
+ * For more information see @ref chart_fills.
3112
+ */
3113
+ void chart_plotarea_set_fill(lxw_chart *chart, lxw_chart_fill *fill);
3114
+
3115
+ /**
3116
+ * @brief Set the pattern properties for a plotarea.
3117
+ *
3118
+ * @param chart Pointer to a lxw_chart instance to be configured.
3119
+ * @param pattern A #lxw_chart_pattern struct.
3120
+ *
3121
+ * Set the pattern properties of a plotarea:
3122
+ *
3123
+ * @code
3124
+ * chart_plotarea_set_pattern(series1, &pattern);
3125
+ * @endcode
3126
+ *
3127
+ * For more information see #lxw_chart_pattern_type and @ref chart_patterns.
3128
+ */
3129
+ void chart_plotarea_set_pattern(lxw_chart *chart, lxw_chart_pattern *pattern);
3130
+
3131
+ /**
3132
+ * @brief Set the chart style type.
3133
+ *
3134
+ * @param chart Pointer to a lxw_chart instance to be configured.
3135
+ * @param style_id An index representing the chart style, 1 - 48.
3136
+ *
3137
+ * The `%chart_set_style()` function is used to set the style of the chart to
3138
+ * one of the 48 built-in styles available on the "Design" tab in Excel 2007:
3139
+ *
3140
+ * @code
3141
+ * chart_set_style(chart, 37)
3142
+ * @endcode
3143
+ *
3144
+ * @image html chart_style.png
3145
+ *
3146
+ * The style index number is counted from 1 on the top left in the Excel
3147
+ * dialog. The default style is 2.
3148
+ *
3149
+ * **Note:**
3150
+ *
3151
+ * In Excel 2013 the Styles section of the "Design" tab in Excel shows what
3152
+ * were referred to as "Layouts" in previous versions of Excel. These layouts
3153
+ * are not defined in the file format. They are a collection of modifications
3154
+ * to the base chart type. They can not be defined by the `chart_set_style()``
3155
+ * function.
3156
+ *
3157
+ */
3158
+ void chart_set_style(lxw_chart *chart, uint8_t style_id);
3159
+
3160
+ /**
3161
+ * @brief Turn on a data table below the horizontal axis.
3162
+ *
3163
+ * @param chart Pointer to a lxw_chart instance to be configured.
3164
+ *
3165
+ * The `%chart_set_table()` function adds a data table below the horizontal
3166
+ * axis with the data used to plot the chart:
3167
+ *
3168
+ * @code
3169
+ * // Turn on the data table with default options.
3170
+ * chart_set_table(chart);
3171
+ * @endcode
3172
+ *
3173
+ * @image html chart_data_table1.png
3174
+ *
3175
+ * The data table can only be shown with Bar, Column, Line and Area charts.
3176
+ *
3177
+ */
3178
+ void chart_set_table(lxw_chart *chart);
3179
+
3180
+ /**
3181
+ * @brief Turn on/off grid options for a chart data table.
3182
+ *
3183
+ * @param chart Pointer to a lxw_chart instance to be configured.
3184
+ * @param horizontal Turn on/off the horizontal grid lines in the table.
3185
+ * @param vertical Turn on/off the vertical grid lines in the table.
3186
+ * @param outline Turn on/off the outline lines in the table.
3187
+ * @param legend_keys Turn on/off the legend keys in the table.
3188
+ *
3189
+ * The `%chart_set_table_grid()` function turns on/off grid options for a
3190
+ * chart data table. The data table grid options in Excel are shown in the
3191
+ * dialog below:
3192
+ *
3193
+ * @image html chart_data_table3.png
3194
+ *
3195
+ * These options can be passed to the `%chart_set_table_grid()` function.
3196
+ * The values for a default chart are:
3197
+ *
3198
+ * - `horizontal`: On.
3199
+ * - `vertical`: On.
3200
+ * - `outline`: On.
3201
+ * - `legend_keys`: Off.
3202
+ *
3203
+ * Example:
3204
+ *
3205
+ * @code
3206
+ * // Turn on the data table with default options.
3207
+ * chart_set_table(chart);
3208
+ *
3209
+ * // Turn on all grid lines and the grid legend.
3210
+ * chart_set_table_grid(chart, LXW_TRUE, LXW_TRUE, LXW_TRUE, LXW_TRUE);
3211
+ *
3212
+ * // Turn off the legend since it is show in the table.
3213
+ * chart_legend_set_position(chart, LXW_CHART_LEGEND_NONE);
3214
+ *
3215
+ * @endcode
3216
+ *
3217
+ * @image html chart_data_table2.png
3218
+ *
3219
+ * The data table can only be shown with Bar, Column, Line and Area charts.
3220
+ *
3221
+ */
3222
+ void chart_set_table_grid(lxw_chart *chart, uint8_t horizontal,
3223
+ uint8_t vertical, uint8_t outline,
3224
+ uint8_t legend_keys);
3225
+
3226
+ void chart_set_table_font(lxw_chart *chart, lxw_chart_font *font);
3227
+
3228
+ /**
3229
+ * @brief Turn on up-down bars for the chart.
3230
+ *
3231
+ * @param chart Pointer to a lxw_chart instance to be configured.
3232
+ *
3233
+ * The `%chart_set_up_down_bars()` function adds Up-Down bars to Line charts
3234
+ * to indicate the difference between the first and last data series:
3235
+ *
3236
+ * @code
3237
+ * chart_set_up_down_bars(chart);
3238
+ * @endcode
3239
+ *
3240
+ * @image html chart_data_tools4.png
3241
+ *
3242
+ * Up-Down bars are only available in Line charts. By default Up-Down bars are
3243
+ * black and white like in the above example. To format the border or fill
3244
+ * of the bars see the `chart_set_up_down_bars_format()` function below.
3245
+ */
3246
+ void chart_set_up_down_bars(lxw_chart *chart);
3247
+
3248
+ /**
3249
+ * @brief Turn on up-down bars for the chart, with formatting.
3250
+ *
3251
+ * @param chart Pointer to a lxw_chart instance to be configured.
3252
+ * @param up_bar_line A #lxw_chart_line struct for the up-bar border.
3253
+ * @param up_bar_fill A #lxw_chart_fill struct for the up-bar fill.
3254
+ * @param down_bar_line A #lxw_chart_line struct for the down-bar border.
3255
+ * @param down_bar_fill A #lxw_chart_fill struct for the down-bar fill.
3256
+ *
3257
+ * The `%chart_set_up_down_bars_format()` function adds Up-Down bars to Line
3258
+ * charts to indicate the difference between the first and last data series.
3259
+ * It also allows the up and down bars to be formatted:
3260
+ *
3261
+ * @code
3262
+ * lxw_chart_line line = {.color = LXW_COLOR_BLACK};
3263
+ * lxw_chart_fill up_fill = {.color = 0x00B050};
3264
+ * lxw_chart_fill down_fill = {.color = LXW_COLOR_RED};
3265
+ *
3266
+ * chart_set_up_down_bars_format(chart, &line, &up_fill, &line, &down_fill);
3267
+ * @endcode
3268
+ *
3269
+ * @image html chart_up_down_bars.png
3270
+ *
3271
+ * Up-Down bars are only available in Line charts.
3272
+ * For more format information see @ref chart_lines and @ref chart_fills.
3273
+ */
3274
+ void chart_set_up_down_bars_format(lxw_chart *chart,
3275
+ lxw_chart_line *up_bar_line,
3276
+ lxw_chart_fill *up_bar_fill,
3277
+ lxw_chart_line *down_bar_line,
3278
+ lxw_chart_fill *down_bar_fill);
3279
+
3280
+ /**
3281
+ * @brief Turn on and format Drop Lines for a chart.
3282
+ *
3283
+ * @param chart Pointer to a lxw_chart instance to be configured.
3284
+ * @param line A #lxw_chart_line struct.
3285
+ *
3286
+ * The `%chart_set_drop_lines()` function adds Drop Lines to charts to
3287
+ * show the Category value of points in the data:
3288
+ *
3289
+ * @code
3290
+ * chart_set_drop_lines(chart, NULL);
3291
+ * @endcode
3292
+ *
3293
+ * @image html chart_data_tools6.png
3294
+ *
3295
+ * It is possible to format the Drop Line line properties if required:
3296
+ *
3297
+ * @code
3298
+ * lxw_chart_line line = {.color = LXW_COLOR_RED,
3299
+ * .dash_type = LXW_CHART_LINE_DASH_SQUARE_DOT};
3300
+ *
3301
+ * chart_set_drop_lines(chart, &line);
3302
+ * @endcode
3303
+ *
3304
+ * Drop Lines are only available in Line and Area charts.
3305
+ * For more format information see @ref chart_lines.
3306
+ */
3307
+ void chart_set_drop_lines(lxw_chart *chart, lxw_chart_line *line);
3308
+
3309
+ /**
3310
+ * @brief Turn on and format high-low Lines for a chart.
3311
+ *
3312
+ * @param chart Pointer to a lxw_chart instance to be configured.
3313
+ * @param line A #lxw_chart_line struct.
3314
+ *
3315
+ * The `%chart_set_high_low_lines()` function adds High-Low Lines to charts
3316
+ * to show the Category value of points in the data:
3317
+ *
3318
+ * @code
3319
+ * chart_set_high_low_lines(chart, NULL);
3320
+ * @endcode
3321
+ *
3322
+ * @image html chart_data_tools5.png
3323
+ *
3324
+ * It is possible to format the High-Low Line line properties if required:
3325
+ *
3326
+ * @code
3327
+ * lxw_chart_line line = {.color = LXW_COLOR_RED,
3328
+ * .dash_type = LXW_CHART_LINE_DASH_SQUARE_DOT};
3329
+ *
3330
+ * chart_set_high_low_lines(chart, &line);
3331
+ * @endcode
3332
+ *
3333
+ * High-Low Lines are only available in Line charts.
3334
+ * For more format information see @ref chart_lines.
3335
+ */
3336
+ void chart_set_high_low_lines(lxw_chart *chart, lxw_chart_line *line);
3337
+
3338
+ /**
3339
+ * @brief Set the overlap between series in a Bar/Column chart.
3340
+ *
3341
+ * @param chart Pointer to a lxw_chart instance to be configured.
3342
+ * @param overlap The overlap between the series. -100 to 100.
3343
+ *
3344
+ * The `%chart_set_series_overlap()` function sets the overlap between series
3345
+ * in Bar and Column charts.
3346
+ *
3347
+ * @code
3348
+ * chart_set_series_overlap(chart, -50);
3349
+ * @endcode
3350
+ *
3351
+ * @image html chart_overlap.png
3352
+ *
3353
+ * The overlap value must be in the range `0 <= overlap <= 500`.
3354
+ * The default value is 0.
3355
+ *
3356
+ * This option is only available for Bar/Column charts.
3357
+ */
3358
+ void chart_set_series_overlap(lxw_chart *chart, int8_t overlap);
3359
+
3360
+ /**
3361
+ * @brief Set the gap between series in a Bar/Column chart.
3362
+ *
3363
+ * @param chart Pointer to a lxw_chart instance to be configured.
3364
+ * @param gap The gap between the series. 0 to 500.
3365
+ *
3366
+ * The `%chart_set_series_gap()` function sets the gap between series in
3367
+ * Bar and Column charts.
3368
+ *
3369
+ * @code
3370
+ * chart_set_series_gap(chart, 400);
3371
+ * @endcode
3372
+ *
3373
+ * @image html chart_gap.png
3374
+ *
3375
+ * The gap value must be in the range `0 <= gap <= 500`. The default value
3376
+ * is 150.
3377
+ *
3378
+ * This option is only available for Bar/Column charts.
3379
+ */
3380
+ void chart_set_series_gap(lxw_chart *chart, uint16_t gap);
3381
+
3382
+ /**
3383
+ * @brief Set the option for displaying blank data in a chart.
3384
+ *
3385
+ * @param chart Pointer to a lxw_chart instance to be configured.
3386
+ * @param option The display option. A #lxw_chart_blank option.
3387
+ *
3388
+ * The `%chart_show_blanks_as()` function controls how blank data is displayed
3389
+ * in a chart:
3390
+ *
3391
+ * @code
3392
+ * chart_show_blanks_as(chart, LXW_CHART_BLANKS_AS_CONNECTED);
3393
+ * @endcode
3394
+ *
3395
+ * The `option` parameter can have one of the following values:
3396
+ *
3397
+ * - #LXW_CHART_BLANKS_AS_GAP: Show empty chart cells as gaps in the data.
3398
+ * This is the default option for Excel charts.
3399
+ * - #LXW_CHART_BLANKS_AS_ZERO: Show empty chart cells as zeros.
3400
+ * - #LXW_CHART_BLANKS_AS_CONNECTED: Show empty chart cells as connected.
3401
+ * Only for charts with lines.
3402
+ */
3403
+ void chart_show_blanks_as(lxw_chart *chart, uint8_t option);
3404
+
3405
+ /**
3406
+ * @brief Display data on charts from hidden rows or columns.
3407
+ *
3408
+ * @param chart Pointer to a lxw_chart instance to be configured.
3409
+ *
3410
+ * Display data that is in hidden rows or columns on the chart:
3411
+ *
3412
+ * @code
3413
+ * chart_show_hidden_data(chart);
3414
+ * @endcode
3415
+ */
3416
+ void chart_show_hidden_data(lxw_chart *chart);
3417
+
3418
+ /**
3419
+ * @brief Set the Pie/Doughnut chart rotation.
3420
+ *
3421
+ * @param chart Pointer to a lxw_chart instance to be configured.
3422
+ * @param rotation The angle of rotation.
3423
+ *
3424
+ * The `chart_set_rotation()` function is used to set the rotation of the
3425
+ * first segment of a Pie/Doughnut chart. This has the effect of rotating
3426
+ * the entire chart:
3427
+ *
3428
+ * @code
3429
+ * chart_set_rotation(chart, 28);
3430
+ * @endcode
3431
+ *
3432
+ * The angle of rotation must be in the range `0 <= rotation <= 360`.
3433
+ *
3434
+ * This option is only available for Pie/Doughnut charts.
3435
+ *
3436
+ */
3437
+ void chart_set_rotation(lxw_chart *chart, uint16_t rotation);
3438
+
3439
+ /**
3440
+ * @brief Set the Doughnut chart hole size.
3441
+ *
3442
+ * @param chart Pointer to a lxw_chart instance to be configured.
3443
+ * @param size The hole size as a percentage.
3444
+ *
3445
+ * The `chart_set_hole_size()` function is used to set the hole size of a
3446
+ * Doughnut chart:
3447
+ *
3448
+ * @code
3449
+ * chart_set_hole_size(chart, 33);
3450
+ * @endcode
3451
+ *
3452
+ * The hole size must be in the range `10 <= size <= 90`.
3453
+ *
3454
+ * This option is only available for Doughnut charts.
3455
+ *
3456
+ */
3457
+ void chart_set_hole_size(lxw_chart *chart, uint8_t size);
3458
+
3459
+ lxw_error lxw_chart_add_data_cache(lxw_series_range *range, uint8_t *data,
3460
+ uint16_t rows, uint8_t cols, uint8_t col);
3461
+
3462
+ /* Declarations required for unit testing. */
3463
+ #ifdef TESTING
3464
+
3465
+ STATIC void _chart_xml_declaration(lxw_chart *chart);
3466
+ STATIC void _chart_write_legend(lxw_chart *chart);
3467
+
3468
+ #endif /* TESTING */
3469
+
3470
+ /* *INDENT-OFF* */
3471
+ #ifdef __cplusplus
3472
+ }
3473
+ #endif
3474
+ /* *INDENT-ON* */
3475
+
3476
+ #endif /* __LXW_CHART_H__ */