xlsxwriter 0.0.3 → 0.0.4.pre.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (31) hide show
  1. checksums.yaml +4 -4
  2. data/ext/xlsxwriter/libxlsxwriter/{LICENSE.txt → License.txt} +64 -3
  3. data/ext/xlsxwriter/libxlsxwriter/Makefile +42 -7
  4. data/ext/xlsxwriter/libxlsxwriter/include/xlsxwriter.h +1 -1
  5. data/ext/xlsxwriter/libxlsxwriter/include/xlsxwriter/app.h +2 -2
  6. data/ext/xlsxwriter/libxlsxwriter/include/xlsxwriter/chart.h +2481 -97
  7. data/ext/xlsxwriter/libxlsxwriter/include/xlsxwriter/common.h +41 -2
  8. data/ext/xlsxwriter/libxlsxwriter/include/xlsxwriter/core.h +1 -1
  9. data/ext/xlsxwriter/libxlsxwriter/include/xlsxwriter/format.h +5 -5
  10. data/ext/xlsxwriter/libxlsxwriter/include/xlsxwriter/packager.h +8 -3
  11. data/ext/xlsxwriter/libxlsxwriter/include/xlsxwriter/styles.h +1 -1
  12. data/ext/xlsxwriter/libxlsxwriter/include/xlsxwriter/utility.h +1 -0
  13. data/ext/xlsxwriter/libxlsxwriter/include/xlsxwriter/workbook.h +2 -2
  14. data/ext/xlsxwriter/libxlsxwriter/include/xlsxwriter/worksheet.h +381 -1
  15. data/ext/xlsxwriter/libxlsxwriter/src/Makefile +25 -5
  16. data/ext/xlsxwriter/libxlsxwriter/src/app.c +17 -13
  17. data/ext/xlsxwriter/libxlsxwriter/src/chart.c +3903 -976
  18. data/ext/xlsxwriter/libxlsxwriter/src/content_types.c +18 -14
  19. data/ext/xlsxwriter/libxlsxwriter/src/core.c +9 -9
  20. data/ext/xlsxwriter/libxlsxwriter/src/format.c +2 -2
  21. data/ext/xlsxwriter/libxlsxwriter/src/packager.c +179 -95
  22. data/ext/xlsxwriter/libxlsxwriter/src/relationships.c +11 -8
  23. data/ext/xlsxwriter/libxlsxwriter/src/shared_strings.c +2 -0
  24. data/ext/xlsxwriter/libxlsxwriter/src/styles.c +10 -8
  25. data/ext/xlsxwriter/libxlsxwriter/src/utility.c +18 -1
  26. data/ext/xlsxwriter/libxlsxwriter/src/workbook.c +41 -25
  27. data/ext/xlsxwriter/libxlsxwriter/src/worksheet.c +672 -42
  28. data/ext/xlsxwriter/libxlsxwriter/third_party/minizip/Makefile +6 -1
  29. data/lib/xlsxwriter/version.rb +1 -1
  30. data/lib/xlsxwriter/worksheet.rb +11 -5
  31. metadata +6 -6
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a6f5f03efc612b8ffe35f2ef05469e2866793dd4
4
- data.tar.gz: 62d0c4d63bc61a782fd481ef906b13fb28e9ac74
3
+ metadata.gz: 839412a8decaf536e0038b052d1011decb97def0
4
+ data.tar.gz: b0f75509d82602b093b07a2eb82309b0da97d595
5
5
  SHA512:
6
- metadata.gz: 7536f8487db5f37a3b1cce3f2b74eeba1f00f64db1c6ee55ad5ee58f4ca65c78a12fc3e5f4d939cbb4cd85f333b3a525a0ce2b36bb7a53ead4e7a22d0652d424
7
- data.tar.gz: 0e718cd11773b8774cdc86dae2ecbe5c4a82bcabb43387b8ebd70db3bee983a7e7307398d9fa1e910c2898efab8dd067e4d88b17fc7873ffac887e0f4b67e2d7
6
+ metadata.gz: 2a664d20a84b92fa12ff13bc6f8ef8505a6c403aacc9909ca69954480e6d7fd3913939a817d96bf90a69170b74a812704a76af5be1021c43561de31ae263bfe2
7
+ data.tar.gz: e348114d307aa35244210e9b62f8cd3e89b38b9dd25f9724de94e17c9226393da5021a72d22e121196a20d6777fad5058708167fd9e62175713f49d3a3ce740f
@@ -1,3 +1,6 @@
1
+ /**
2
+
3
+ @page license License
1
4
 
2
5
  Libxlsxwriter is released under a FreeBSD license:
3
6
 
@@ -31,8 +34,8 @@ Libxlsxwriter is released under a FreeBSD license:
31
34
  official policies, either expressed or implied, of the FreeBSD Project.
32
35
 
33
36
 
34
- Libxlsxwriter includes `queue.h` from FreeBSD and the `minizip` component of
35
- `zlib` which have the following licenses:
37
+ Libxlsxwriter includes `queue.h` and `tree.h` from FreeBSD, the `minizip`
38
+ component of `zlib` and `tmpfileplus` which have the following licenses:
36
39
 
37
40
 
38
41
  Queue.h from FreeBSD:
@@ -65,7 +68,35 @@ Queue.h from FreeBSD:
65
68
  SUCH DAMAGE.
66
69
 
67
70
 
68
- Zlib has the following License/Copyright:
71
+ Tree.h from FreeBSD:
72
+
73
+ Copyright 2002 Niels Provos <provos@citi.umich.edu>
74
+ All rights reserved.
75
+
76
+ Redistribution and use in source and binary forms, with or without
77
+ modification, are permitted provided that the following conditions
78
+ are met:
79
+ 1. Redistributions of source code must retain the above copyright
80
+ notice, this list of conditions and the following disclaimer.
81
+ 2. Redistributions in binary form must reproduce the above copyright
82
+ notice, this list of conditions and the following disclaimer in the
83
+ documentation and/or other materials provided with the distribution.
84
+
85
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
86
+ IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
87
+ OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
88
+ IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
89
+ INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
90
+ NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
91
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
92
+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
93
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
94
+ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
95
+
96
+
97
+ The `minizip` files used in the libxlsxwriter source tree are taken from the
98
+ `zlib` ` contrib/minizip` directory. [Zlib](http://www.zlib.net) has the
99
+ following License/Copyright:
69
100
 
70
101
  (C) 1995-2013 Jean-loup Gailly and Mark Adler
71
102
 
@@ -87,3 +118,33 @@ Zlib has the following License/Copyright:
87
118
 
88
119
  Jean-loup Gailly Mark Adler
89
120
  jloup@gzip.org madler@alumni.caltech.edu
121
+
122
+ The `minizip` files have the following additional copyright declarations:
123
+
124
+ Copyright (C) 1998-2010 Gilles Vollant
125
+ (minizip) ( http://www.winimage.com/zLibDll/minizip.html )
126
+
127
+ Modifications for Zip64 support
128
+ Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com )
129
+
130
+ Note, it is possible to compile libxlsxwriter without statically linking the
131
+ `minizip` files and instead dynamically linking to `lminizip`, see
132
+ @ref gsg_minizip.
133
+
134
+ [Tmpfileplus](http://www.di-mgt.com.au/c_function_to_create_temp_file.html)
135
+ has the following license:
136
+
137
+ This Source Code Form is subject to the terms of the Mozilla Public
138
+ License, v. 2.0. If a copy of the MPL was not distributed with this
139
+ file, You can obtain one at http://mozilla.org/MPL/2.0/.
140
+
141
+ Copyright (c) 2012-16 David Ireland, DI Management Services Pty Ltd
142
+ <http://www.di-mgt.com.au/contact/>.
143
+
144
+ See the [Mozilla Public License, v. 2.0](http://mozilla.org/MPL/2.0/).
145
+
146
+ Note, it is possible to compile libxlsxwriter using the standard library
147
+ `tmpfile()` function instead of `tmpfileplus`, see @ref gsg_tmpdir.
148
+
149
+ Next: @ref changes
150
+ */
@@ -11,11 +11,15 @@ ifdef V
11
11
  Q=
12
12
  endif
13
13
 
14
+ INSTALL_DIR ?= /usr/local
15
+
14
16
  .PHONY: docs tags examples
15
17
 
16
18
  # Build the libs.
17
19
  all :
20
+ ifndef USE_SYSTEM_MINIZIP
18
21
  $(Q)$(MAKE) -C third_party/minizip
22
+ endif
19
23
  ifndef USE_STANDARD_TMPFILE
20
24
  $(Q)$(MAKE) -C third_party/tmpfileplus
21
25
  endif
@@ -31,11 +35,13 @@ clean :
31
35
  $(Q)$(MAKE) clean -C test/unit
32
36
  $(Q)$(MAKE) clean -C test/functional/src
33
37
  $(Q)$(MAKE) clean -C examples
34
- $(Q)$(MAKE) clean -C third_party/minizip
35
38
  $(Q)rm -rf docs/html
36
39
  $(Q)rm -rf test/functional/__pycache__
