File Coverage

blib/lib/Chart/Plotly/Trace/Funnel/Marker.pm
Criterion Covered Total %
statement 15 31 48.3
branch 0 8 0.0
condition 0 8 0.0
subroutine 5 6 83.3
pod 1 1 100.0
total 21 54 38.8


line stmt bran cond sub pod time code
1             use Moose;
2 1     1   7 use MooseX::ExtraArgs;
  1         1  
  1         13  
3 1     1   5358 use Moose::Util::TypeConstraints qw(enum union);
  1         9  
  1         8  
4 1     1   1659 if ( !defined Moose::Util::TypeConstraints::find_type_constraint('PDL') ) {
  1         4  
  1         7  
5             Moose::Util::TypeConstraints::type('PDL');
6             }
7              
8             use Chart::Plotly::Trace::Funnel::Marker::Colorbar;
9 1     1   1006 use Chart::Plotly::Trace::Funnel::Marker::Line;
  1         3  
  1         43  
10 1     1   628  
  1         5  
  1         377  
11             our $VERSION = '0.042'; # VERSION
12              
13             # ABSTRACT: This attribute is one of the possible options for the trace funnel.
14              
15             my $self = shift;
16             my $extra_args = $self->extra_args // {};
17 0     0 1   my $meta = $self->meta;
18 0   0       my %hash = %$self;
19 0           for my $name ( sort keys %hash ) {
20 0           my $attr = $meta->get_attribute($name);
21 0           if ( defined $attr ) {
22 0           my $value = $hash{$name};
23 0 0         my $type = $attr->type_constraint;
24 0           if ( $type && $type->equals('Bool') ) {
25 0           $hash{$name} = $value ? \1 : \0;
26 0 0 0       }
27 0 0         }
28             }
29             %hash = ( %hash, %$extra_args );
30             delete $hash{'extra_args'};
31 0           if ( $self->can('type') && ( !defined $hash{'type'} ) ) {
32 0           $hash{type} = $self->type();
33 0 0 0       }
34 0           return \%hash;
35             }
36 0            
37             has autocolorscale => (
38             is => "rw",
39             isa => "Bool",
40             documentation =>
41             "Determines whether the colorscale is a default palette (`autocolorscale: true`) or the palette determined by `marker.colorscale`. Has an effect only if in `marker.color` is set to a numerical array. In case `colorscale` is unspecified or `autocolorscale` is true, the default palette will be chosen according to whether numbers in the `color` array are all positive, all negative or mixed.",
42             );
43              
44             has cauto => (
45             is => "rw",
46             isa => "Bool",
47             documentation =>
48             "Determines whether or not the color domain is computed with respect to the input data (here in `marker.color`) or the bounds set in `marker.cmin` and `marker.cmax` Has an effect only if in `marker.color` is set to a numerical array. Defaults to `false` when `marker.cmin` and `marker.cmax` are set by the user.",
49             );
50              
51             has cmax => (
52             is => "rw",
53             isa => "Num",
54             documentation =>
55             "Sets the upper bound of the color domain. Has an effect only if in `marker.color` is set to a numerical array. Value should have the same units as in `marker.color` and if set, `marker.cmin` must be set as well.",
56             );
57              
58             has cmid => (
59             is => "rw",
60             isa => "Num",
61             documentation =>
62             "Sets the mid-point of the color domain by scaling `marker.cmin` and/or `marker.cmax` to be equidistant to this point. Has an effect only if in `marker.color` is set to a numerical array. Value should have the same units as in `marker.color`. Has no effect when `marker.cauto` is `false`.",
63             );
64              
65             has cmin => (
66             is => "rw",
67             isa => "Num",
68             documentation =>
69             "Sets the lower bound of the color domain. Has an effect only if in `marker.color` is set to a numerical array. Value should have the same units as in `marker.color` and if set, `marker.cmax` must be set as well.",
70             );
71              
72             has color => (
73             is => "rw",
74             isa => "Str|ArrayRef[Str]",
75             documentation =>
76             "Sets the marker color. It accepts either a specific color or an array of numbers that are mapped to the colorscale relative to the max and min values of the array or relative to `marker.cmin` and `marker.cmax` if set.",
77             );
78              
79             has coloraxis => (
80             is => "rw",
81             documentation =>
82             "Sets a reference to a shared color axis. References to these shared color axes are *coloraxis*, *coloraxis2*, *coloraxis3*, etc. Settings for these shared color axes are set in the layout, under `layout.coloraxis`, `layout.coloraxis2`, etc. Note that multiple color scales can be linked to the same color axis.",
83             );
84              
85             has colorbar => ( is => "rw",
86             isa => "Maybe[HashRef]|Chart::Plotly::Trace::Funnel::Marker::Colorbar", );
87              
88             has colorscale => (
89             is => "rw",
90             documentation =>
91             "Sets the colorscale. Has an effect only if in `marker.color` is set to a numerical array. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsv, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `marker.cmin` and `marker.cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.",
92             );
93              
94             has colorsrc => ( is => "rw",
95             isa => "Str",
96             documentation => "Sets the source reference on Chart Studio Cloud for `color`.",
97             );
98              
99             has line => ( is => "rw",
100             isa => "Maybe[HashRef]|Chart::Plotly::Trace::Funnel::Marker::Line", );
101              
102             has opacity => ( is => "rw",
103             isa => "Num|ArrayRef[Num]",
104             documentation => "Sets the opacity of the bars.",
105             );
106              
107             has opacitysrc => ( is => "rw",
108             isa => "Str",
109             documentation => "Sets the source reference on Chart Studio Cloud for `opacity`.",
110             );
111              
112             has reversescale => (
113             is => "rw",
114             isa => "Bool",
115             documentation =>
116             "Reverses the color mapping if true. Has an effect only if in `marker.color` 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.",
117             );
118              
119             has showscale => (
120             is => "rw",
121             isa => "Bool",
122             documentation =>
123             "Determines whether or not a colorbar is displayed for this trace. Has an effect only if in `marker.color` is set to a numerical array.",
124             );
125              
126             __PACKAGE__->meta->make_immutable();
127             1;
128              
129              
130             =pod
131              
132             =encoding utf-8
133              
134             =head1 NAME
135              
136             Chart::Plotly::Trace::Funnel::Marker - This attribute is one of the possible options for the trace funnel.
137              
138             =head1 VERSION
139              
140             version 0.042
141              
142             =head1 SYNOPSIS
143              
144             use Chart::Plotly;
145             use Chart::Plotly::Plot;
146             use JSON;
147             use Chart::Plotly::Trace::Funnel;
148            
149             # Example from https://github.com/plotly/plotly.js/blob/b93e3a5a83b6561ac6258a59f274b5fc87630c3e/test/image/mocks/funnel_11.json
150             my $trace1 = Chart::Plotly::Trace::Funnel->new({'orientation' => 'v', 'marker' => {'color' => 'rgb(255, 102, 97)', }, 'y' => [13.23, 22.7, 26.06, ], 'x' => ['Half Dose', 'Full Dose', 'Double Dose', ], 'name' => 'Orange Juice', });
151            
152             my $trace2 = Chart::Plotly::Trace::Funnel->new({'name' => 'Vitamin C', 'marker' => {'color' => 'rgb(0, 196, 200)', }, 'y' => [7.98, 16.77, 26.14, ], 'x' => ['Half Dose', 'Full Dose', 'Double Dose', ], 'orientation' => 'v', });
153            
154             my $trace3 = Chart::Plotly::Trace::Funnel->new({'name' => 'Std Dev - OJ', 'x' => ['Half Dose', 'Full Dose', 'Double Dose', ], 'y' => [1.4102837, 1.236752, 0.8396031, ], 'visible' => JSON::false, 'orientation' => 'v', });
155            
156             my $trace4 = Chart::Plotly::Trace::Funnel->new({'y' => [0.868562, 0.7954104, 1.5171757, ], 'x' => ['Half Dose', 'Full Dose', 'Double Dose', ], 'name' => 'Std Dev - VC', 'orientation' => 'v', 'visible' => JSON::false, });
157            
158            
159             my $plot = Chart::Plotly::Plot->new(
160             traces => [$trace1, $trace2, $trace3, $trace4, ],
161             layout =>
162             {'autosize' => JSON::false, 'hidesources' => JSON::false, 'plot_bgcolor' => 'rgb(217, 217, 217)', 'font' => {'color' => '#000', 'size' => 12, 'family' => 'Arial, sans-serif', }, 'width' => 600, 'separators' => '.,', 'legend' => {'xanchor' => 'left', 'font' => {'size' => 16, 'family' => '', 'color' => 'rgb(0, 0, 0)', }, 'bgcolor' => 'rgba(255, 255, 255, 0)', 'bordercolor' => 'rgba(0, 0, 0, 0)', 'yanchor' => 'auto', 'x' => 1.02, 'y' => 0.931907250442406, 'borderwidth' => 1, 'traceorder' => 'normal', }, 'funnelgroupgap' => 0, 'funnelgap' => 0.2, 'annotations' => [{'tag' => '', 'yatype' => 'linear', 'showarrow' => JSON::false, 'xanchor' => 'auto', 'bgcolor' => 'rgba(0,0,0,0)', 'arrowhead' => 1, 'yref' => 'paper', 'ax' => -10, 'align' => 'center', 'yanchor' => 'auto', 'xatype' => 'category', 'bordercolor' => '', 'ref' => 'paper', 'text' => '<b>Supplement</b>', 'x' => 1.3479735318445, 'y' => 0.998214285714286, 'opacity' => 1, 'arrowwidth' => 0, 'font' => {'size' => 18, 'family' => '', 'color' => '', }, 'ay' => -26.7109375, 'arrowcolor' => '', 'borderpad' => 1, 'borderwidth' => 1, 'xref' => 'paper', 'arrowsize' => 1, }, ], 'height' => 440, 'dragmode' => 'zoom', 'hovermode' => 'x', 'paper_bgcolor' => '#fff', 'boxmode' => 'overlay', 'showlegend' => JSON::true, 'titlefont' => {'family' => '', 'size' => 16, 'color' => '', }, 'title' => 'Grouped Funnel Chart', 'margin' => {'r' => 0, 't' => 80, 'b' => 80, 'l' => 80, 'autoexpand' => JSON::true, 'pad' => 2, }, 'yaxis' => {'gridcolor' => 'rgb(255, 255, 255)', 'autotick' => JSON::true, 'ticks' => '', 'tickfont' => {'color' => '', 'size' => 16, 'family' => '', }, 'mirror' => JSON::true, 'tickangle' => 0, 'domain' => [0, 1, ], 'anchor' => 'x', 'showgrid' => JSON::true, 'exponentformat' => 'e', 'tick0' => 0, 'showticklabels' => JSON::true, 'nticks' => 0, 'zerolinewidth' => 1, 'zeroline' => JSON::false, 'position' => 0, 'range' => [0, 29.1128165263158, ], 'dtick' => 5, 'showexponent' => 'all', 'showline' => JSON::false, 'linecolor' => '#000', 'type' => 'linear', 'linewidth' => 0.1, 'overlaying' => JSON::false, 'ticklen' => 5, 'rangemode' => 'normal', 'tickwidth' => 1, 'tickcolor' => '#000', 'title' => 'Length', 'autorange' => JSON::true, 'titlefont' => {'size' => 16, 'family' => '', 'color' => '', }, 'zerolinecolor' => '#000', 'gridwidth' => 1.9, }, 'funnelmode' => 'group', 'xaxis' => {'ticks' => '', 'autotick' => JSON::true, 'gridcolor' => 'rgb(255, 255, 255)', 'tickfont' => {'color' => '', 'family' => '', 'size' => 16, }, 'mirror' => JSON::true, 'anchor' => 'y', 'tickangle' => 0, 'domain' => [0, 1, ], 'showgrid' => JSON::true, 'exponentformat' => 'e', 'tick0' => 0, 'showticklabels' => JSON::true, 'range' => [-0.5, 2.5, ], 'nticks' => 0, 'zerolinewidth' => 1, 'zeroline' => JSON::false, 'position' => 0, 'showexponent' => 'all', 'dtick' => 1, 'showline' => JSON::false, 'type' => 'category', 'linecolor' => '#000', 'overlaying' => JSON::false, 'linewidth' => 0.1, 'ticklen' => 5, 'rangemode' => 'normal', 'titlefont' => {'size' => 16, 'family' => '', 'color' => '', }, 'autorange' => JSON::true, 'title' => 'Dose (mg)', 'tickwidth' => 1, 'tickcolor' => '#000', 'gridwidth' => 1.9, 'zerolinecolor' => '#000', }, }
163             );
164            
165             Chart::Plotly::show_plot($plot);
166              
167             =head1 DESCRIPTION
168              
169             This attribute is part of the possible options for the trace funnel.
170              
171             This file has been autogenerated from the official plotly.js source.
172              
173             If you like Plotly, please support them: L<https://plot.ly/>
174             Open source announcement: L<https://plot.ly/javascript/open-source-announcement/>
175              
176             Full reference: L<https://plot.ly/javascript/reference/#funnel>
177              
178             =head1 DISCLAIMER
179              
180             This is an unofficial Plotly Perl module. Currently I'm not affiliated in any way with Plotly.
181             But I think plotly.js is a great library and I want to use it with perl.
182              
183             =head1 METHODS
184              
185             =head2 TO_JSON
186              
187             Serialize the trace to JSON. This method should be called only by L<JSON> serializer.
188              
189             =head1 ATTRIBUTES
190              
191             =over
192              
193             =item * autocolorscale
194              
195             Determines whether the colorscale is a default palette (`autocolorscale: true`) or the palette determined by `marker.colorscale`. Has an effect only if in `marker.color` is set to a numerical array. In case `colorscale` is unspecified or `autocolorscale` is true, the default palette will be chosen according to whether numbers in the `color` array are all positive, all negative or mixed.
196              
197             =item * cauto
198              
199             Determines whether or not the color domain is computed with respect to the input data (here in `marker.color`) or the bounds set in `marker.cmin` and `marker.cmax` Has an effect only if in `marker.color` is set to a numerical array. Defaults to `false` when `marker.cmin` and `marker.cmax` are set by the user.
200              
201             =item * cmax
202              
203             Sets the upper bound of the color domain. Has an effect only if in `marker.color` is set to a numerical array. Value should have the same units as in `marker.color` and if set, `marker.cmin` must be set as well.
204              
205             =item * cmid
206              
207             Sets the mid-point of the color domain by scaling `marker.cmin` and/or `marker.cmax` to be equidistant to this point. Has an effect only if in `marker.color` is set to a numerical array. Value should have the same units as in `marker.color`. Has no effect when `marker.cauto` is `false`.
208              
209             =item * cmin
210              
211             Sets the lower bound of the color domain. Has an effect only if in `marker.color` is set to a numerical array. Value should have the same units as in `marker.color` and if set, `marker.cmax` must be set as well.
212              
213             =item * color
214              
215             Sets the marker color. It accepts either a specific color or an array of numbers that are mapped to the colorscale relative to the max and min values of the array or relative to `marker.cmin` and `marker.cmax` if set.
216              
217             =item * coloraxis
218              
219             Sets a reference to a shared color axis. References to these shared color axes are *coloraxis*, *coloraxis2*, *coloraxis3*, etc. Settings for these shared color axes are set in the layout, under `layout.coloraxis`, `layout.coloraxis2`, etc. Note that multiple color scales can be linked to the same color axis.
220              
221             =item * colorbar
222              
223             =item * colorscale
224              
225             Sets the colorscale. Has an effect only if in `marker.color` is set to a numerical array. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsv, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `marker.cmin` and `marker.cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.
226              
227             =item * colorsrc
228              
229             Sets the source reference on Chart Studio Cloud for `color`.
230              
231             =item * line
232              
233             =item * opacity
234              
235             Sets the opacity of the bars.
236              
237             =item * opacitysrc
238              
239             Sets the source reference on Chart Studio Cloud for `opacity`.
240              
241             =item * reversescale
242              
243             Reverses the color mapping if true. Has an effect only if in `marker.color` 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.
244              
245             =item * showscale
246              
247             Determines whether or not a colorbar is displayed for this trace. Has an effect only if in `marker.color` is set to a numerical array.
248              
249             =back
250              
251             =head1 AUTHOR
252              
253             Pablo Rodríguez González <pablo.rodriguez.gonzalez@gmail.com>
254              
255             =head1 COPYRIGHT AND LICENSE
256              
257             This software is Copyright (c) 2022 by Pablo Rodríguez González.
258              
259             This is free software, licensed under:
260              
261             The MIT (X11) License
262              
263             =cut