BoxPlotSeries.js 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616
  1. /* *
  2. *
  3. * (c) 2010-2020 Torstein Honsi
  4. *
  5. * License: www.highcharts.com/license
  6. *
  7. * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
  8. *
  9. * */
  10. 'use strict';
  11. import H from '../parts/Globals.js';
  12. import U from '../parts/Utilities.js';
  13. var pick = U.pick, seriesType = U.seriesType;
  14. import '../parts/Options.js';
  15. var noop = H.noop, seriesTypes = H.seriesTypes;
  16. /**
  17. * The boxplot series type.
  18. *
  19. * @private
  20. * @class
  21. * @name Highcharts.seriesTypes#boxplot
  22. *
  23. * @augments Highcharts.Series
  24. */
  25. /**
  26. * A box plot is a convenient way of depicting groups of data through their
  27. * five-number summaries: the smallest observation (sample minimum), lower
  28. * quartile (Q1), median (Q2), upper quartile (Q3), and largest observation
  29. * (sample maximum).
  30. *
  31. * @sample highcharts/demo/box-plot/
  32. * Box plot
  33. *
  34. * @extends plotOptions.column
  35. * @excluding borderColor, borderRadius, borderWidth, groupZPadding, states
  36. * @product highcharts
  37. * @requires highcharts-more
  38. * @optionparent plotOptions.boxplot
  39. */
  40. seriesType('boxplot', 'column', {
  41. threshold: null,
  42. tooltip: {
  43. pointFormat: '<span style="color:{point.color}">\u25CF</span> <b> ' +
  44. '{series.name}</b><br/>' +
  45. 'Maximum: {point.high}<br/>' +
  46. 'Upper quartile: {point.q3}<br/>' +
  47. 'Median: {point.median}<br/>' +
  48. 'Lower quartile: {point.q1}<br/>' +
  49. 'Minimum: {point.low}<br/>'
  50. },
  51. /**
  52. * The length of the whiskers, the horizontal lines marking low and
  53. * high values. It can be a numerical pixel value, or a percentage
  54. * value of the box width. Set `0` to disable whiskers.
  55. *
  56. * @sample {highcharts} highcharts/plotoptions/box-plot-styling/
  57. * True by default
  58. *
  59. * @type {number|string}
  60. * @since 3.0
  61. * @product highcharts
  62. */
  63. whiskerLength: '50%',
  64. /**
  65. * The fill color of the box.
  66. *
  67. * In styled mode, the fill color can be set with the
  68. * `.highcharts-boxplot-box` class.
  69. *
  70. * @sample {highcharts} highcharts/plotoptions/box-plot-styling/
  71. * Box plot styling
  72. *
  73. * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
  74. * @default #ffffff
  75. * @since 3.0
  76. * @product highcharts
  77. */
  78. fillColor: '#ffffff',
  79. /**
  80. * The width of the line surrounding the box. If any of
  81. * [stemWidth](#plotOptions.boxplot.stemWidth),
  82. * [medianWidth](#plotOptions.boxplot.medianWidth)
  83. * or [whiskerWidth](#plotOptions.boxplot.whiskerWidth) are `null`,
  84. * the lineWidth also applies to these lines.
  85. *
  86. * @sample {highcharts} highcharts/plotoptions/box-plot-styling/
  87. * Box plot styling
  88. * @sample {highcharts} highcharts/plotoptions/error-bar-styling/
  89. * Error bar styling
  90. *
  91. * @since 3.0
  92. * @product highcharts
  93. */
  94. lineWidth: 1,
  95. /**
  96. * The color of the median line. If `undefined`, the general series color
  97. * applies.
  98. *
  99. * In styled mode, the median stroke width can be set with the
  100. * `.highcharts-boxplot-median` class.
  101. *
  102. * @sample {highcharts} highcharts/plotoptions/box-plot-styling/
  103. * Box plot styling
  104. * @sample {highcharts} highcharts/css/boxplot/
  105. * Box plot in styled mode
  106. * @sample {highcharts} highcharts/plotoptions/error-bar-styling/
  107. * Error bar styling
  108. *
  109. * @type {Highcharts.ColorString|Highcharts.GradientColorObject}
  110. * @since 3.0
  111. * @product highcharts
  112. * @apioption plotOptions.boxplot.medianColor
  113. */
  114. /**
  115. * The pixel width of the median line. If `null`, the
  116. * [lineWidth](#plotOptions.boxplot.lineWidth) is used.
  117. *
  118. * In styled mode, the median stroke width can be set with the
  119. * `.highcharts-boxplot-median` class.
  120. *
  121. * @sample {highcharts} highcharts/plotoptions/box-plot-styling/
  122. * Box plot styling
  123. * @sample {highcharts} highcharts/css/boxplot/
  124. * Box plot in styled mode
  125. *
  126. * @type {number|null}
  127. * @since 3.0
  128. * @product highcharts
  129. */
  130. medianWidth: 2,
  131. /*
  132. // States are not working and are removed from docs.
  133. // Refer to: #2340
  134. states: {
  135. hover: {
  136. brightness: -0.3
  137. }
  138. },
  139. /**
  140. * The color of the stem, the vertical line extending from the box to
  141. * the whiskers. If `undefined`, the series color is used.
  142. *
  143. * In styled mode, the stem stroke can be set with the
  144. * `.highcharts-boxplot-stem` class.
  145. *
  146. * @sample {highcharts} highcharts/plotoptions/box-plot-styling/
  147. * Box plot styling
  148. * @sample {highcharts} highcharts/css/boxplot/
  149. * Box plot in styled mode
  150. * @sample {highcharts} highcharts/plotoptions/error-bar-styling/
  151. * Error bar styling
  152. *
  153. * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
  154. * @since 3.0
  155. * @product highcharts
  156. * @apioption plotOptions.boxplot.stemColor
  157. */
  158. /**
  159. * The dash style of the box.
  160. *
  161. * @sample {highcharts} highcharts/plotoptions/box-plot-styling/
  162. * Box plot styling
  163. * @sample {highcharts} highcharts/css/boxplot/
  164. * Box plot in styled mode
  165. *
  166. * @type {Highcharts.DashStyleValue}
  167. * @default Solid
  168. * @since 8.1.0
  169. * @product highcharts
  170. * @apioption plotOptions.boxplot.boxDashStyle
  171. */
  172. /**
  173. * The dash style of the median.
  174. *
  175. * @sample {highcharts} highcharts/plotoptions/box-plot-styling/
  176. * Box plot styling
  177. * @sample {highcharts} highcharts/css/boxplot/
  178. * Box plot in styled mode
  179. *
  180. * @type {Highcharts.DashStyleValue}
  181. * @default Solid
  182. * @since 8.1.0
  183. * @product highcharts
  184. * @apioption plotOptions.boxplot.medianDashStyle
  185. */
  186. /**
  187. * The dash style of the stem, the vertical line extending from the
  188. * box to the whiskers.
  189. *
  190. * @sample {highcharts} highcharts/plotoptions/box-plot-styling/
  191. * Box plot styling
  192. * @sample {highcharts} highcharts/css/boxplot/
  193. * Box plot in styled mode
  194. * @sample {highcharts} highcharts/plotoptions/error-bar-styling/
  195. * Error bar styling
  196. *
  197. * @type {Highcharts.DashStyleValue}
  198. * @default Solid
  199. * @since 3.0
  200. * @product highcharts
  201. * @apioption plotOptions.boxplot.stemDashStyle
  202. */
  203. /**
  204. * The dash style of the whiskers.
  205. *
  206. * @sample {highcharts} highcharts/plotoptions/box-plot-styling/
  207. * Box plot styling
  208. * @sample {highcharts} highcharts/css/boxplot/
  209. * Box plot in styled mode
  210. *
  211. * @type {Highcharts.DashStyleValue}
  212. * @default Solid
  213. * @since 8.1.0
  214. * @product highcharts
  215. * @apioption plotOptions.boxplot.whiskerDashStyle
  216. */
  217. /**
  218. * The width of the stem, the vertical line extending from the box to
  219. * the whiskers. If `undefined`, the width is inherited from the
  220. * [lineWidth](#plotOptions.boxplot.lineWidth) option.
  221. *
  222. * In styled mode, the stem stroke width can be set with the
  223. * `.highcharts-boxplot-stem` class.
  224. *
  225. * @sample {highcharts} highcharts/plotoptions/box-plot-styling/
  226. * Box plot styling
  227. * @sample {highcharts} highcharts/css/boxplot/
  228. * Box plot in styled mode
  229. * @sample {highcharts} highcharts/plotoptions/error-bar-styling/
  230. * Error bar styling
  231. *
  232. * @type {number}
  233. * @since 3.0
  234. * @product highcharts
  235. * @apioption plotOptions.boxplot.stemWidth
  236. */
  237. /**
  238. * @default high
  239. * @apioption plotOptions.boxplot.colorKey
  240. */
  241. /**
  242. * The color of the whiskers, the horizontal lines marking low and high
  243. * values. When `undefined`, the general series color is used.
  244. *
  245. * In styled mode, the whisker stroke can be set with the
  246. * `.highcharts-boxplot-whisker` class .
  247. *
  248. * @sample {highcharts} highcharts/plotoptions/box-plot-styling/
  249. * Box plot styling
  250. * @sample {highcharts} highcharts/css/boxplot/
  251. * Box plot in styled mode
  252. *
  253. * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
  254. * @since 3.0
  255. * @product highcharts
  256. * @apioption plotOptions.boxplot.whiskerColor
  257. */
  258. /**
  259. * The line width of the whiskers, the horizontal lines marking low and
  260. * high values. When `undefined`, the general
  261. * [lineWidth](#plotOptions.boxplot.lineWidth) applies.
  262. *
  263. * In styled mode, the whisker stroke width can be set with the
  264. * `.highcharts-boxplot-whisker` class.
  265. *
  266. * @sample {highcharts} highcharts/plotoptions/box-plot-styling/
  267. * Box plot styling
  268. * @sample {highcharts} highcharts/css/boxplot/
  269. * Box plot in styled mode
  270. *
  271. * @since 3.0
  272. * @product highcharts
  273. */
  274. whiskerWidth: 2
  275. }, /** @lends Highcharts.seriesTypes.boxplot */ {
  276. // array point configs are mapped to this
  277. pointArrayMap: ['low', 'q1', 'median', 'q3', 'high'],
  278. // return a plain array for speedy calculation
  279. toYData: function (point) {
  280. return [point.low, point.q1, point.median, point.q3, point.high];
  281. },
  282. // defines the top of the tracker
  283. pointValKey: 'high',
  284. // Get presentational attributes
  285. pointAttribs: function () {
  286. // No attributes should be set on point.graphic which is the group
  287. return {};
  288. },
  289. // Disable data labels for box plot
  290. drawDataLabels: noop,
  291. // Translate data points from raw values x and y to plotX and plotY
  292. translate: function () {
  293. var series = this, yAxis = series.yAxis, pointArrayMap = series.pointArrayMap;
  294. seriesTypes.column.prototype.translate.apply(series);
  295. // do the translation on each point dimension
  296. series.points.forEach(function (point) {
  297. pointArrayMap.forEach(function (key) {
  298. if (point[key] !== null) {
  299. point[key + 'Plot'] = yAxis.translate(point[key], 0, 1, 0, 1);
  300. }
  301. });
  302. point.plotHigh = point.highPlot; // For data label validation
  303. });
  304. },
  305. // eslint-disable-next-line valid-jsdoc
  306. /**
  307. * Draw the data points
  308. * @private
  309. */
  310. drawPoints: function () {
  311. var series = this, points = series.points, options = series.options, chart = series.chart, renderer = chart.renderer, q1Plot, q3Plot, highPlot, lowPlot, medianPlot, medianPath, crispCorr, crispX = 0, boxPath, width, left, right, halfWidth,
  312. // error bar inherits this series type but doesn't do quartiles
  313. doQuartiles = series.doQuartiles !== false, pointWiskerLength, whiskerLength = series.options.whiskerLength;
  314. points.forEach(function (point) {
  315. var graphic = point.graphic, verb = graphic ? 'animate' : 'attr', shapeArgs = point.shapeArgs, boxAttr = {}, stemAttr = {}, whiskersAttr = {}, medianAttr = {}, color = point.color || series.color;
  316. if (typeof point.plotY !== 'undefined') {
  317. // crisp vector coordinates
  318. width = Math.round(shapeArgs.width);
  319. left = Math.floor(shapeArgs.x);
  320. right = left + width;
  321. halfWidth = Math.round(width / 2);
  322. q1Plot = Math.floor(doQuartiles ? point.q1Plot : point.lowPlot);
  323. q3Plot = Math.floor(doQuartiles ? point.q3Plot : point.lowPlot);
  324. highPlot = Math.floor(point.highPlot);
  325. lowPlot = Math.floor(point.lowPlot);
  326. if (!graphic) {
  327. point.graphic = graphic = renderer.g('point')
  328. .add(series.group);
  329. point.stem = renderer.path()
  330. .addClass('highcharts-boxplot-stem')
  331. .add(graphic);
  332. if (whiskerLength) {
  333. point.whiskers = renderer.path()
  334. .addClass('highcharts-boxplot-whisker')
  335. .add(graphic);
  336. }
  337. if (doQuartiles) {
  338. point.box = renderer.path(boxPath)
  339. .addClass('highcharts-boxplot-box')
  340. .add(graphic);
  341. }
  342. point.medianShape = renderer.path(medianPath)
  343. .addClass('highcharts-boxplot-median')
  344. .add(graphic);
  345. }
  346. if (!chart.styledMode) {
  347. // Stem attributes
  348. stemAttr.stroke =
  349. point.stemColor || options.stemColor || color;
  350. stemAttr['stroke-width'] = pick(point.stemWidth, options.stemWidth, options.lineWidth);
  351. stemAttr.dashstyle = (point.stemDashStyle ||
  352. options.stemDashStyle ||
  353. options.dashStyle);
  354. point.stem.attr(stemAttr);
  355. // Whiskers attributes
  356. if (whiskerLength) {
  357. whiskersAttr.stroke = (point.whiskerColor ||
  358. options.whiskerColor ||
  359. color);
  360. whiskersAttr['stroke-width'] = pick(point.whiskerWidth, options.whiskerWidth, options.lineWidth);
  361. whiskersAttr.dashstyle = (point.whiskerDashStyle ||
  362. options.whiskerDashStyle ||
  363. options.dashStyle);
  364. point.whiskers.attr(whiskersAttr);
  365. }
  366. if (doQuartiles) {
  367. boxAttr.fill = (point.fillColor ||
  368. options.fillColor ||
  369. color);
  370. boxAttr.stroke = options.lineColor || color;
  371. boxAttr['stroke-width'] = options.lineWidth || 0;
  372. boxAttr.dashstyle = (point.boxDashStyle ||
  373. options.boxDashStyle ||
  374. options.dashStyle);
  375. point.box.attr(boxAttr);
  376. }
  377. // Median attributes
  378. medianAttr.stroke = (point.medianColor ||
  379. options.medianColor ||
  380. color);
  381. medianAttr['stroke-width'] = pick(point.medianWidth, options.medianWidth, options.lineWidth);
  382. medianAttr.dashstyle = (point.medianDashStyle ||
  383. options.medianDashStyle ||
  384. options.dashStyle);
  385. point.medianShape.attr(medianAttr);
  386. }
  387. var d = void 0;
  388. // The stem
  389. crispCorr = (point.stem.strokeWidth() % 2) / 2;
  390. crispX = left + halfWidth + crispCorr;
  391. d = [
  392. // stem up
  393. ['M', crispX, q3Plot],
  394. ['L', crispX, highPlot],
  395. // stem down
  396. ['M', crispX, q1Plot],
  397. ['L', crispX, lowPlot]
  398. ];
  399. point.stem[verb]({ d: d });
  400. // The box
  401. if (doQuartiles) {
  402. crispCorr = (point.box.strokeWidth() % 2) / 2;
  403. q1Plot = Math.floor(q1Plot) + crispCorr;
  404. q3Plot = Math.floor(q3Plot) + crispCorr;
  405. left += crispCorr;
  406. right += crispCorr;
  407. d = [
  408. ['M', left, q3Plot],
  409. ['L', left, q1Plot],
  410. ['L', right, q1Plot],
  411. ['L', right, q3Plot],
  412. ['L', left, q3Plot],
  413. ['Z']
  414. ];
  415. point.box[verb]({ d: d });
  416. }
  417. // The whiskers
  418. if (whiskerLength) {
  419. crispCorr = (point.whiskers.strokeWidth() % 2) / 2;
  420. highPlot = highPlot + crispCorr;
  421. lowPlot = lowPlot + crispCorr;
  422. pointWiskerLength = (/%$/).test(whiskerLength) ?
  423. halfWidth * parseFloat(whiskerLength) / 100 :
  424. whiskerLength / 2;
  425. d = [
  426. // High whisker
  427. ['M', crispX - pointWiskerLength, highPlot],
  428. ['L', crispX + pointWiskerLength, highPlot],
  429. // Low whisker
  430. ['M', crispX - pointWiskerLength, lowPlot],
  431. ['L', crispX + pointWiskerLength, lowPlot]
  432. ];
  433. point.whiskers[verb]({ d: d });
  434. }
  435. // The median
  436. medianPlot = Math.round(point.medianPlot);
  437. crispCorr = (point.medianShape.strokeWidth() % 2) / 2;
  438. medianPlot = medianPlot + crispCorr;
  439. d = [
  440. ['M', left, medianPlot],
  441. ['L', right, medianPlot]
  442. ];
  443. point.medianShape[verb]({ d: d });
  444. }
  445. });
  446. },
  447. setStackedPoints: noop // #3890
  448. });
  449. /**
  450. * A `boxplot` series. If the [type](#series.boxplot.type) option is
  451. * not specified, it is inherited from [chart.type](#chart.type).
  452. *
  453. * @extends series,plotOptions.boxplot
  454. * @excluding dataParser, dataURL, marker, stack, stacking, states
  455. * @product highcharts
  456. * @requires highcharts-more
  457. * @apioption series.boxplot
  458. */
  459. /**
  460. * An array of data points for the series. For the `boxplot` series
  461. * type, points can be given in the following ways:
  462. *
  463. * 1. An array of arrays with 6 or 5 values. In this case, the values correspond
  464. * to `x,low,q1,median,q3,high`. If the first value is a string, it is
  465. * applied as the name of the point, and the `x` value is inferred. The `x`
  466. * value can also be omitted, in which case the inner arrays should be of
  467. * length 5. Then the `x` value is automatically calculated, either starting
  468. * at 0 and incremented by 1, or from `pointStart` and `pointInterval` given
  469. * in the series options.
  470. * ```js
  471. * data: [
  472. * [0, 3, 0, 10, 3, 5],
  473. * [1, 7, 8, 7, 2, 9],
  474. * [2, 6, 9, 5, 1, 3]
  475. * ]
  476. * ```
  477. *
  478. * 2. An array of objects with named values. The following snippet shows only a
  479. * few settings, see the complete options set below. If the total number of
  480. * data points exceeds the series'
  481. * [turboThreshold](#series.boxplot.turboThreshold), this option is not
  482. * available.
  483. * ```js
  484. * data: [{
  485. * x: 1,
  486. * low: 4,
  487. * q1: 9,
  488. * median: 9,
  489. * q3: 1,
  490. * high: 10,
  491. * name: "Point2",
  492. * color: "#00FF00"
  493. * }, {
  494. * x: 1,
  495. * low: 5,
  496. * q1: 7,
  497. * median: 3,
  498. * q3: 6,
  499. * high: 2,
  500. * name: "Point1",
  501. * color: "#FF00FF"
  502. * }]
  503. * ```
  504. *
  505. * @sample {highcharts} highcharts/series/data-array-of-arrays/
  506. * Arrays of numeric x and y
  507. * @sample {highcharts} highcharts/series/data-array-of-arrays-datetime/
  508. * Arrays of datetime x and y
  509. * @sample {highcharts} highcharts/series/data-array-of-name-value/
  510. * Arrays of point.name and y
  511. * @sample {highcharts} highcharts/series/data-array-of-objects/
  512. * Config objects
  513. *
  514. * @type {Array<Array<(number|string),number,number,number,number>|Array<(number|string),number,number,number,number,number>|*>}
  515. * @extends series.line.data
  516. * @excluding marker
  517. * @product highcharts
  518. * @apioption series.boxplot.data
  519. */
  520. /**
  521. * The `high` value for each data point, signifying the highest value
  522. * in the sample set. The top whisker is drawn here.
  523. *
  524. * @type {number}
  525. * @product highcharts
  526. * @apioption series.boxplot.data.high
  527. */
  528. /**
  529. * The `low` value for each data point, signifying the lowest value
  530. * in the sample set. The bottom whisker is drawn here.
  531. *
  532. * @type {number}
  533. * @product highcharts
  534. * @apioption series.boxplot.data.low
  535. */
  536. /**
  537. * The median for each data point. This is drawn as a line through the
  538. * middle area of the box.
  539. *
  540. * @type {number}
  541. * @product highcharts
  542. * @apioption series.boxplot.data.median
  543. */
  544. /**
  545. * The lower quartile for each data point. This is the bottom of the
  546. * box.
  547. *
  548. * @type {number}
  549. * @product highcharts
  550. * @apioption series.boxplot.data.q1
  551. */
  552. /**
  553. * The higher quartile for each data point. This is the top of the box.
  554. *
  555. * @type {number}
  556. * @product highcharts
  557. * @apioption series.boxplot.data.q3
  558. */
  559. /**
  560. * The dash style of the box.
  561. *
  562. * @sample {highcharts} highcharts/plotoptions/box-plot-styling/
  563. * Box plot styling
  564. * @sample {highcharts} highcharts/css/boxplot/
  565. * Box plot in styled mode
  566. *
  567. * @type {Highcharts.DashStyleValue}
  568. * @default Solid
  569. * @since 8.1.0
  570. * @product highcharts
  571. * @apioption series.boxplot.data.boxDashStyle
  572. */
  573. /**
  574. * The dash style of the median.
  575. *
  576. * @sample {highcharts} highcharts/plotoptions/box-plot-styling/
  577. * Box plot styling
  578. * @sample {highcharts} highcharts/css/boxplot/
  579. * Box plot in styled mode
  580. *
  581. * @type {Highcharts.DashStyleValue}
  582. * @default Solid
  583. * @since 8.1.0
  584. * @product highcharts
  585. * @apioption series.boxplot.data.medianDashStyle
  586. */
  587. /**
  588. * The dash style of the stem.
  589. *
  590. * @sample {highcharts} highcharts/plotoptions/box-plot-styling/
  591. * Box plot styling
  592. * @sample {highcharts} highcharts/css/boxplot/
  593. * Box plot in styled mode
  594. *
  595. * @type {Highcharts.DashStyleValue}
  596. * @default Solid
  597. * @since 8.1.0
  598. * @product highcharts
  599. * @apioption series.boxplot.data.stemDashStyle
  600. */
  601. /**
  602. * The dash style of the whiskers.
  603. *
  604. * @sample {highcharts} highcharts/plotoptions/box-plot-styling/
  605. * Box plot styling
  606. * @sample {highcharts} highcharts/css/boxplot/
  607. * Box plot in styled mode
  608. *
  609. * @type {Highcharts.DashStyleValue}
  610. * @default Solid
  611. * @since 8.1.0
  612. * @product highcharts
  613. * @apioption series.boxplot.data.whiskerDashStyle
  614. */
  615. ''; // adds doclets above to transpiled file