37
40
  $(Q)rm -f test/functional/*.pyc
38
41
  $(Q)rm -f lib/*
42
+ ifndef USE_STANDARD_TMPFILE
43
+ $(Q)$(MAKE) clean -C third_party/minizip
44
+ endif
39
45
  ifndef USE_STANDARD_TMPFILE
40
46
  $(Q)$(MAKE) clean -C third_party/tmpfileplus
41
47
  endif
@@ -43,6 +49,12 @@ endif
43
49
  # Run the unit tests.
44
50
  test : all test_functional test_unit
45
51
 
52
+ # Test for C++ const correctness on APIs.
53
+ test_const : all
54
+ $(Q)$(MAKE) clean -C test/functional/src
55
+ $(Q)! $(MAKE) -C test/functional/src CFLAGS=-Wwrite-strings 2>&1 | grep -A 1 "note:"
56
+
57
+
46
58
  # Run the functional tests.
47
59
  test_functional : all
48
60
  $(Q)$(MAKE) -C test/functional/src
@@ -51,7 +63,9 @@ test_functional : all
51
63
  # Run all tests.
52
64
  test_unit :
53
65
  @echo "Compiling unit tests ..."
66
+ ifndef USE_SYSTEM_MINIZIP
54
67
  $(Q)$(MAKE) -C third_party/minizip
68
+ endif
55
69
  ifndef USE_STANDARD_TMPFILE
56
70
  $(Q)$(MAKE) -C third_party/tmpfileplus
57
71
  endif
@@ -83,14 +97,16 @@ docs:
83
97
  $(Q)$(MAKE) -C docs
84
98
 
85
99
  # Simple minded install.
86
- install:
87
- $(Q)cp -r include/* /usr/include
88
- $(Q)cp lib/* /usr/lib
100
+ install: all
101
+ $(Q)mkdir -p $(INSTALL_DIR)/include
102
+ $(Q)cp -R include/* $(INSTALL_DIR)/include
103
+ $(Q)mkdir -p $(INSTALL_DIR)/lib
104
+ $(Q)cp lib/* $(INSTALL_DIR)/lib
89
105
 
90
106
  # Simpler minded uninstall.
91
107
  uninstall:
92
- $(Q)rm -rf /usr/include/xlsxwriter*
93
- $(Q)rm /usr/lib/libxlsxwriter.*
108
+ $(Q)rm -rf $(INSTALL_DIR)/include/xlsxwriter*
109
+ $(Q)rm $(INSTALL_DIR)/lib/libxlsxwriter.*
94
110
 
95
111
  # Strip the lib files.
96
112
  strip:
@@ -98,16 +114,35 @@ strip:
98
114
 
99
115
  # Run a coverity static analysis.
100
116
  coverity:
117
+ ifndef USE_SYSTEM_MINIZIP
101
118
  $(Q)$(MAKE) -C third_party/minizip
119
+ endif
120
+ ifndef USE_STANDARD_TMPFILE
121
+ $(Q)$(MAKE) -C third_party/tmpfileplus
122
+ endif
102
123
  $(Q)$(MAKE) -C src clean
103
124
  $(Q)rm -f lib/*
104
125
  $(Q)rm -rf cov-int
105
126
  $(Q)rm -f libxlsxwriter-coverity.tgz
106
- $(Q)../cov-analysis-macosx-7.7.0.4/bin/cov-build --dir cov-int make -C src libxlsxwriter.a
127
+ $(Q)../../cov-analysis-linux64-8.7.0/bin/cov-build --dir cov-int make -C src libxlsxwriter.a
107
128
  $(Q)tar -czf libxlsxwriter-coverity.tgz cov-int
108
129
  $(Q)$(MAKE) -C src clean
109
130
  $(Q)rm -f lib/*
110
131
 
132
+ # Run a scan-build static analysis.
133
+ scan_build:
134
+ ifndef USE_SYSTEM_MINIZIP
135
+ $(Q)$(MAKE) -C third_party/minizip
136
+ endif
137
+ ifndef USE_STANDARD_TMPFILE
138
+ $(Q)$(MAKE) -C third_party/tmpfileplus
139
+ endif
140
+ $(Q)$(MAKE) -C src clean
141
+ $(Q)rm -f lib/*
142
+ $(Q)scan-build make -C src libxlsxwriter.a
143
+ $(Q)$(MAKE) -C src clean
144
+ $(Q)rm -f lib/*
145
+
111
146
  spellcheck:
112
147
  $(Q)for f in docs/src/*.dox; do aspell --lang=en_US --check $$f; done
113
148
  $(Q)for f in include/xlsxwriter/*.h; do aspell --lang=en_US --check $$f; done
@@ -18,6 +18,6 @@
18
18
  #include "xlsxwriter/format.h"
19
19
  #include "xlsxwriter/utility.h"
20
20
 
21
- #define LXW_VERSION "0.4.6"
21
+ #define LXW_VERSION "0.7.5"
22
22
 
23
23
  #endif /* __LXW_XLSXWRITER_H__ */
@@ -11,8 +11,8 @@
11
11
 
12
12
  #include <stdint.h>
13
13
  #include <string.h>
14
- #include "xlsxwriter/workbook.h"
15
- #include "xlsxwriter/common.h"
14
+ #include "workbook.h"
15
+ #include "common.h"
16
16
 
17
17
  /* Define the queue.h TAILQ structs for the App structs. */
18
18
  STAILQ_HEAD(lxw_heading_pairs, lxw_heading_pair);
@@ -81,8 +81,11 @@ STAILQ_HEAD(lxw_chart_series_list, lxw_chart_series);
81
81
  STAILQ_HEAD(lxw_series_data_points, lxw_series_data_point);
82
82
 
83
83
  #define LXW_CHART_NUM_FORMAT_LEN 128
84
+ #define LXW_CHART_DEFAULT_GAP 501
84
85
 
