From e6d74e299f8130cd7067514e1038f65f29ba4e30 Mon Sep 17 00:00:00 2001 From: Mojtaba Samimi Date: Fri, 2 Jun 2023 09:03:49 -0400 Subject: [PATCH 1/2] add patterns to icicle and treemap --- src/traces/funnelarea/defaults.js | 2 +- src/traces/icicle/attributes.js | 3 + src/traces/icicle/defaults.js | 5 +- src/traces/icicle/draw_descendants.js | 2 +- src/traces/icicle/style.js | 9 +- src/traces/pie/defaults.js | 11 +- src/traces/pie/fill_one.js | 16 ++ src/traces/pie/style_one.js | 7 +- src/traces/sunburst/defaults.js | 2 +- src/traces/sunburst/fill_one.js | 26 +++ src/traces/sunburst/fx.js | 4 +- src/traces/sunburst/style.js | 20 +- src/traces/treemap/attributes.js | 3 + src/traces/treemap/defaults.js | 8 +- src/traces/treemap/draw_ancestors.js | 2 +- src/traces/treemap/draw_descendants.js | 2 +- src/traces/treemap/style.js | 9 +- test/image/baselines/zz-sunburst_pattern.png | Bin 38727 -> 29602 bytes test/image/mocks/zz-sunburst_pattern.json | 37 +++- test/plot-schema.json | 186 +++++++++++++++++++ 20 files changed, 301 insertions(+), 53 deletions(-) create mode 100644 src/traces/pie/fill_one.js create mode 100644 src/traces/sunburst/fill_one.js diff --git a/src/traces/funnelarea/defaults.js b/src/traces/funnelarea/defaults.js index a44975321aa..6ce2a86bab9 100644 --- a/src/traces/funnelarea/defaults.js +++ b/src/traces/funnelarea/defaults.js @@ -33,7 +33,7 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout } traceOut._length = len; - handleMarkerDefaults(traceIn, traceOut, layout, coerce, 'funnelarea'); + handleMarkerDefaults(traceIn, traceOut, layout, coerce); coerce('scalegroup'); diff --git a/src/traces/icicle/attributes.js b/src/traces/icicle/attributes.js index abb5f117d85..9fc1f239cf0 100644 --- a/src/traces/icicle/attributes.js +++ b/src/traces/icicle/attributes.js @@ -10,6 +10,7 @@ var sunburstAttrs = require('../sunburst/attributes'); var treemapAttrs = require('../treemap/attributes'); var constants = require('../treemap/constants'); var extendFlat = require('../../lib/extend').extendFlat; +var pattern = require('../../components/drawing/attributes').pattern; module.exports = { labels: sunburstAttrs.labels, @@ -61,6 +62,8 @@ module.exports = { line: sunburstAttrs.marker.line, + pattern: pattern, + editType: 'calc' }, colorScaleAttrs('marker', { diff --git a/src/traces/icicle/defaults.js b/src/traces/icicle/defaults.js index a549f1eac6e..f98322e661f 100644 --- a/src/traces/icicle/defaults.js +++ b/src/traces/icicle/defaults.js @@ -6,6 +6,7 @@ var Color = require('../../components/color'); var handleDomainDefaults = require('../../plots/domain').defaults; var handleText = require('../bar/defaults').handleText; var TEXTPAD = require('../bar/constants').TEXTPAD; +var handleMarkerDefaults = require('../pie/defaults').handleMarkerDefaults; var Colorscale = require('../../components/colorscale'); var hasColorscale = Colorscale.hasColorscale; @@ -59,10 +60,8 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout }); coerce('textposition'); - var lineWidth = coerce('marker.line.width'); - if(lineWidth) coerce('marker.line.color', layout.paper_bgcolor); + handleMarkerDefaults(traceIn, traceOut, layout, coerce); - coerce('marker.colors'); var withColorscale = traceOut._hasColorscale = ( hasColorscale(traceIn, 'marker', 'colors') || (traceIn.marker || {}).coloraxis // N.B. special logic to consider "values" colorscales diff --git a/src/traces/icicle/draw_descendants.js b/src/traces/icicle/draw_descendants.js index 2fba2e8f99d..75b4bba7453 100644 --- a/src/traces/icicle/draw_descendants.js +++ b/src/traces/icicle/draw_descendants.js @@ -163,7 +163,7 @@ module.exports = function drawDescendants(gd, cd, entry, slices, opts) { }) .call(helpers.setSliceCursor, gd, { isTransitioning: gd._transitioning }); - slicePath.call(styleOne, pt, trace, { + slicePath.call(styleOne, pt, trace, gd, { hovered: false }); diff --git a/src/traces/icicle/style.js b/src/traces/icicle/style.js index d4c429df953..dd5b6f2a89f 100644 --- a/src/traces/icicle/style.js +++ b/src/traces/icicle/style.js @@ -4,6 +4,7 @@ var d3 = require('@plotly/d3'); var Color = require('../../components/color'); var Lib = require('../../lib'); var resizeText = require('../bar/uniform_text').resizeText; +var fillOne = require('../sunburst/fill_one'); function style(gd) { var s = gd._fullLayout._iciclelayer.selectAll('.trace'); @@ -17,20 +18,20 @@ function style(gd) { gTrace.style('opacity', trace.opacity); gTrace.selectAll('path.surface').each(function(pt) { - d3.select(this).call(styleOne, pt, trace); + d3.select(this).call(styleOne, pt, trace, gd); }); }); } -function styleOne(s, pt, trace) { +function styleOne(s, pt, trace, gd) { var cdi = pt.data.data; var isLeaf = !pt.children; var ptNumber = cdi.i; var lineColor = Lib.castOption(trace, ptNumber, 'marker.line.color') || Color.defaultLine; var lineWidth = Lib.castOption(trace, ptNumber, 'marker.line.width') || 0; - s.style('stroke-width', lineWidth) - .call(Color.fill, cdi.color) + s.call(fillOne, pt, trace, gd) + .style('stroke-width', lineWidth) .call(Color.stroke, lineColor) .style('opacity', isLeaf ? trace.leaf.opacity : null); } diff --git a/src/traces/pie/defaults.js b/src/traces/pie/defaults.js index 495baee37af..98228a8a86e 100644 --- a/src/traces/pie/defaults.js +++ b/src/traces/pie/defaults.js @@ -36,9 +36,14 @@ function handleLabelsAndValues(labels, values) { }; } -function handleMarkerDefaults(traceIn, traceOut, layout, coerce, isFunnelarea) { +function handleMarkerDefaults(traceIn, traceOut, layout, coerce, isPie) { var lineWidth = coerce('marker.line.width'); - if(lineWidth) coerce('marker.line.color', isFunnelarea ? layout.paper_bgcolor : undefined); + if(lineWidth) { + coerce('marker.line.color', + isPie ? undefined : + layout.paper_bgcolor // case of funnelarea, sunburst, icicle, treemap + ); + } var markerColors = coerce('marker.colors'); coercePattern(coerce, 'marker.pattern', markerColors); @@ -73,7 +78,7 @@ function supplyDefaults(traceIn, traceOut, defaultColor, layout) { } traceOut._length = len; - handleMarkerDefaults(traceIn, traceOut, layout, coerce); + handleMarkerDefaults(traceIn, traceOut, layout, coerce, true); coerce('scalegroup'); // TODO: hole needs to be coerced to the same value within a scaleegroup diff --git a/src/traces/pie/fill_one.js b/src/traces/pie/fill_one.js new file mode 100644 index 00000000000..8b2b664f19e --- /dev/null +++ b/src/traces/pie/fill_one.js @@ -0,0 +1,16 @@ +'use strict'; + +var Drawing = require('../../components/drawing'); + +module.exports = function fillOne(s, pt, trace, gd) { + // enforce the point color, when colors (with s) & the pattern shape are missing. + // 'abuse' the color attribute, used in the Drawing component for bar trace type. + var marker = trace.marker; + if(marker.pattern) { + if(!marker.colors || !marker.pattern.shape) marker.color = pt.color; + } else { + marker.color = pt.color; + } + + Drawing.pointStyle(s, trace, gd, pt); +}; diff --git a/src/traces/pie/style_one.js b/src/traces/pie/style_one.js index 139046ccc1e..03f19a95cae 100644 --- a/src/traces/pie/style_one.js +++ b/src/traces/pie/style_one.js @@ -2,7 +2,7 @@ var Color = require('../../components/color'); var castOption = require('./helpers').castOption; -var Drawing = require('../../components/drawing'); +var fillOne = require('./fill_one'); module.exports = function styleOne(s, pt, trace, gd) { var line = trace.marker.line; @@ -18,8 +18,7 @@ module.exports = function styleOne(s, pt, trace, gd) { marker.color = pt.color; } - Drawing.pointStyle(s, trace, gd, pt); - - s.style('stroke-width', lineWidth) + s.call(fillOne, pt, trace, gd) + .style('stroke-width', lineWidth) .call(Color.stroke, lineColor); }; diff --git a/src/traces/sunburst/defaults.js b/src/traces/sunburst/defaults.js index 330aba75a54..82b43f2c95a 100644 --- a/src/traces/sunburst/defaults.js +++ b/src/traces/sunburst/defaults.js @@ -33,7 +33,7 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout coerce('level'); coerce('maxdepth'); - handleMarkerDefaults(traceIn, traceOut, layout, coerce, 'sunburst'); + handleMarkerDefaults(traceIn, traceOut, layout, coerce); var withColorscale = traceOut._hasColorscale = ( hasColorscale(traceIn, 'marker', 'colors') || diff --git a/src/traces/sunburst/fill_one.js b/src/traces/sunburst/fill_one.js new file mode 100644 index 00000000000..70a18362770 --- /dev/null +++ b/src/traces/sunburst/fill_one.js @@ -0,0 +1,26 @@ +'use strict'; + +var Drawing = require('../../components/drawing'); +var Color = require('../../components/color'); + +module.exports = function fillOne(s, pt, trace, gd, fadedColor) { + var cdi = pt.data.data; + var ptNumber = cdi.i; + + var color = fadedColor || cdi.color; + + if(gd && ptNumber >= 0) { + pt.i = cdi.i; + + var marker = trace.marker; + if(marker.pattern) { + if(!marker.colors || !marker.pattern.shape) marker.color = color; + } else { + marker.color = color; + } + + Drawing.pointStyle(s, trace, gd, pt); + } else { + Color.fill(s, color); + } +}; diff --git a/src/traces/sunburst/fx.js b/src/traces/sunburst/fx.js index 931541b3929..78321364105 100644 --- a/src/traces/sunburst/fx.js +++ b/src/traces/sunburst/fx.js @@ -174,7 +174,7 @@ module.exports = function attachFxHandlers(sliceTop, entry, gd, cd, opts) { if(isTreemapOrIcicle) { var slice = sliceTop.select('path.surface'); - opts.styleOne(slice, pt, traceNow, { + opts.styleOne(slice, pt, traceNow, gd, { hovered: true }); } @@ -207,7 +207,7 @@ module.exports = function attachFxHandlers(sliceTop, entry, gd, cd, opts) { if(isTreemapOrIcicle) { var slice = sliceTop.select('path.surface'); - opts.styleOne(slice, pt, traceNow, { + opts.styleOne(slice, pt, traceNow, gd, { hovered: false }); } diff --git a/src/traces/sunburst/style.js b/src/traces/sunburst/style.js index 2e5d73fd67c..0b20741f9c7 100644 --- a/src/traces/sunburst/style.js +++ b/src/traces/sunburst/style.js @@ -4,7 +4,7 @@ var d3 = require('@plotly/d3'); var Color = require('../../components/color'); var Lib = require('../../lib'); var resizeText = require('../bar/uniform_text').resizeText; -var Drawing = require('../../components/drawing'); +var fillOne = require('./fill_one'); function style(gd) { var s = gd._fullLayout._sunburstlayer.selectAll('.trace'); @@ -30,22 +30,8 @@ function styleOne(s, pt, trace, gd) { var lineColor = Lib.castOption(trace, ptNumber, 'marker.line.color') || Color.defaultLine; var lineWidth = Lib.castOption(trace, ptNumber, 'marker.line.width') || 0; - if(gd && ptNumber >= 0) { - pt.i = cdi.i; - - var marker = trace.marker; - if(marker.pattern) { - if(!marker.colors || !marker.pattern.shape) marker.color = cdi.color; - } else { - marker.color = cdi.color; - } - - Drawing.pointStyle(s, trace, gd, pt); - } else { - Color.fill(s, cdi.color); - } - - s.style('stroke-width', lineWidth) + s.call(fillOne, pt, trace, gd) + .style('stroke-width', lineWidth) .call(Color.stroke, lineColor) .style('opacity', isLeaf ? trace.leaf.opacity : null); } diff --git a/src/traces/treemap/attributes.js b/src/traces/treemap/attributes.js index 47ac4e541aa..cc23edbb184 100644 --- a/src/traces/treemap/attributes.js +++ b/src/traces/treemap/attributes.js @@ -9,6 +9,7 @@ var pieAttrs = require('../pie/attributes'); var sunburstAttrs = require('../sunburst/attributes'); var constants = require('./constants'); var extendFlat = require('../../lib/extend').extendFlat; +var pattern = require('../../components/drawing/attributes').pattern; module.exports = { labels: sunburstAttrs.labels, @@ -123,6 +124,8 @@ module.exports = { colors: sunburstAttrs.marker.colors, + pattern: pattern, + depthfade: { valType: 'enumerated', values: [true, false, 'reversed'], diff --git a/src/traces/treemap/defaults.js b/src/traces/treemap/defaults.js index 6c428979514..a9943f6ca43 100644 --- a/src/traces/treemap/defaults.js +++ b/src/traces/treemap/defaults.js @@ -6,6 +6,7 @@ var Color = require('../../components/color'); var handleDomainDefaults = require('../../plots/domain').defaults; var handleText = require('../bar/defaults').handleText; var TEXTPAD = require('../bar/constants').TEXTPAD; +var handleMarkerDefaults = require('../pie/defaults').handleMarkerDefaults; var Colorscale = require('../../components/colorscale'); var hasColorscale = Colorscale.hasColorscale; @@ -64,10 +65,7 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout coerce('textposition'); var bottomText = traceOut.textposition.indexOf('bottom') !== -1; - var lineWidth = coerce('marker.line.width'); - if(lineWidth) coerce('marker.line.color', layout.paper_bgcolor); - - var colors = coerce('marker.colors'); + handleMarkerDefaults(traceIn, traceOut, layout, coerce); var withColorscale = traceOut._hasColorscale = ( hasColorscale(traceIn, 'marker', 'colors') || (traceIn.marker || {}).coloraxis // N.B. special logic to consider "values" colorscales @@ -75,7 +73,7 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout if(withColorscale) { colorscaleDefaults(traceIn, traceOut, layout, coerce, {prefix: 'marker.', cLetter: 'c'}); } else { - coerce('marker.depthfade', !(colors || []).length); + coerce('marker.depthfade', !(traceOut.marker.colors || []).length); } var headerSize = traceOut.textfont.size * 2; diff --git a/src/traces/treemap/draw_ancestors.js b/src/traces/treemap/draw_ancestors.js index 5e61278552f..40f796cfc3d 100644 --- a/src/traces/treemap/draw_ancestors.js +++ b/src/traces/treemap/draw_ancestors.js @@ -128,7 +128,7 @@ module.exports = function drawAncestors(gd, cd, entry, slices, opts) { isTransitioning: gd._transitioning }); - slicePath.call(styleOne, pt, trace, { + slicePath.call(styleOne, pt, trace, gd, { hovered: false }); diff --git a/src/traces/treemap/draw_descendants.js b/src/traces/treemap/draw_descendants.js index 03ce6ebb380..32c20344a62 100644 --- a/src/traces/treemap/draw_descendants.js +++ b/src/traces/treemap/draw_descendants.js @@ -161,7 +161,7 @@ module.exports = function drawDescendants(gd, cd, entry, slices, opts) { }) .call(helpers.setSliceCursor, gd, { isTransitioning: gd._transitioning }); - slicePath.call(styleOne, pt, trace, { + slicePath.call(styleOne, pt, trace, gd, { hovered: false }); diff --git a/src/traces/treemap/style.js b/src/traces/treemap/style.js index 86a18b083cc..0fd7ddb5b2e 100644 --- a/src/traces/treemap/style.js +++ b/src/traces/treemap/style.js @@ -5,6 +5,7 @@ var Color = require('../../components/color'); var Lib = require('../../lib'); var helpers = require('../sunburst/helpers'); var resizeText = require('../bar/uniform_text').resizeText; +var fillOne = require('../sunburst/fill_one'); function style(gd) { var s = gd._fullLayout._treemaplayer.selectAll('.trace'); @@ -18,14 +19,14 @@ function style(gd) { gTrace.style('opacity', trace.opacity); gTrace.selectAll('path.surface').each(function(pt) { - d3.select(this).call(styleOne, pt, trace, { + d3.select(this).call(styleOne, pt, trace, gd, { hovered: false }); }); }); } -function styleOne(s, pt, trace, opts) { +function styleOne(s, pt, trace, gd, opts) { var hovered = (opts || {}).hovered; var cdi = pt.data.data; var ptNumber = cdi.i; @@ -80,8 +81,8 @@ function styleOne(s, pt, trace, opts) { } } - s.style('stroke-width', lineWidth) - .call(Color.fill, fillColor) + s.call(fillOne, pt, trace, gd, fillColor) + .style('stroke-width', lineWidth) .call(Color.stroke, lineColor) .style('opacity', opacity); } diff --git a/test/image/baselines/zz-sunburst_pattern.png b/test/image/baselines/zz-sunburst_pattern.png index 82af2d8741bf01ceea944c9e853560c3fc4336cf..61aada3e563c002ebf96132c7b538c75eec565b4 100644 GIT binary patch literal 29602 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

^fR&_PxIp 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 fP)ul0bP0l+XkK=#u2& diff --git a/test/image/mocks/zz-sunburst_pattern.json b/test/image/mocks/zz-sunburst_pattern.json index 98bb77a3e4f..4ed744d0d8a 100644 --- a/test/image/mocks/zz-sunburst_pattern.json +++ b/test/image/mocks/zz-sunburst_pattern.json @@ -1,13 +1,21 @@ { "data": [ { - "type": "sunburst", - "textinfo": "label", + "type": "icicle", + "textinfo": "none", "labels": ["Cain", "Seth", "Enos", "Noam", "Abel", "Awan", "Enoch", "Azura"], "parents": ["Eve", "Eve", "Seth", "Seth", "Eve", "Eve", "Awan", "Eve" ], - "domain": {"x": [0, 0.5]}, + "level": "Enoch", + "domain": {"x": [0, 0.3]}, "marker": { - "colors": [ "orange", "steelblue", "steelblue", "steelblue", "green", "red", "red", "purple"] + "colors": [ "orange", "steelblue", "lightgrey", "lightgrey", "green", "red", "lightgrey", "purple"], + "pattern": { + "shape": ".", + "size": 4 + }, + "line": { + "color": "lightgrey" + } } }, { @@ -15,7 +23,24 @@ "textinfo": "none", "labels": ["Cain", "Seth", "Enos", "Noam", "Abel", "Awan", "Enoch", "Azura"], "parents": ["Eve", "Eve", "Seth", "Seth", "Eve", "Eve", "Awan", "Eve" ], - "domain": {"x": [0.5, 1]}, + "domain": {"x": [0.35, 0.65]}, + "marker": { + "colors": [ "orange", "steelblue", "lightgrey", "lightgrey", "green", "red", "lightgrey", "purple"], + "pattern": { + "shape": ".", + "size": 4 + }, + "line": { + "color": "lightgrey" + } + } + }, + { + "type": "treemap", + "textinfo": "none", + "labels": ["Cain", "Seth", "Enos", "Noam", "Abel", "Awan", "Enoch", "Azura"], + "parents": ["Eve", "Eve", "Seth", "Seth", "Eve", "Eve", "Awan", "Eve" ], + "domain": {"x": [0.7, 1]}, "marker": { "colors": [ "orange", "steelblue", "lightgrey", "lightgrey", "green", "red", "lightgrey", "purple"], "pattern": { @@ -29,7 +54,7 @@ } ], "layout": { - "title": { "text": "sunburst with pattern"}, + "title": { "text": "icicle, sunburst & treemap with pattern"}, "width": 800, "height": 400 } diff --git a/test/plot-schema.json b/test/plot-schema.json index 23ea31a4b1c..ab6817cf377 100644 --- a/test/plot-schema.json +++ b/test/plot-schema.json @@ -35009,6 +35009,99 @@ "valType": "string" } }, + "pattern": { + "bgcolor": { + "arrayOk": true, + "description": "When there is no colorscale sets the color of background pattern fill. Defaults to a `marker.color` background when `fillmode` is *overlay*. Otherwise, defaults to a transparent background.", + "editType": "style", + "valType": "color" + }, + "bgcolorsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `bgcolor`.", + "editType": "none", + "valType": "string" + }, + "description": "Sets the pattern within the marker.", + "editType": "style", + "fgcolor": { + "arrayOk": true, + "description": "When there is no colorscale sets the color of foreground pattern fill. Defaults to a `marker.color` background when `fillmode` is *replace*. Otherwise, defaults to dark grey or white to increase contrast with the `bgcolor`.", + "editType": "style", + "valType": "color" + }, + "fgcolorsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `fgcolor`.", + "editType": "none", + "valType": "string" + }, + "fgopacity": { + "description": "Sets the opacity of the foreground pattern fill. Defaults to a 0.5 when `fillmode` is *overlay*. Otherwise, defaults to 1.", + "editType": "style", + "max": 1, + "min": 0, + "valType": "number" + }, + "fillmode": { + "description": "Determines whether `marker.color` should be used as a default to `bgcolor` or a `fgcolor`.", + "dflt": "replace", + "editType": "style", + "valType": "enumerated", + "values": [ + "replace", + "overlay" + ] + }, + "role": "object", + "shape": { + "arrayOk": true, + "description": "Sets the shape of the pattern fill. By default, no pattern is used for filling the area.", + "dflt": "", + "editType": "style", + "valType": "enumerated", + "values": [ + "", + "/", + "\\", + "x", + "-", + "|", + "+", + "." + ] + }, + "shapesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `shape`.", + "editType": "none", + "valType": "string" + }, + "size": { + "arrayOk": true, + "description": "Sets the size of unit squares of the pattern fill in pixels, which corresponds to the interval of repetition of the pattern.", + "dflt": 8, + "editType": "style", + "min": 0, + "valType": "number" + }, + "sizesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `size`.", + "editType": "none", + "valType": "string" + }, + "solidity": { + "arrayOk": true, + "description": "Sets the solidity of the pattern fill. Solidity is roughly the fraction of the area filled by the pattern. Solidity of 0 shows only the background color without pattern and solidty of 1 shows only the foreground color without pattern.", + "dflt": 0.3, + "editType": "style", + "max": 1, + "min": 0, + "valType": "number" + }, + "soliditysrc": { + "description": "Sets the source reference on Chart Studio Cloud for `solidity`.", + "editType": "none", + "valType": "string" + } + }, "reversescale": { "description": "Reverses the color mapping if true. Has an effect only if colors is set to a numerical array. If true, `marker.cmin` will correspond to the last color in the array and `marker.cmax` will correspond to the first color.", "dflt": false, @@ -70926,6 +71019,99 @@ "valType": "number" } }, + "pattern": { + "bgcolor": { + "arrayOk": true, + "description": "When there is no colorscale sets the color of background pattern fill. Defaults to a `marker.color` background when `fillmode` is *overlay*. Otherwise, defaults to a transparent background.", + "editType": "style", + "valType": "color" + }, + "bgcolorsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `bgcolor`.", + "editType": "none", + "valType": "string" + }, + "description": "Sets the pattern within the marker.", + "editType": "style", + "fgcolor": { + "arrayOk": true, + "description": "When there is no colorscale sets the color of foreground pattern fill. Defaults to a `marker.color` background when `fillmode` is *replace*. Otherwise, defaults to dark grey or white to increase contrast with the `bgcolor`.", + "editType": "style", + "valType": "color" + }, + "fgcolorsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `fgcolor`.", + "editType": "none", + "valType": "string" + }, + "fgopacity": { + "description": "Sets the opacity of the foreground pattern fill. Defaults to a 0.5 when `fillmode` is *overlay*. Otherwise, defaults to 1.", + "editType": "style", + "max": 1, + "min": 0, + "valType": "number" + }, + "fillmode": { + "description": "Determines whether `marker.color` should be used as a default to `bgcolor` or a `fgcolor`.", + "dflt": "replace", + "editType": "style", + "valType": "enumerated", + "values": [ + "replace", + "overlay" + ] + }, + "role": "object", + "shape": { + "arrayOk": true, + "description": "Sets the shape of the pattern fill. By default, no pattern is used for filling the area.", + "dflt": "", + "editType": "style", + "valType": "enumerated", + "values": [ + "", + "/", + "\\", + "x", + "-", + "|", + "+", + "." + ] + }, + "shapesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `shape`.", + "editType": "none", + "valType": "string" + }, + "size": { + "arrayOk": true, + "description": "Sets the size of unit squares of the pattern fill in pixels, which corresponds to the interval of repetition of the pattern.", + "dflt": 8, + "editType": "style", + "min": 0, + "valType": "number" + }, + "sizesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `size`.", + "editType": "none", + "valType": "string" + }, + "solidity": { + "arrayOk": true, + "description": "Sets the solidity of the pattern fill. Solidity is roughly the fraction of the area filled by the pattern. Solidity of 0 shows only the background color without pattern and solidty of 1 shows only the foreground color without pattern.", + "dflt": 0.3, + "editType": "style", + "max": 1, + "min": 0, + "valType": "number" + }, + "soliditysrc": { + "description": "Sets the source reference on Chart Studio Cloud for `solidity`.", + "editType": "none", + "valType": "string" + } + }, "reversescale": { "description": "Reverses the color mapping if true. Has an effect only if colors is set to a numerical array. If true, `marker.cmin` will correspond to the last color in the array and `marker.cmax` will correspond to the first color.", "dflt": false, From 60a2a875e50c1ecf7b4c489e3ac7da349437e3c1 Mon Sep 17 00:00:00 2001 From: Mojtaba Samimi Date: Fri, 2 Jun 2023 17:58:31 -0400 Subject: [PATCH 2/2] update draftlogs --- draftlogs/6601_add.md | 2 +- draftlogs/6622_add.md | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) delete mode 100644 draftlogs/6622_add.md diff --git a/draftlogs/6601_add.md b/draftlogs/6601_add.md index 9a3e90c2687..6a58a619fb1 100644 --- a/draftlogs/6601_add.md +++ b/draftlogs/6601_add.md @@ -1,2 +1,2 @@ -- add pattern to pie and funnelarea traces [[#6601](https://github.com/plotly/plotly.js/pull/6601), [#6619](https://github.com/plotly/plotly.js/pull/6619)], +- add pattern to pie, funnelarea, sunburst, icicle and treemap traces [[#6601](https://github.com/plotly/plotly.js/pull/6601), [#6619](https://github.com/plotly/plotly.js/pull/6619), [#6622](https://github.com/plotly/plotly.js/pull/6622), [#6626](https://github.com/plotly/plotly.js/pull/6626)], with thanks to @thierryVergult for the contribution! diff --git a/draftlogs/6622_add.md b/draftlogs/6622_add.md deleted file mode 100644 index b60684333f7..00000000000 --- a/draftlogs/6622_add.md +++ /dev/null @@ -1 +0,0 @@ -add pattern to sunburst trace type [[#6622](https://github.com/plotly/plotly.js/pull/6622)] \ No newline at end of file