85
- /** Available chart types . */
86
+ /**
87
+ * @brief Available chart types.
88
+ */
86
89
  typedef enum lxw_chart_type {
87
90
 
88
91
  /** None. */
@@ -149,7 +152,9 @@ typedef enum lxw_chart_type {
149
152
  LXW_CHART_RADAR_FILLED
150
153
  } lxw_chart_type;
151
154
 
152
- /** Chart legend positions. */
155
+ /**
156
+ * @brief Chart legend positions.
157
+ */
153
158
  typedef enum lxw_chart_legend_position {
154
159
 
155
160
  /** No chart legend. */
@@ -174,7 +179,8 @@ typedef enum lxw_chart_legend_position {
174
179
  LXW_CHART_LEGEND_OVERLAY_LEFT
175
180
  } lxw_chart_legend_position;
176
181
 
177
- /** @brief Chart line dash types.
182
+ /**
183
+ * @brief Chart line dash types.
178
184
  *
179
185
  * The dash types are shown in the order that they appear in the Excel dialog.
180
186
  * See @ref chart_lines.
@@ -209,8 +215,254 @@ typedef enum lxw_chart_line_dash_type {
209
215
  LXW_CHART_LINE_DASH_DOT,
210
216
  LXW_CHART_LINE_DASH_SYSTEM_DASH_DOT,
211
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,
212
389
 
213
- } lxw_chart_liLINE_ne_dash_type;
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;
214
466
 
215
467
  enum lxw_chart_subtype {
216
468
 
@@ -226,17 +478,96 @@ enum lxw_chart_grouping {
226
478
  LXW_GROUPING_STACKED
227
479
  };
228
480
 
229
- enum lxw_chart_axis_tick_position {
230
- LXW_CHART_AXIS_POSITION_BETWEEN,
231
- LXW_CHART_AXIS_POSITION_ON_TICK
232
- };
481
+ /**
482
+ * @brief Axis positions for category axes.
483
+ */
484
+ typedef enum lxw_chart_axis_tick_position {
233
485
 
234
- enum lxw_chart_position {
235
- LXW_CHART_AXIS_RIGHT,
236
- LXW_CHART_AXIS_LEFT,
237
- LXW_CHART_AXIS_TOP,
238
- LXW_CHART_AXIS_BOTTOM
239
- };
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;
240
571
 
241
572
  typedef struct lxw_series_range {
242
573
  char *formula;
@@ -291,7 +622,7 @@ typedef struct lxw_chart_line {
291
622
  } lxw_chart_line;
292
623
 
293
624
  /**
294
- * @brief Struct to represent a chart line.
625
+ * @brief Struct to represent a chart fill.
295
626
  *
296
627
  * See @ref chart_fills.
297
628
  */
@@ -311,6 +642,28 @@ typedef struct lxw_chart_fill {
311
642
 
312
643
  } lxw_chart_fill;
313
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
+
314
667
  /**
315
668
  * @brief Struct to represent a chart font.
316
669
  *
@@ -322,7 +675,7 @@ typedef struct lxw_chart_font {
322
675
  char *name;
323
676
 
324
677
  /** The chart font size. The default is 11. */
325
- uint16_t size;
678
+ double size;
326
679
 
327
680
  /** The chart font bold property. Set to 0 or 1. */
328
681
  uint8_t bold;
@@ -347,6 +700,16 @@ typedef struct lxw_chart_font {
347
700
 
348
701
  } lxw_chart_font;
349
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
+
350
713
  typedef struct lxw_chart_legend {
351
714
 
352
715
  lxw_chart_font *font;
@@ -372,6 +735,126 @@ typedef struct lxw_chart_title {
372
735
 
373
736
  } lxw_chart_title;
374
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
+
375
858
  /**
376
859
  * @brief Struct to represent an Excel chart data series.
377
860
  *
@@ -386,11 +869,57 @@ typedef struct lxw_chart_series {
386
869
  lxw_chart_title title;
387
870
  lxw_chart_line *line;
388
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;
389
910
 
390
911
  STAILQ_ENTRY (lxw_chart_series) list_pointers;
391
912
 
392
913
  } lxw_chart_series;
393
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
+
394
923
  /**
395
924
  * @brief Struct to represent an Excel chart axis.
396
925
  *
@@ -401,16 +930,52 @@ typedef struct lxw_chart_axis {
401
930
 
402
931
  lxw_chart_title title;
403
932
 
404
- char num_format[LXW_CHART_NUM_FORMAT_LEN];
405
- char default_num_format[LXW_CHART_NUM_FORMAT_LEN];
933
+ char *num_format;
934
+ char *default_num_format;
935
+ uint8_t source_linked;
406
936
 
407
- uint8_t default_major_gridlines;
408
937
  uint8_t major_tick_mark;
938
+ uint8_t minor_tick_mark;
409
939
  uint8_t is_horizontal;
410
940
 
941
+ lxw_chart_gridline major_gridlines;
942
+ lxw_chart_gridline minor_gridlines;
943
+
411
944
  lxw_chart_font *num_font;
412
945
  lxw_chart_line *line;
413
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;
414
979
 
415
980
  } lxw_chart_axis;
416
981
 
@@ -452,7 +1017,7 @@ typedef struct lxw_chart {
452
1017
  uint32_t axis_id_4;
453
1018
 
454
1019
  uint8_t in_use;
455
- uint8_t is_scatter;
1020
+ uint8_t chart_group;
456
1021
  uint8_t cat_has_num_fmt;
457
1022
 
458
1023
  uint8_t has_horiz_cat_axis;
@@ -463,21 +1028,53 @@ typedef struct lxw_chart {
463
1028
  uint16_t hole_size;
464
1029
 
465
1030
  uint8_t no_title;
466
- uint8_t has_markers;
467
1031
  uint8_t has_overlap;
468
- int series_overlap_1;
1032
+ int8_t overlap_y1;
1033
+ int8_t overlap_y2;
1034
+ uint16_t gap_y1;
1035
+ uint16_t gap_y2;
469
1036
 
470
1037
  uint8_t grouping;
471
- uint8_t cross_between;
472
- uint8_t cat_axis_position;
473
- uint8_t val_axis_position;
1038
+ uint8_t default_cross_between;
474
1039
 
475
1040
  lxw_chart_legend legend;
476
1041
  int16_t *delete_series;
477
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;
478
1057
 
479
1058
  struct lxw_chart_series_list *series_list;
480
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
+
481
1078
  STAILQ_ENTRY (lxw_chart) ordered_list_pointers;
482
1079
  STAILQ_ENTRY (lxw_chart) list_pointers;
483
1080
 
@@ -734,139 +1331,1513 @@ void chart_series_set_line(lxw_chart_series *series, lxw_chart_line *line);
734
1331
  void chart_series_set_fill(lxw_chart_series *series, lxw_chart_fill *fill);
735
1332
 
736
1333
  /**
737
- * @brief Set the name caption of the an axis.
1334
+ * @brief Invert the fill color for negative series values.
738
1335
  *
739
- * @param axis A pointer to a chart #lxw_chart_axis object.
740
- * @param name The name caption of the axis.
1336
+ * @param series A series object created via `chart_add_series()`.
741
1337
  *
742
- * The `%chart_axis_set_name()` function sets the name (also known as title or
743
- * caption) for an axis. It can be used for the X or Y axes. The name is
744
- * displayed below an X axis and to the side of a Y axis.
1338
+ * Invert the fill color for negative values. Usually only applicable to
1339
+ * column and bar charts.
745
1340
  *
746
1341
  * @code
747
- * chart_axis_set_name(chart->x_axis, "Earnings per Quarter");
748
- * chart_axis_set_name(chart->y_axis, "US Dollars (Millions)");
1342
+ * chart_series_set_invert_if_negative(series);
749
1343
  * @endcode
750
1344
  *
751
- * @image html chart_axis_set_name.png
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.
752
1350
  *
753
- * The name parameter can also be a formula such as `=Sheet1!$A$1` to point to
754
- * a cell in the workbook that contains the name:
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:
755
1355
  *
756
1356
  * @code
757
- * chart_axis_set_name(chart->x_axis, "=Sheet1!$B1$1");
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
+ *
758
1368
  * @endcode
759
1369
  *
760
- * See also the `chart_axis_set_name_range()` function to see how to set the
761
- * name formula programmatically.
1370
+ * @image html chart_pattern.png
762
1371
  *
763
- * This function is applicable to category, date and value axes.
1372
+ * For more information see #lxw_chart_pattern_type and @ref chart_patterns.
764
1373
  */
765
- void chart_axis_set_name(lxw_chart_axis *axis, const char *name);
1374
+ void chart_series_set_pattern(lxw_chart_series *series,
1375
+ lxw_chart_pattern *pattern);
766
1376
 
767
1377
  /**
768
- * @brief Set a chart axis name formula using row and column values.
1378
+ * @brief Set the data marker type for a series.
769
1379
  *
770
- * @param axis A pointer to a chart #lxw_chart_axis object.
771
- * @param sheetname The name of the worksheet that contains the cell range.
772
- * @param row The zero indexed row number of the range.
773
- * @param col The zero indexed column number of the range.
1380
+ * @param series A series object created via `chart_add_series()`.
1381
+ * @param type The marker type, see #lxw_chart_marker_type.
774
1382
  *
775
- * The `%chart_axis_set_name_range()` function can be used to set an axis name
776
- * range and is an alternative to using `chart_axis_set_name()` and a string
777
- * formula:
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:
778
1403
  *
779
1404
  * @code
780
- * chart_axis_set_name_range(chart->x_axis, "Sheet1", 1, 0);
781
- * chart_axis_set_name_range(chart->y_axis, "Sheet1", 2, 0);
1405
+ * chart_series_set_marker_type(series, LXW_CHART_MARKER_DIAMOND);
782
1406
  * @endcode
783
- */
784
- void chart_axis_set_name_range(lxw_chart_axis *axis, const char *sheetname,
785
- lxw_row_t row, lxw_col_t col);
786
-
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
+ const 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,
1987
+ const char *name);
1988
+
1989
+ /**
1990
+ * @brief Set the trendline line properties for a chart data series.
1991
+ *
1992
+ * @param series A series object created via `chart_add_series()`.
1993
+ * @param line A #lxw_chart_line struct.
1994
+ *
1995
+ * The `%chart_series_set_trendline_line()` function is used to set the line
1996
+ * properties of a trendline:
1997
+ *
1998
+ * @code
1999
+ * lxw_chart_line line = {.color = LXW_COLOR_RED,
2000
+ * .dash_type = LXW_CHART_LINE_DASH_LONG_DASH};
2001
+ *
2002
+ * chart_series_set_trendline(series, LXW_CHART_TRENDLINE_TYPE_LINEAR, 0);
2003
+ * chart_series_set_trendline_line(series, &line);
2004
+ * @endcode
2005
+ *
2006
+ * @image html chart_trendline10.png
2007
+ *
2008
+ * For more information see @ref chart_trendlines and @ref chart_lines.
2009
+ */
2010
+ void chart_series_set_trendline_line(lxw_chart_series *series,
2011
+ lxw_chart_line *line);
2012
+
2013
+ /**
2014
+ * Set the X or Y error bars for a chart series.
2015
+ *
2016
+ * @param error_bars A pointer to the series X or Y error bars.
2017
+ * @param type The type of error bar: #lxw_chart_error_bar_type.
2018
+ * @param value The error value.
2019
+ *
2020
+ * Error bars can be added to a chart series to indicate error bounds in the
2021
+ * data. The error bars can be vertical `y_error_bars` (the most common type)
2022
+ * or horizontal `x_error_bars` (for Bar and Scatter charts only).
2023
+ *
2024
+ * @image html chart_error_bars0.png
2025
+ *
2026
+ * The `%chart_series_set_error_bars()` function sets the error bar type
2027
+ * and value associated with the type:
2028
+ *
2029
+ * @code
2030
+ * lxw_chart_series *series = chart_add_series(chart,
2031
+ * "=Sheet1!$A$1:$A$5",
2032
+ * "=Sheet1!$B$1:$B$5");
2033
+ *
2034
+ * chart_series_set_error_bars(series->y_error_bars,
2035
+ * LXW_CHART_ERROR_BAR_TYPE_STD_ERROR, 0);
2036
+ * @endcode
2037
+ *
2038
+ * @image html chart_error_bars1.png
2039
+ *
2040
+ * The error bar types that be used are:
2041
+ *
2042
+ * - #LXW_CHART_ERROR_BAR_TYPE_STD_ERROR: Standard error.
2043
+ * - #LXW_CHART_ERROR_BAR_TYPE_FIXED: Fixed value.
2044
+ * - #LXW_CHART_ERROR_BAR_TYPE_PERCENTAGE: Percentage.
2045
+ * - #LXW_CHART_ERROR_BAR_TYPE_STD_DEV: Standard deviation(s).
2046
+ *
2047
+ * @note Custom error bars are not currently supported.
2048
+ *
2049
+ * All error bar types, apart from Standard error, should have a valid
2050
+ * value to set the error range:
2051
+ *
2052
+ * @code
2053
+ * chart_series_set_error_bars(series1->y_error_bars,
2054
+ * LXW_CHART_ERROR_BAR_TYPE_FIXED, 2);
2055
+ *
2056
+ * chart_series_set_error_bars(series2->y_error_bars,
2057
+ * LXW_CHART_ERROR_BAR_TYPE_PERCENTAGE, 5);
2058
+ *
2059
+ * chart_series_set_error_bars(series3->y_error_bars,
2060
+ * LXW_CHART_ERROR_BAR_TYPE_STD_DEV, 1);
2061
+ * @endcode
2062
+ *
2063
+ * For the Standard error type the value is ignored.
2064
+ *
2065
+ * For more information see @ref chart_error_bars.
2066
+ */
2067
+ void chart_series_set_error_bars(lxw_series_error_bars *error_bars,
2068
+ uint8_t type, double value);
2069
+
2070
+ /**
2071
+ * @brief Set the direction (up, down or both) of the error bars for a chart
2072
+ * series.
2073
+ *
2074
+ * @param error_bars A pointer to the series X or Y error bars.
2075
+ * @param direction The bar direction: #lxw_chart_error_bar_direction .
2076
+ *
2077
+ * The `%chart_series_set_error_bars_direction()` function sets the
2078
+ * direction of the error bars:
2079
+ *
2080
+ * @code
2081
+ * chart_series_set_error_bars(series->y_error_bars,
2082
+ * LXW_CHART_ERROR_BAR_TYPE_STD_ERROR, 0);
2083
+ *
2084
+ * chart_series_set_error_bars_direction(series->y_error_bars,
2085
+ * LXW_CHART_ERROR_BAR_DIR_PLUS);
2086
+ * @endcode
2087
+ *
2088
+ * @image html chart_error_bars2.png
2089
+ *
2090
+ * The valid directions are:
2091
+ *
2092
+ * - #LXW_CHART_ERROR_BAR_DIR_BOTH: Error bar extends in both directions.
2093
+ * The default.
2094
+ * - #LXW_CHART_ERROR_BAR_DIR_PLUS: Error bar extends in positive direction.
2095
+ * - #LXW_CHART_ERROR_BAR_DIR_MINUS: Error bar extends in negative direction.
2096
+ *
2097
+ * For more information see @ref chart_error_bars.
2098
+ */
2099
+ void chart_series_set_error_bars_direction(lxw_series_error_bars *error_bars,
2100
+ uint8_t direction);
2101
+
2102
+ /**
2103
+ * @brief Set the end cap type for the error bars of a chart series.
2104
+ *
2105
+ * @param error_bars A pointer to the series X or Y error bars.
2106
+ * @param endcap The error bar end cap type: #lxw_chart_error_bar_cap .
2107
+ *
2108
+ * The `%chart_series_set_error_bars_endcap()` function sets the end cap
2109
+ * type for the error bars:
2110
+ *
2111
+ * @code
2112
+ * chart_series_set_error_bars(series->y_error_bars,
2113
+ * LXW_CHART_ERROR_BAR_TYPE_STD_ERROR, 0);
2114
+ *
2115
+ * chart_series_set_error_bars_endcap(series->y_error_bars,
2116
+ LXW_CHART_ERROR_BAR_NO_CAP);
2117
+ * @endcode
2118
+ *
2119
+ * @image html chart_error_bars3.png
2120
+ *
2121
+ * The valid values are:
2122
+ *
2123
+ * - #LXW_CHART_ERROR_BAR_END_CAP: Flat end cap. The default.
2124
+ * - #LXW_CHART_ERROR_BAR_NO_CAP: No end cap.
2125
+ *
2126
+ * For more information see @ref chart_error_bars.
2127
+ */
2128
+ void chart_series_set_error_bars_endcap(lxw_series_error_bars *error_bars,
2129
+ uint8_t endcap);
2130
+
2131
+ /**
2132
+ * @brief Set the line properties for a chart series error bars.
2133
+ *
2134
+ * @param error_bars A pointer to the series X or Y error bars.
2135
+ * @param line A #lxw_chart_line struct.
2136
+ *
2137
+ * The `%chart_series_set_error_bars_line()` function sets the line
2138
+ * properties for the error bars:
2139
+ *
2140
+ * @code
2141
+ * lxw_chart_line line = {.color = LXW_COLOR_RED,
2142
+ * .dash_type = LXW_CHART_LINE_DASH_ROUND_DOT};
2143
+ *
2144
+ * chart_series_set_error_bars(series->y_error_bars,
2145
+ * LXW_CHART_ERROR_BAR_TYPE_STD_ERROR, 0);
2146
+ *
2147
+ * chart_series_set_error_bars_line(series->y_error_bars, &line);
2148
+ * @endcode
2149
+ *
2150
+ * @image html chart_error_bars4.png
2151
+ *
2152
+ * For more information see @ref chart_lines and @ref chart_error_bars.
2153
+ */
2154
+ void chart_series_set_error_bars_line(lxw_series_error_bars *error_bars,
2155
+ lxw_chart_line *line);
2156
+
2157
+ /**
2158
+ * @brief Set the name caption of the an axis.
2159
+ *
2160
+ * @param axis A pointer to a chart #lxw_chart_axis object.
2161
+ * @param name The name caption of the axis.
2162
+ *
2163
+ * The `%chart_axis_set_name()` function sets the name (also known as title or
2164
+ * caption) for an axis. It can be used for the X or Y axes. The name is
2165
+ * displayed below an X axis and to the side of a Y axis.
2166
+ *
2167
+ * @code
2168
+ * chart_axis_set_name(chart->x_axis, "Earnings per Quarter");
2169
+ * chart_axis_set_name(chart->y_axis, "US Dollars (Millions)");
2170
+ * @endcode
2171
+ *
2172
+ * @image html chart_axis_set_name.png
2173
+ *
2174
+ * The name parameter can also be a formula such as `=Sheet1!$A$1` to point to
2175
+ * a cell in the workbook that contains the name:
2176
+ *
2177
+ * @code
2178
+ * chart_axis_set_name(chart->x_axis, "=Sheet1!$B1$1");
2179
+ * @endcode
2180
+ *
2181
+ * See also the `chart_axis_set_name_range()` function to see how to set the
2182
+ * name formula programmatically.
2183
+ *
2184
+ * **Axis types**: This function is applicable to to all axes types.
2185
+ * See @ref ww_charts_axes.
2186
+ */
2187
+ void chart_axis_set_name(lxw_chart_axis *axis, const char *name);
2188
+
2189
+ /**
2190
+ * @brief Set a chart axis name formula using row and column values.
2191
+ *
2192
+ * @param axis A pointer to a chart #lxw_chart_axis object.
2193
+ * @param sheetname The name of the worksheet that contains the cell range.
2194
+ * @param row The zero indexed row number of the range.
2195
+ * @param col The zero indexed column number of the range.
2196
+ *
2197
+ * The `%chart_axis_set_name_range()` function can be used to set an axis name
2198
+ * range and is an alternative to using `chart_axis_set_name()` and a string
2199
+ * formula:
2200
+ *
2201
+ * @code
2202
+ * chart_axis_set_name_range(chart->x_axis, "Sheet1", 1, 0);
2203
+ * chart_axis_set_name_range(chart->y_axis, "Sheet1", 2, 0);
2204
+ * @endcode
2205
+ *
2206
+ * **Axis types**: This function is applicable to to all axes types.
2207
+ * See @ref ww_charts_axes.
2208
+ */
2209
+ void chart_axis_set_name_range(lxw_chart_axis *axis, const char *sheetname,
2210
+ lxw_row_t row, lxw_col_t col);
2211
+
2212
+ /**
2213
+ * @brief Set the font properties for a chart axis name.
2214
+ *
2215
+ * @param axis A pointer to a chart #lxw_chart_axis object.
2216
+ * @param font A pointer to a chart #lxw_chart_font font struct.
2217
+ *
2218
+ * The `%chart_axis_set_name_font()` function is used to set the font of an
2219
+ * axis name:
2220
+ *
2221
+ * @code
2222
+ * lxw_chart_font font = {.bold = LXW_TRUE, .color = LXW_COLOR_BLUE};
2223
+ *
2224
+ * chart_axis_set_name(chart->x_axis, "Yearly data");
2225
+ * chart_axis_set_name_font(chart->x_axis, &font);
2226
+ * @endcode
2227
+ *
2228
+ * @image html chart_axis_set_name_font.png
2229
+ *
2230
+ * For more information see @ref chart_fonts.
2231
+ *
2232
+ * **Axis types**: This function is applicable to to all axes types.
2233
+ * See @ref ww_charts_axes.
2234
+ */
2235
+ void chart_axis_set_name_font(lxw_chart_axis *axis, lxw_chart_font *font);
2236
+
2237
+ /**
2238
+ * @brief Set the font properties for the numbers of a chart axis.
2239
+ *
2240
+ * @param axis A pointer to a chart #lxw_chart_axis object.
2241
+ * @param font A pointer to a chart #lxw_chart_font font struct.
2242
+ *
2243
+ * The `%chart_axis_set_num_font()` function is used to set the font of the
2244
+ * numbers on an axis:
2245
+ *
2246
+ * @code
2247
+ * lxw_chart_font font = {.bold = LXW_TRUE, .color = LXW_COLOR_BLUE};
2248
+ *
2249
+ * chart_axis_set_num_font(chart->x_axis, &font1);
2250
+ * @endcode
2251
+ *
2252
+ * @image html chart_axis_set_num_font.png
2253
+ *
2254
+ * For more information see @ref chart_fonts.
2255
+ *
2256
+ * **Axis types**: This function is applicable to to all axes types.
2257
+ * See @ref ww_charts_axes.
2258
+ */
2259
+ void chart_axis_set_num_font(lxw_chart_axis *axis, lxw_chart_font *font);
2260
+
2261
+ /**
2262
+ * @brief Set the number format for a chart axis.
2263
+ *
2264
+ * @param axis A pointer to a chart #lxw_chart_axis object.
2265
+ * @param num_format The number format string.
2266
+ *
2267
+ * The `%chart_axis_set_num_format()` function is used to set the format of
2268
+ * the numbers on an axis:
2269
+ *
2270
+ * @code
2271
+ * chart_axis_set_num_format(chart->x_axis, "0.00%");
2272
+ * chart_axis_set_num_format(chart->y_axis, "$#,##0.00");
2273
+ * @endcode
2274
+ *
2275
+ * The number format is similar to the Worksheet Cell Format num_format,
2276
+ * see `format_set_num_format()`.
2277
+ *
2278
+ * @image html chart_axis_num_format.png
2279
+ *
2280
+ * **Axis types**: This function is applicable to to all axes types.
2281
+ * See @ref ww_charts_axes.
2282
+ */
2283
+ void chart_axis_set_num_format(lxw_chart_axis *axis, const char *num_format);
2284
+
2285
+ /**
2286
+ * @brief Set the line properties for a chart axis.
2287
+ *
2288
+ * @param axis A pointer to a chart #lxw_chart_axis object.
2289
+ * @param line A #lxw_chart_line struct.
2290
+ *
2291
+ * Set the line properties of a chart axis:
2292
+ *
2293
+ * @code
2294
+ * // Hide the Y axis.
2295
+ * lxw_chart_line line = {.none = LXW_TRUE};
2296
+ *
2297
+ * chart_axis_set_line(chart->y_axis, &line);
2298
+ * @endcode
2299
+ *
2300
+ * @image html chart_axis_set_line.png
2301
+ *
2302
+ * For more information see @ref chart_lines.
2303
+ *
2304
+ * **Axis types**: This function is applicable to to all axes types.
2305
+ * See @ref ww_charts_axes.
2306
+ */
2307
+ void chart_axis_set_line(lxw_chart_axis *axis, lxw_chart_line *line);
2308
+
787
2309
  /**
788
- * @brief Set the font properties for a chart axis name.
2310
+ * @brief Set the fill properties for a chart axis.
789
2311
  *
790
2312
  * @param axis A pointer to a chart #lxw_chart_axis object.
791
- * @param font A pointer to a chart #lxw_chart_font font struct.
2313
+ * @param fill A #lxw_chart_fill struct.
792
2314
  *
793
- * The `%chart_axis_set_name_font()` function is used to set the font of an
794
- * axis name:
2315
+ * Set the fill properties of a chart axis:
795
2316
  *
796
2317
  * @code
797
- * lxw_chart_font font = {.bold = LXW_TRUE, .color = LXW_COLOR_BLUE};
2318
+ * lxw_chart_fill fill = {.color = LXW_COLOR_YELLOW};
798
2319
  *
799
- * chart_axis_set_name(chart->x_axis, "Yearly data");
800
- * chart_axis_set_name_font(chart->x_axis, &font);
2320
+ * chart_axis_set_fill(chart->y_axis, &fill);
801
2321
  * @endcode
802
2322
  *
803
- * @image html chart_axis_set_name_font.png
2323
+ * @image html chart_axis_set_fill.png
804
2324
  *
805
- * For more information see @ref chart_fonts.
2325
+ * For more information see @ref chart_fills.
2326
+ *
2327
+ * **Axis types**: This function is applicable to to all axes types.
2328
+ * See @ref ww_charts_axes.
806
2329
  */
807
- void chart_axis_set_name_font(lxw_chart_axis *axis, lxw_chart_font *font);
2330
+ void chart_axis_set_fill(lxw_chart_axis *axis, lxw_chart_fill *fill);
808
2331
 
809
2332
  /**
810
- * @brief Set the font properties for the numbers of a chart axis.
2333
+ * @brief Set the pattern properties for a chart axis.
2334
+ *
2335
+ * @param axis A pointer to a chart #lxw_chart_axis object.
2336
+ * @param pattern A #lxw_chart_pattern struct.
2337
+ *
2338
+ * Set the pattern properties of a chart axis:
2339
+ *
2340
+ * @code
2341
+ * chart_axis_set_pattern(chart->y_axis, &pattern);
2342
+ * @endcode
2343
+ *
2344
+ * For more information see #lxw_chart_pattern_type and @ref chart_patterns.
2345
+ *
2346
+ * **Axis types**: This function is applicable to to all axes types.
2347
+ * See @ref ww_charts_axes.
2348
+ */
2349
+ void chart_axis_set_pattern(lxw_chart_axis *axis, lxw_chart_pattern *pattern);
2350
+
2351
+ /**
2352
+ * @brief Reverse the order of the axis categories or values.
811
2353
  *
812
2354
  * @param axis A pointer to a chart #lxw_chart_axis object.
813
- * @param font A pointer to a chart #lxw_chart_font font struct.
814
2355
  *
815
- * The `%chart_axis_set_num_font()` function is used to set the font of the
816
- * numbers on an axis:
2356
+ * Reverse the order of the axis categories or values:
2357
+ *
2358
+ * @code
2359
+ * chart_axis_set_reverse(chart->x_axis);
2360
+ * @endcode
2361
+ *
2362
+ * @image html chart_reverse.png
2363
+ *
2364
+ * **Axis types**: This function is applicable to to all axes types.
2365
+ * See @ref ww_charts_axes.
2366
+ */
2367
+ void chart_axis_set_reverse(lxw_chart_axis *axis);
2368
+
2369
+ /**
2370
+ * @brief Set the position that the axis will cross the opposite axis.
2371
+ *
2372
+ * @param axis A pointer to a chart #lxw_chart_axis object.
2373
+ * @param value The category or value that the axis crosses at.
2374
+ *
2375
+ * Set the position that the axis will cross the opposite axis:
2376
+ *
2377
+ * @code
2378
+ * chart_axis_set_crossing(chart->x_axis, 3);
2379
+ * chart_axis_set_crossing(chart->y_axis, 8);
2380
+ * @endcode
2381
+ *
2382
+ * @image html chart_crossing1.png
2383
+ *
2384
+ * If crossing is omitted (the default) the crossing will be set automatically
2385
+ * by Excel based on the chart data.
2386
+ *
2387
+ * **Axis types**: This function is applicable to to all axes types.
2388
+ * See @ref ww_charts_axes.
2389
+ */
2390
+ void chart_axis_set_crossing(lxw_chart_axis *axis, double value);
2391
+
2392
+ /**
2393
+ * @brief Set the opposite axis crossing position as the axis maximum.
2394
+ *
2395
+ * @param axis A pointer to a chart #lxw_chart_axis object.
2396
+ *
2397
+ * Set the position that the opposite axis will cross as the axis maximum.
2398
+ * The default axis crossing position is generally the axis minimum so this
2399
+ * function can be used to reverse the location of the axes without reversing
2400
+ * the number sequence:
2401
+ *
2402
+ * @code
2403
+ * chart_axis_set_crossing_max(chart->x_axis);
2404
+ * chart_axis_set_crossing_max(chart->y_axis);
2405
+ * @endcode
2406
+ *
2407
+ * @image html chart_crossing2.png
2408
+ *
2409
+ * **Axis types**: This function is applicable to to all axes types.
2410
+ * See @ref ww_charts_axes.
2411
+ */
2412
+ void chart_axis_set_crossing_max(lxw_chart_axis *axis);
2413
+
2414
+ /**
2415
+ * @brief Turn off/hide an axis.
2416
+ *
2417
+ * @param axis A pointer to a chart #lxw_chart_axis object.
2418
+ *
2419
+ * Turn off, hide, a chart axis:
2420
+ *
2421
+ * @code
2422
+ * chart_axis_off(chart->x_axis);
2423
+ * @endcode
2424
+ *
2425
+ * @image html chart_axis_off.png
2426
+ *
2427
+ * **Axis types**: This function is applicable to to all axes types.
2428
+ * See @ref ww_charts_axes.
2429
+ */
2430
+ void chart_axis_off(lxw_chart_axis *axis);
2431
+
2432
+ /**
2433
+ * @brief Position a category axis on or between the axis tick marks.
2434
+ *
2435
+ * @param axis A pointer to a chart #lxw_chart_axis object.
2436
+ * @param position A #lxw_chart_axis_tick_position value.
2437
+ *
2438
+ * Position a category axis horizontally on, or between, the axis tick marks.
2439
+ *
2440
+ * There are two allowable values:
2441
+ *
2442
+ * - #LXW_CHART_AXIS_POSITION_ON_TICK
2443
+ * - #LXW_CHART_AXIS_POSITION_BETWEEN
2444
+ *
2445
+ * @code
2446
+ * chart_axis_set_position(chart->x_axis, LXW_CHART_AXIS_POSITION_BETWEEN);
2447
+ * @endcode
2448
+ *
2449
+ * @image html chart_axis_set_position.png
2450
+ *
2451
+ * **Axis types**: This function is applicable to category axes only.
2452
+ * See @ref ww_charts_axes.
2453
+ */
2454
+ void chart_axis_set_position(lxw_chart_axis *axis, uint8_t position);
2455
+
2456
+ /**
2457
+ * @brief Position the axis labels.
2458
+ *
2459
+ * @param axis A pointer to a chart #lxw_chart_axis object.
2460
+ * @param position A #lxw_chart_axis_label_position value.
2461
+ *
2462
+ * Position the axis labels for the chart. The labels are the numbers, or
2463
+ * strings or dates, on the axis that indicate the categories or values of
2464
+ * the axis.
2465
+ *
2466
+ * For example:
2467
+ *
2468
+ * @code
2469
+ * chart_axis_set_label_position(chart->x_axis, LXW_CHART_AXIS_LABEL_POSITION_HIGH);
2470
+ chart_axis_set_label_position(chart->y_axis, LXW_CHART_AXIS_LABEL_POSITION_HIGH);
2471
+ * @endcode
2472
+ *
2473
+ * @image html chart_label_position2.png
2474
+ *
2475
+ * The allowable values:
2476
+ *
2477
+ * - #LXW_CHART_AXIS_LABEL_POSITION_NEXT_TO - The default.
2478
+ * - #LXW_CHART_AXIS_LABEL_POSITION_HIGH - Also right for vertical axes.
2479
+ * - #LXW_CHART_AXIS_LABEL_POSITION_LOW - Also left for vertical axes.
2480
+ * - #LXW_CHART_AXIS_LABEL_POSITION_NONE
2481
+ *
2482
+ * @image html chart_label_position1.png
2483
+ *
2484
+ * The #LXW_CHART_AXIS_LABEL_POSITION_NONE turns off the axis labels. This
2485
+ * is slightly different from `chart_axis_off()` which also turns off the
2486
+ * labels but also turns off tick marks.
2487
+ *
2488
+ * **Axis types**: This function is applicable to to all axes types.
2489
+ * See @ref ww_charts_axes.
2490
+ */
2491
+ void chart_axis_set_label_position(lxw_chart_axis *axis, uint8_t position);
2492
+
2493
+ /**
2494
+ * @brief Set the minimum value for a chart axis.
2495
+ *
2496
+ * @param axis A pointer to a chart #lxw_chart_axis object.
2497
+ * @param min Minimum value for chart axis. Value axes only.
2498
+ *
2499
+ * Set the minimum value for the axis range.
2500
+ *
2501
+ * @code
2502
+ * chart_axis_set_min(chart->y_axis, -4);
2503
+ * chart_axis_set_max(chart->y_axis, 21);
2504
+ * @endcode
2505
+ *
2506
+ * @image html chart_max_min.png
2507
+ *
2508
+ * **Axis types**: This function is applicable to value and date axes only.
2509
+ * See @ref ww_charts_axes.
2510
+ */
2511
+ void chart_axis_set_min(lxw_chart_axis *axis, double min);
2512
+
2513
+ /**
2514
+ * @brief Set the maximum value for a chart axis.
2515
+ *
2516
+ * @param axis A pointer to a chart #lxw_chart_axis object.
2517
+ * @param max Maximum value for chart axis. Value axes only.
2518
+ *
2519
+ * Set the maximum value for the axis range.
2520
+ *
2521
+ * @code
2522
+ * chart_axis_set_min(chart->y_axis, -4);
2523
+ * chart_axis_set_max(chart->y_axis, 21);
2524
+ * @endcode
2525
+ *
2526
+ * See the above image.
2527
+ *
2528
+ * **Axis types**: This function is applicable to value and date axes only.
2529
+ * See @ref ww_charts_axes.
2530
+ */
2531
+ void chart_axis_set_max(lxw_chart_axis *axis, double max);
2532
+
2533
+ /**
2534
+ * @brief Set the log base of the axis range.
2535
+ *
2536
+ * @param axis A pointer to a chart #lxw_chart_axis object.
2537
+ * @param log_base The log base for value axis. Value axes only.
2538
+ *
2539
+ * Set the log base for the axis:
2540
+ *
2541
+ * @code
2542
+ * chart_axis_set_log_base(chart->y_axis, 10);
2543
+ * @endcode
2544
+ *
2545
+ * @image html chart_log_base.png
2546
+ *
2547
+ * The allowable range of values for the log base in Excel is between 2 and
2548
+ * 1000.
2549
+ *
2550
+ * **Axis types**: This function is applicable to value axes only.
2551
+ * See @ref ww_charts_axes.
2552
+ */
2553
+ void chart_axis_set_log_base(lxw_chart_axis *axis, uint16_t log_base);
2554
+
2555
+ /**
2556
+ * @brief Set the major axis tick mark type.
2557
+ *
2558
+ * @param axis A pointer to a chart #lxw_chart_axis object.
2559
+ * @param type The tick mark type, defined by #lxw_chart_tick_mark.
2560
+ *
2561
+ * Set the type of the major axis tick mark:
2562
+ *
2563
+ * @code
2564
+ * chart_axis_set_major_tick_mark(chart->x_axis, LXW_CHART_AXIS_TICK_MARK_CROSSING);
2565
+ * chart_axis_set_minor_tick_mark(chart->x_axis, LXW_CHART_AXIS_TICK_MARK_INSIDE);
2566
+ *
2567
+ * chart_axis_set_major_tick_mark(chart->x_axis, LXW_CHART_AXIS_TICK_MARK_OUTSIDE);
2568
+ * chart_axis_set_minor_tick_mark(chart->y_axis, LXW_CHART_AXIS_TICK_MARK_INSIDE);
2569
+ *
2570
+ * // Hide the default gridlines so the tick marks are visible.
2571
+ * chart_axis_major_gridlines_set_visible(chart->y_axis, LXW_FALSE);
2572
+ * @endcode
2573
+ *
2574
+ * @image html chart_tick_marks.png
2575
+ *
2576
+ * The tick mark types are:
2577
+ *
2578
+ * - #LXW_CHART_AXIS_TICK_MARK_NONE
2579
+ * - #LXW_CHART_AXIS_TICK_MARK_INSIDE
2580
+ * - #LXW_CHART_AXIS_TICK_MARK_OUTSIDE
2581
+ * - #LXW_CHART_AXIS_TICK_MARK_CROSSING
2582
+ *
2583
+ * **Axis types**: This function is applicable to to all axes types.
2584
+ * See @ref ww_charts_axes.
2585
+ */
2586
+ void chart_axis_set_major_tick_mark(lxw_chart_axis *axis, uint8_t type);
2587
+
2588
+ /**
2589
+ * @brief Set the minor axis tick mark type.
2590
+ *
2591
+ * @param axis A pointer to a chart #lxw_chart_axis object.
2592
+ * @param type The tick mark type, defined by #lxw_chart_tick_mark.
2593
+ *
2594
+ * Set the type of the minor axis tick mark:
2595
+ *
2596
+ * @code
2597
+ * chart_axis_set_minor_tick_mark(chart->x_axis, LXW_CHART_AXIS_TICK_MARK_INSIDE);
2598
+ * @endcode
2599
+ *
2600
+ * See the image and example above.
2601
+ *
2602
+ * **Axis types**: This function is applicable to to all axes types.
2603
+ * See @ref ww_charts_axes.
2604
+ */
2605
+ void chart_axis_set_minor_tick_mark(lxw_chart_axis *axis, uint8_t type);
2606
+
2607
+ /**
2608
+ * @brief Set the interval between category values.
2609
+ *
2610
+ * @param axis A pointer to a chart #lxw_chart_axis object.
2611
+ * @param unit The interval between the categories.
2612
+ *
2613
+ * Set the interval between the category values. The default interval is 1
2614
+ * which gives the intervals shown in the charts above:
2615
+ *
2616
+ * 1, 2, 3, 4, 5, etc.
2617
+ *
2618
+ * Setting it to 2 gives:
2619
+ *
2620
+ * 1, 3, 5, 7, etc.
2621
+ *
2622
+ * For example:
2623
+ *
2624
+ * @code
2625
+ * chart_axis_set_interval_unit(chart->x_axis, 2);
2626
+ * @endcode
2627
+ *
2628
+ * @image html chart_set_interval1.png
2629
+ *
2630
+ * **Axis types**: This function is applicable to category and date axes only.
2631
+ * See @ref ww_charts_axes.
2632
+ */
2633
+ void chart_axis_set_interval_unit(lxw_chart_axis *axis, uint16_t unit);
2634
+
2635
+ /**
2636
+ * @brief Set the interval between category tick marks.
2637
+ *
2638
+ * @param axis A pointer to a chart #lxw_chart_axis object.
2639
+ * @param unit The interval between the category ticks.
2640
+ *
2641
+ * Set the interval between the category tick marks. The default interval is 1
2642
+ * between each category but it can be set to other integer values:
2643
+ *
2644
+ * @code
2645
+ * chart_axis_set_interval_tick(chart->x_axis, 2);
2646
+ * @endcode
2647
+ *
2648
+ * @image html chart_set_interval2.png
2649
+ *
2650
+ * **Axis types**: This function is applicable to category and date axes only.
2651
+ * See @ref ww_charts_axes.
2652
+ */
2653
+ void chart_axis_set_interval_tick(lxw_chart_axis *axis, uint16_t unit);
2654
+
2655
+ /**
2656
+ * @brief Set the increment of the major units in the axis.
2657
+ *
2658
+ * @param axis A pointer to a chart #lxw_chart_axis object.
2659
+ * @param unit The increment of the major units.
2660
+ *
2661
+ * Set the increment of the major units in the axis range.
2662
+ *
2663
+ * @code
2664
+ * // Turn on the minor gridline (it is off by default).
2665
+ * chart_axis_minor_gridlines_set_visible(chart->y_axis, LXW_TRUE);
2666
+ *
2667
+ * chart_axis_set_major_unit(chart->y_axis, 4);
2668
+ * chart_axis_set_minor_unit(chart->y_axis, 2);
2669
+ * @endcode
2670
+ *
2671
+ * @image html chart_set_major_units.png
2672
+ *
2673
+ * **Axis types**: This function is applicable to value and date axes only.
2674
+ * See @ref ww_charts_axes.
2675
+ */
2676
+ void chart_axis_set_major_unit(lxw_chart_axis *axis, double unit);
2677
+
2678
+ /**
2679
+ * @brief Set the increment of the minor units in the axis.
2680
+ *
2681
+ * @param axis A pointer to a chart #lxw_chart_axis object.
2682
+ * @param unit The increment of the minor units.
2683
+ *
2684
+ * Set the increment of the minor units in the axis range.
2685
+ *
2686
+ * @code
2687
+ * chart_axis_set_minor_unit(chart->y_axis, 2);
2688
+ * @endcode
2689
+ *
2690
+ * See the image above
2691
+ *
2692
+ * **Axis types**: This function is applicable to value and date axes only.
2693
+ * See @ref ww_charts_axes.
2694
+ */
2695
+ void chart_axis_set_minor_unit(lxw_chart_axis *axis, double unit);
2696
+
2697
+ /**
2698
+ * @brief Set the display units for a value axis.
2699
+ *
2700
+ * @param axis A pointer to a chart #lxw_chart_axis object.
2701
+ * @param units The display units: #lxw_chart_axis_display_unit.
2702
+ *
2703
+ * Set the display units for the axis. This can be useful if the axis numbers
2704
+ * are very large but you don't want to represent them in scientific notation:
2705
+ *
2706
+ * @code
2707
+ * chart_axis_set_display_units(chart->x_axis, LXW_CHART_AXIS_UNITS_THOUSANDS);
2708
+ * chart_axis_set_display_units(chart->y_axis, LXW_CHART_AXIS_UNITS_MILLIONS);
2709
+ * @endcode
2710
+ *
2711
+ * @image html chart_display_units.png
2712
+ *
2713
+ * **Axis types**: This function is applicable to value axes only.
2714
+ * See @ref ww_charts_axes.
2715
+ */
2716
+ void chart_axis_set_display_units(lxw_chart_axis *axis, uint8_t units);
2717
+
2718
+ /**
2719
+ * @brief Turn on/off the display units for a value axis.
2720
+
2721
+ * @param axis A pointer to a chart #lxw_chart_axis object.
2722
+ * @param visible Turn off/on the display units. (0/1)
2723
+ *
2724
+ * Turn on or off the display units for the axis. This option is set on
2725
+ * automatically by `chart_axis_set_display_units()`.
2726
+ *
2727
+ * @code
2728
+ * chart_axis_set_display_units_visible(chart->y_axis, LXW_TRUE);
2729
+ * @endcode
2730
+ *
2731
+ * **Axis types**: This function is applicable to value axes only.
2732
+ * See @ref ww_charts_axes.
2733
+ */
2734
+ void chart_axis_set_display_units_visible(lxw_chart_axis *axis,
2735
+ uint8_t visible);
2736
+
2737
+ /**
2738
+ * @brief Turn on/off the major gridlines for an axis.
2739
+ *
2740
+ * @param axis A pointer to a chart #lxw_chart_axis object.
2741
+ * @param visible Turn off/on the major gridline. (0/1)
2742
+ *
2743
+ * Turn on or off the major gridlines for an X or Y axis. In most Excel charts
2744
+ * the Y axis major gridlines are on by default and the X axis major
2745
+ * gridlines are off by default.
2746
+ *
2747
+ * Example:
2748
+ *
2749
+ * @code
2750
+ * // Reverse the normal visible/hidden gridlines for a column chart.
2751
+ * chart_axis_major_gridlines_set_visible(chart->x_axis, LXW_TRUE);
2752
+ * chart_axis_major_gridlines_set_visible(chart->y_axis, LXW_FALSE);
2753
+ * @endcode
2754
+ *
2755
+ * @image html chart_gridline1.png
2756
+ *
2757
+ * **Axis types**: This function is applicable to to all axes types.
2758
+ * See @ref ww_charts_axes.
2759
+ */
2760
+ void chart_axis_major_gridlines_set_visible(lxw_chart_axis *axis,
2761
+ uint8_t visible);
2762
+
2763
+ /**
2764
+ * @brief Turn on/off the minor gridlines for an axis.
2765
+ *
2766
+ * @param axis A pointer to a chart #lxw_chart_axis object.
2767
+ * @param visible Turn off/on the minor gridline. (0/1)
2768
+ *
2769
+ * Turn on or off the minor gridlines for an X or Y axis. In most Excel charts
2770
+ * the X and Y axis minor gridlines are off by default.
2771
+ *
2772
+ * Example, turn on all major and minor gridlines:
817
2773
  *
818
2774
  * @code
819
- * lxw_chart_font font = {.bold = LXW_TRUE, .color = LXW_COLOR_BLUE};
820
- *
821
- * chart_axis_set_num_font(chart->x_axis, &font1);
2775
+ * chart_axis_major_gridlines_set_visible(chart->x_axis, LXW_TRUE);
2776
+ * chart_axis_minor_gridlines_set_visible(chart->x_axis, LXW_TRUE);
2777
+ * chart_axis_major_gridlines_set_visible(chart->y_axis, LXW_TRUE);
2778
+ * chart_axis_minor_gridlines_set_visible(chart->y_axis, LXW_TRUE);
822
2779
  * @endcode
823
2780
  *
824
- * @image html chart_axis_set_num_font.png
2781
+ * @image html chart_gridline2.png
825
2782
  *
826
- * For more information see @ref chart_fonts.
2783
+ * **Axis types**: This function is applicable to to all axes types.
2784
+ * See @ref ww_charts_axes.
827
2785
  */
828
- void chart_axis_set_num_font(lxw_chart_axis *axis, lxw_chart_font *font);
2786
+ void chart_axis_minor_gridlines_set_visible(lxw_chart_axis *axis,
2787
+ uint8_t visible);
829
2788
 
830
2789
  /**
831
- * @brief Set the line properties for a chart axis.
2790
+ * @brief Set the line properties for the chart axis major gridlines.
832
2791
  *
833
2792
  * @param axis A pointer to a chart #lxw_chart_axis object.
834
2793
  * @param line A #lxw_chart_line struct.
835
2794
  *
836
- * Set the line properties of a chart axis:
2795
+ * Format the line properties of the major gridlines of a chart:
837
2796
  *
838
2797
  * @code
839
- * // Hide the Y axis.
840
- * lxw_chart_line line = {.none = LXW_TRUE};
2798
+ * lxw_chart_line line1 = {.color = LXW_COLOR_RED,
2799
+ * .width = 0.5,
2800
+ * .dash_type = LXW_CHART_LINE_DASH_SQUARE_DOT};
841
2801
  *
842
- * chart_axis_set_line(chart->y_axis, &line);
2802
+ * lxw_chart_line line2 = {.color = LXW_COLOR_YELLOW};
2803
+ *
2804
+ * lxw_chart_line line3 = {.width = 1.25,
2805
+ * .dash_type = LXW_CHART_LINE_DASH_DASH};
2806
+ *
2807
+ * lxw_chart_line line4 = {.color = 0x00B050};
2808
+ *
2809
+ * chart_axis_major_gridlines_set_line(chart->x_axis, &line1);
2810
+ * chart_axis_minor_gridlines_set_line(chart->x_axis, &line2);
2811
+ * chart_axis_major_gridlines_set_line(chart->y_axis, &line3);
2812
+ * chart_axis_minor_gridlines_set_line(chart->y_axis, &line4);
843
2813
  * @endcode
844
2814
  *
845
- * @image html chart_axis_set_line.png
2815
+ * @image html chart_gridline3.png
846
2816
  *
847
2817
  * For more information see @ref chart_lines.
2818
+ *
2819
+ * **Axis types**: This function is applicable to to all axes types.
2820
+ * See @ref ww_charts_axes.
848
2821
  */
849
- void chart_axis_set_line(lxw_chart_axis *axis, lxw_chart_line *line);
2822
+ void chart_axis_major_gridlines_set_line(lxw_chart_axis *axis,
2823
+ lxw_chart_line *line);
850
2824
 
851
2825
  /**
852
- * @brief Set the fill properties for a chart axis.
2826
+ * @brief Set the line properties for the chart axis minor gridlines.
853
2827
  *
854
2828
  * @param axis A pointer to a chart #lxw_chart_axis object.
855
- * @param fill A #lxw_chart_fill struct.
856
- *
857
- * Set the fill properties of a chart axis:
858
- *
859
- * @code
860
- * lxw_chart_fill fill = {.color = LXW_COLOR_YELLOW};
2829
+ * @param line A #lxw_chart_line struct.
861
2830
  *
862
- * chart_axis_set_fill(chart->y_axis, &fill);
863
- * @endcode
2831
+ * Format the line properties of the minor gridlines of a chart, see the
2832
+ * example above.
864
2833
  *
865
- * @image html chart_axis_set_fill.png
2834
+ * For more information see @ref chart_lines.
866
2835
  *
867
- * For more information see @ref chart_fills.
2836
+ * **Axis types**: This function is applicable to to all axes types.
2837
+ * See @ref ww_charts_axes.
868
2838
  */
869
- void chart_axis_set_fill(lxw_chart_axis *axis, lxw_chart_fill *fill);
2839
+ void chart_axis_minor_gridlines_set_line(lxw_chart_axis *axis,
2840
+ lxw_chart_line *line);
870
2841
 
871
2842
  /**
872
2843
  * @brief Set the title of the chart.
@@ -1040,6 +3011,124 @@ void chart_legend_set_font(lxw_chart *chart, lxw_chart_font *font);
1040
3011
  lxw_error chart_legend_delete_series(lxw_chart *chart,
1041
3012
  int16_t delete_series[]);
1042
3013
 
3014
+ /**
3015
+ * @brief Set the line properties for a chartarea.
3016
+ *
3017
+ * @param chart Pointer to a lxw_chart instance to be configured.
3018
+ * @param line A #lxw_chart_line struct.
3019
+ *
3020
+ * Set the line/border properties of a chartarea. In Excel the chartarea
3021
+ * is the background area behind the chart:
3022
+ *
3023
+ * @code
3024
+ * lxw_chart_line line = {.none = LXW_TRUE};
3025
+ * lxw_chart_fill fill = {.color = LXW_COLOR_RED};
3026
+ *
3027
+ * chart_chartarea_set_line(chart, &line);
3028
+ * chart_chartarea_set_fill(chart, &fill);
3029
+ * @endcode
3030
+ *
3031
+ * @image html chart_chartarea.png
3032
+ *
3033
+ * For more information see @ref chart_lines.
3034
+ */
3035
+ void chart_chartarea_set_line(lxw_chart *chart, lxw_chart_line *line);
3036
+
3037
+ /**
3038
+ * @brief Set the fill properties for a chartarea.
3039
+ *
3040
+ * @param chart Pointer to a lxw_chart instance to be configured.
3041
+ * @param fill A #lxw_chart_fill struct.
3042
+ *
3043
+ * Set the fill properties of a chartarea:
3044
+ *
3045
+ * @code
3046
+ * chart_chartarea_set_fill(chart, &fill);
3047
+ * @endcode
3048
+ *
3049
+ * See the example and image above.
3050
+ *
3051
+ * For more information see @ref chart_fills.
3052
+ */
3053
+ void chart_chartarea_set_fill(lxw_chart *chart, lxw_chart_fill *fill);
3054
+
3055
+ /**
3056
+ * @brief Set the pattern properties for a chartarea.
3057
+ *
3058
+ * @param chart Pointer to a lxw_chart instance to be configured.
3059
+ * @param pattern A #lxw_chart_pattern struct.
3060
+ *
3061
+ * Set the pattern properties of a chartarea:
3062
+ *
3063
+ * @code
3064
+ * chart_chartarea_set_pattern(series1, &pattern);
3065
+ * @endcode
3066
+ *
3067
+ * For more information see #lxw_chart_pattern_type and @ref chart_patterns.
3068
+ */
3069
+ void chart_chartarea_set_pattern(lxw_chart *chart,
3070
+ lxw_chart_pattern *pattern);
3071
+
3072
+ /**
3073
+ * @brief Set the line properties for a plotarea.
3074
+ *
3075
+ * @param chart Pointer to a lxw_chart instance to be configured.
3076
+ * @param line A #lxw_chart_line struct.
3077
+ *
3078
+ * Set the line/border properties of a plotarea. In Excel the plotarea is
3079
+ * the area between the axes on which the chart series are plotted:
3080
+ *
3081
+ * @code
3082
+ * lxw_chart_line line = {.color = LXW_COLOR_RED,
3083
+ * .width = 2,
3084
+ * .dash_type = LXW_CHART_LINE_DASH_DASH};
3085
+ * lxw_chart_fill fill = {.color = 0xFFFFC2};
3086
+ *
3087
+ * chart_plotarea_set_line(chart, &line);
3088
+ * chart_plotarea_set_fill(chart, &fill);
3089
+ *
3090
+ * @endcode
3091
+ *
3092
+ * @image html chart_plotarea.png
3093
+ *
3094
+ * For more information see @ref chart_lines.
3095
+ */
3096
+ void chart_plotarea_set_line(lxw_chart *chart, lxw_chart_line *line);
3097
+
3098
+ /**
3099
+ * @brief Set the fill properties for a plotarea.
3100
+ *
3101
+ * @param chart Pointer to a lxw_chart instance to be configured.
3102
+ * @param fill A #lxw_chart_fill struct.
3103
+ *
3104
+ * Set the fill properties of a plotarea:
3105
+ *
3106
+ * @code
3107
+ * chart_plotarea_set_fill(chart, &fill);
3108
+ * @endcode
3109
+ *
3110
+ * See the example and image above.
3111
+ *
3112
+ * For more information see @ref chart_fills.
3113
+ */
3114
+ void chart_plotarea_set_fill(lxw_chart *chart, lxw_chart_fill *fill);
3115
+
3116
+ /**
3117
+ * @brief Set the pattern properties for a plotarea.
3118
+ *
3119
+ * @param chart Pointer to a lxw_chart instance to be configured.
3120
+ * @param pattern A #lxw_chart_pattern struct.
3121
+ *
3122
+ * Set the pattern properties of a plotarea:
3123
+ *
3124
+ * @code
3125
+ * chart_plotarea_set_pattern(series1, &pattern);
3126
+ * @endcode
3127
+ *
3128
+ * For more information see #lxw_chart_pattern_type and @ref chart_patterns.
3129
+ */
3130
+ void chart_plotarea_set_pattern(lxw_chart *chart, lxw_chart_pattern *pattern);
3131
+
1043
3132
  /**
1044
3133
  * @brief Set the chart style type.
1045
3134
  *
@@ -1066,15 +3155,310 @@ lxw_error chart_legend_delete_series(lxw_chart *chart,
1066
3155
  * to the base chart type. They can not be defined by the `chart_set_style()``
1067
3156
  * function.
1068
3157
  *
1069
- *
1070
3158
  */
1071
3159
  void chart_set_style(lxw_chart *chart, uint8_t style_id);
1072
3160
 
3161
+ /**
3162
+ * @brief Turn on a data table below the horizontal axis.
3163
+ *
3164
+ * @param chart Pointer to a lxw_chart instance to be configured.
3165
+ *
3166
+ * The `%chart_set_table()` function adds a data table below the horizontal
3167
+ * axis with the data used to plot the chart:
3168
+ *
3169
+ * @code
3170
+ * // Turn on the data table with default options.
3171
+ * chart_set_table(chart);
3172
+ * @endcode
3173
+ *
3174
+ * @image html chart_data_table1.png
3175
+ *
3176
+ * The data table can only be shown with Bar, Column, Line and Area charts.
3177
+ *
3178
+ */
3179
+ void chart_set_table(lxw_chart *chart);
3180
+
3181
+ /**
3182
+ * @brief Turn on/off grid options for a chart data table.
3183
+ *
3184
+ * @param chart Pointer to a lxw_chart instance to be configured.
3185
+ * @param horizontal Turn on/off the horizontal grid lines in the table.
3186
+ * @param vertical Turn on/off the vertical grid lines in the table.
3187
+ * @param outline Turn on/off the outline lines in the table.
3188
+ * @param legend_keys Turn on/off the legend keys in the table.
3189
+ *
3190
+ * The `%chart_set_table_grid()` function turns on/off grid options for a
3191
+ * chart data table. The data table grid options in Excel are shown in the
3192
+ * dialog below:
3193
+ *
3194
+ * @image html chart_data_table3.png
3195
+ *
3196
+ * These options can be passed to the `%chart_set_table_grid()` function.
3197
+ * The values for a default chart are:
3198
+ *
3199
+ * - `horizontal`: On.
3200
+ * - `vertical`: On.
3201
+ * - `outline`: On.
3202
+ * - `legend_keys`: Off.
3203
+ *
3204
+ * Example:
3205
+ *
3206
+ * @code
3207
+ * // Turn on the data table with default options.
3208
+ * chart_set_table(chart);
3209
+ *
3210
+ * // Turn on all grid lines and the grid legend.
3211
+ * chart_set_table_grid(chart, LXW_TRUE, LXW_TRUE, LXW_TRUE, LXW_TRUE);
3212
+ *
3213
+ * // Turn off the legend since it is show in the table.
3214
+ * chart_legend_set_position(chart, LXW_CHART_LEGEND_NONE);
3215
+ *
3216
+ * @endcode
3217
+ *
3218
+ * @image html chart_data_table2.png
3219
+ *
3220
+ * The data table can only be shown with Bar, Column, Line and Area charts.
3221
+ *
3222
+ */
3223
+ void chart_set_table_grid(lxw_chart *chart, uint8_t horizontal,
3224
+ uint8_t vertical, uint8_t outline,
3225
+ uint8_t legend_keys);
3226
+
3227
+ void chart_set_table_font(lxw_chart *chart, lxw_chart_font *font);
3228
+
3229
+ /**
3230
+ * @brief Turn on up-down bars for the chart.
3231
+ *
3232
+ * @param chart Pointer to a lxw_chart instance to be configured.
3233
+ *
3234
+ * The `%chart_set_up_down_bars()` function adds Up-Down bars to Line charts
3235
+ * to indicate the difference between the first and last data series:
3236
+ *
3237
+ * @code
3238
+ * chart_set_up_down_bars(chart);
3239
+ * @endcode
3240
+ *
3241
+ * @image html chart_data_tools4.png
3242
+ *
3243
+ * Up-Down bars are only available in Line charts. By default Up-Down bars are
3244
+ * black and white like in the above example. To format the border or fill
3245
+ * of the bars see the `chart_set_up_down_bars_format()` function below.
3246
+ */
3247
+ void chart_set_up_down_bars(lxw_chart *chart);
3248
+
3249
+ /**
3250
+ * @brief Turn on up-down bars for the chart, with formatting.
3251
+ *
3252
+ * @param chart Pointer to a lxw_chart instance to be configured.
3253
+ * @param up_bar_line A #lxw_chart_line struct for the up-bar border.
3254
+ * @param up_bar_fill A #lxw_chart_fill struct for the up-bar fill.
3255
+ * @param down_bar_line A #lxw_chart_line struct for the down-bar border.
3256
+ * @param down_bar_fill A #lxw_chart_fill struct for the down-bar fill.
3257
+ *
3258
+ * The `%chart_set_up_down_bars_format()` function adds Up-Down bars to Line
3259
+ * charts to indicate the difference between the first and last data series.
3260
+ * It also allows the up and down bars to be formatted:
3261
+ *
3262
+ * @code
3263
+ * lxw_chart_line line = {.color = LXW_COLOR_BLACK};
3264
+ * lxw_chart_fill up_fill = {.color = 0x00B050};
3265
+ * lxw_chart_fill down_fill = {.color = LXW_COLOR_RED};
3266
+ *
3267
+ * chart_set_up_down_bars_format(chart, &line, &up_fill, &line, &down_fill);
3268
+ * @endcode
3269
+ *
3270
+ * @image html chart_up_down_bars.png
3271
+ *
3272
+ * Up-Down bars are only available in Line charts.
3273
+ * For more format information see @ref chart_lines and @ref chart_fills.
3274
+ */
3275
+ void chart_set_up_down_bars_format(lxw_chart *chart,
3276
+ lxw_chart_line *up_bar_line,
3277
+ lxw_chart_fill *up_bar_fill,
3278
+ lxw_chart_line *down_bar_line,
3279
+ lxw_chart_fill *down_bar_fill);
3280
+
3281
+ /**
3282
+ * @brief Turn on and format Drop Lines for a chart.
3283
+ *
3284
+ * @param chart Pointer to a lxw_chart instance to be configured.
3285
+ * @param line A #lxw_chart_line struct.
3286
+ *
3287
+ * The `%chart_set_drop_lines()` function adds Drop Lines to charts to
3288
+ * show the Category value of points in the data:
3289
+ *
3290
+ * @code
3291
+ * chart_set_drop_lines(chart, NULL);
3292
+ * @endcode
3293
+ *
3294
+ * @image html chart_data_tools6.png
3295
+ *
3296
+ * It is possible to format the Drop Line line properties if required:
3297
+ *
3298
+ * @code
3299
+ * lxw_chart_line line = {.color = LXW_COLOR_RED,
3300
+ * .dash_type = LXW_CHART_LINE_DASH_SQUARE_DOT};
3301
+ *
3302
+ * chart_set_drop_lines(chart, &line);
3303
+ * @endcode
3304
+ *
3305
+ * Drop Lines are only available in Line and Area charts.
3306
+ * For more format information see @ref chart_lines.
3307
+ */
3308
+ void chart_set_drop_lines(lxw_chart *chart, lxw_chart_line *line);
3309
+
3310
+ /**
3311
+ * @brief Turn on and format high-low Lines for a chart.
3312
+ *
3313
+ * @param chart Pointer to a lxw_chart instance to be configured.
3314
+ * @param line A #lxw_chart_line struct.
3315
+ *
3316
+ * The `%chart_set_high_low_lines()` function adds High-Low Lines to charts
3317
+ * to show the Category value of points in the data:
3318
+ *
3319
+ * @code
3320
+ * chart_set_high_low_lines(chart, NULL);
3321
+ * @endcode
3322
+ *
3323
+ * @image html chart_data_tools5.png
3324
+ *
3325
+ * It is possible to format the High-Low Line line properties if required:
3326
+ *
3327
+ * @code
3328
+ * lxw_chart_line line = {.color = LXW_COLOR_RED,
3329
+ * .dash_type = LXW_CHART_LINE_DASH_SQUARE_DOT};
3330
+ *
3331
+ * chart_set_high_low_lines(chart, &line);
3332
+ * @endcode
3333
+ *
3334
+ * High-Low Lines are only available in Line charts.
3335
+ * For more format information see @ref chart_lines.
3336
+ */
3337
+ void chart_set_high_low_lines(lxw_chart *chart, lxw_chart_line *line);
3338
+
3339
+ /**
3340
+ * @brief Set the overlap between series in a Bar/Column chart.
3341
+ *
3342
+ * @param chart Pointer to a lxw_chart instance to be configured.
3343
+ * @param overlap The overlap between the series. -100 to 100.
3344
+ *
3345
+ * The `%chart_set_series_overlap()` function sets the overlap between series
3346
+ * in Bar and Column charts.
3347
+ *
3348
+ * @code
3349
+ * chart_set_series_overlap(chart, -50);
3350
+ * @endcode
3351
+ *
3352
+ * @image html chart_overlap.png
3353
+ *
3354
+ * The overlap value must be in the range `0 <= overlap <= 500`.
3355
+ * The default value is 0.
3356
+ *
3357
+ * This option is only available for Bar/Column charts.
3358
+ */
3359
+ void chart_set_series_overlap(lxw_chart *chart, int8_t overlap);
3360
+
3361
+ /**
3362
+ * @brief Set the gap between series in a Bar/Column chart.
3363
+ *
3364
+ * @param chart Pointer to a lxw_chart instance to be configured.
3365
+ * @param gap The gap between the series. 0 to 500.
3366
+ *
3367
+ * The `%chart_set_series_gap()` function sets the gap between series in
3368
+ * Bar and Column charts.
3369
+ *
3370
+ * @code
3371
+ * chart_set_series_gap(chart, 400);
3372
+ * @endcode
3373
+ *
3374
+ * @image html chart_gap.png
3375
+ *
3376
+ * The gap value must be in the range `0 <= gap <= 500`. The default value
3377
+ * is 150.
3378
+ *
3379
+ * This option is only available for Bar/Column charts.
3380
+ */
3381
+ void chart_set_series_gap(lxw_chart *chart, uint16_t gap);
3382
+
3383
+ /**
3384
+ * @brief Set the option for displaying blank data in a chart.
3385
+ *
3386
+ * @param chart Pointer to a lxw_chart instance to be configured.
3387
+ * @param option The display option. A #lxw_chart_blank option.
3388
+ *
3389
+ * The `%chart_show_blanks_as()` function controls how blank data is displayed
3390
+ * in a chart:
3391
+ *
3392
+ * @code
3393
+ * chart_show_blanks_as(chart, LXW_CHART_BLANKS_AS_CONNECTED);
3394
+ * @endcode
3395
+ *
3396
+ * The `option` parameter can have one of the following values:
3397
+ *
3398
+ * - #LXW_CHART_BLANKS_AS_GAP: Show empty chart cells as gaps in the data.
3399
+ * This is the default option for Excel charts.
3400
+ * - #LXW_CHART_BLANKS_AS_ZERO: Show empty chart cells as zeros.
3401
+ * - #LXW_CHART_BLANKS_AS_CONNECTED: Show empty chart cells as connected.
3402
+ * Only for charts with lines.
3403
+ */
3404
+ void chart_show_blanks_as(lxw_chart *chart, uint8_t option);
3405
+
3406
+ /**
3407
+ * @brief Display data on charts from hidden rows or columns.
3408
+ *
3409
+ * @param chart Pointer to a lxw_chart instance to be configured.
3410
+ *
3411
+ * Display data that is in hidden rows or columns on the chart:
3412
+ *
3413
+ * @code
3414
+ * chart_show_hidden_data(chart);
3415
+ * @endcode
3416
+ */
3417
+ void chart_show_hidden_data(lxw_chart *chart);
3418
+
3419
+ /**
3420
+ * @brief Set the Pie/Doughnut chart rotation.
3421
+ *
3422
+ * @param chart Pointer to a lxw_chart instance to be configured.
3423
+ * @param rotation The angle of rotation.
3424
+ *
3425
+ * The `chart_set_rotation()` function is used to set the rotation of the
3426
+ * first segment of a Pie/Doughnut chart. This has the effect of rotating
3427
+ * the entire chart:
3428
+ *
3429
+ * @code
3430
+ * chart_set_rotation(chart, 28);
3431
+ * @endcode
3432
+ *
3433
+ * The angle of rotation must be in the range `0 <= rotation <= 360`.
3434
+ *
3435
+ * This option is only available for Pie/Doughnut charts.
3436
+ *
3437
+ */
1073
3438
  void chart_set_rotation(lxw_chart *chart, uint16_t rotation);
3439
+
3440
+ /**
3441
+ * @brief Set the Doughnut chart hole size.
3442
+ *
3443
+ * @param chart Pointer to a lxw_chart instance to be configured.
3444
+ * @param size The hole size as a percentage.
3445
+ *
3446
+ * The `chart_set_hole_size()` function is used to set the hole size of a
3447
+ * Doughnut chart:
3448
+ *
3449
+ * @code
3450
+ * chart_set_hole_size(chart, 33);
3451
+ * @endcode
3452
+ *
3453
+ * The hole size must be in the range `10 <= size <= 90`.
3454
+ *
3455
+ * This option is only available for Doughnut charts.
3456
+ *
3457
+ */
1074
3458
  void chart_set_hole_size(lxw_chart *chart, uint8_t size);
1075
3459
 
1076
- int lxw_chart_add_data_cache(lxw_series_range *range, uint8_t *data,
1077
- uint16_t rows, uint8_t cols, uint8_t col);
3460
+ lxw_error lxw_chart_add_data_cache(lxw_series_range *range, uint8_t *data,
3461
+ uint16_t rows, uint8_t cols, uint8_t col);
1078
3462
 
1079
3463
  /* Declarations required for unit testing. */
1080
3464
  #ifdef TESTING