File Coverage

blib/lib/Matplotlib/Simple.pm
Criterion Covered Total %
statement 57 1879 3.0
branch 0 562 0.0
condition 0 271 0.0
subroutine 19 38 50.0
pod 0 17 0.0
total 76 2767 2.7


line stmt bran cond sub pod time code
1             # ABSTRACT: Access Matplotlib from Perl; providing consistent user interface between different plot types
2 2     2   126416 use strict;
  2         2  
  2         66  
3 2     2   8 use feature 'say';
  2         4  
  2         2496  
4 2     2   18 use warnings FATAL => 'all';
  2         4  
  2         182  
5 2     2   10 use autodie ':all';
  2         2  
  2         14  
6 2     2   14110 use DDP { output => 'STDOUT', array_max => 10, show_memsize => 1 };
  2         62096  
  2         22  
7 2     2   1448 use Devel::Confess 'color';
  2         13494  
  2         8  
8              
9             package Matplotlib::Simple;
10             require 5.010;
11             our $VERSION = 0.25;
12 2     2   220 use Scalar::Util 'looks_like_number';
  2         2  
  2         128  
13 2     2   14 use List::Util qw(max sum min);
  2         2  
  2         98  
14 2     2   1538 use Term::ANSIColor;
  2         15750  
  2         150  
15 2     2   12 use Cwd 'getcwd';
  2         4  
  2         66  
16 2     2   8 use File::Temp;
  2         2  
  2         176  
17 2     2   12 use DDP { output => 'STDOUT', array_max => 10, show_memsize => 1 };
  2         2  
  2         16  
18 2     2   186 use Devel::Confess 'color';
  2         2  
  2         10  
19 2     2   1646 use FindBin '$RealScript';
  2         2012  
  2         298  
20 2     2   24 use Exporter 'import';
  2         6  
  2         48  
21 2     2   984 use Capture::Tiny 'capture';
  2         11994  
  2         96  
22 2     2   706 use JSON::MaybeXS;
  2         18828  
  2         118  
23 2     2   1042 use MIME::Base64;
  2         1574  
  2         54666  
24             our @EXPORT = qw(plt bar barh boxplot colored_table hexbin hist hist2d imshow pie plot scatter violinplot violin wide);
25             our @EXPORT_OK = @EXPORT;
26              
27             my @ax_methods = (
28             'ArtistList', 'add_child_axes', 'add_collection', 'add_container',
29             'add_image', 'add_line', 'add_patch', 'add_table', 'apply_aspect',
30             'autoscale_view', 'axison', 'bxp', 'callbacks', 'can_pan', 'can_zoom',
31             'child_axes', 'collections', 'containers', 'contains_point', 'dataLim',
32             'drag_pan', 'end_pan', 'fmt_xdata', 'fmt_ydata', 'format_coord',
33             'format_xdata', 'format_ydata','hexbin', 'hist', 'hist2d', 'hlines',
34             'ignore_existing_data_limits', 'in_axes', 'indicate_inset',
35             'indicate_inset_zoom', 'inset_axes', 'invert_xaxis', 'invert_yaxis',
36             'label_outer', 'legend_', 'name', 'pcolorfast', 'redraw_in_frame', 'relim',
37             'reset_position', 'scatter', 'secondary_xaxis', 'secondary_yaxis', 'set_adjustable',
38             'set_anchor', 'set_aspect', 'set_autoscale_on', 'set_autoscalex_on', 'set_autoscaley_on',
39             'set_axes_locator', 'set_axis_off', 'set_axis_on', 'set_axisbelow',
40             'set_box_aspect', 'set_fc', 'set_forward_navigation_events',
41             'set_frame_on', 'set_mouseover( ', 'set_navigate', 'set_navigate_mode',
42             'set_position', 'set_prop_cycle', 'set_rasterization_zorder',
43             'set_subplotspec', 'set_title', 'set_xbound', 'set_xlabel',
44             'set_xlim', # ax.set_xlim(left, right), or ax.set_xlim(right = 180)
45             'set_xmargin', 'set_xscale', 'set_xticklabels', 'set_xticks', 'set_ybound',
46             'set_ylabel', 'set_ylim', 'set_ymargin', 'set_yscale', 'set_yticklabels',
47             'set_yticks', 'sharex', 'sharey', 'spines', 'start_pan', 'tables',
48             'text', 'tick_params', 'ticklabel_format', 'titleOffsetTrans', 'transAxes', 'transData', 'transLimits',
49             'transScale', 'update_datalim', 'use_sticky_edges', 'viewLim', 'vlines', 'violin',
50             'xaxis', 'xaxis_date', 'xaxis_inverted', 'yaxis', 'yaxis_date',
51             'yaxis_inverted'
52             );
53             my @fig_methods = (
54             'add_artist', 'add_axes', 'add_axobserver', 'add_callback', 'add_gridspec',
55             'add_subfigure', 'add_subplot', 'align_labels', 'align_titles',
56             'align_xlabels', 'align_ylabels', 'artists', 'autofmt_xdate', #'axes', # same as plt
57             'bbox', 'bbox_inches', 'canvas', 'clear', 'clf', 'clipbox',
58             'colorbar', # same name as in plt, have to use on case-by-case
59             'contains', 'convert_xunits', 'convert_yunits', 'delaxes', 'dpi',
60             'dpi_scale_trans', 'draw', 'draw_artist', 'draw_without_rendering',
61             'figbbox', 'figimage', # 'figure', 'findobj',
62             'format_cursor_data', 'frameon', 'have_units', 'images', 'is_transform_set', # 'legend', legends',
63             'lines', 'mouseover', 'number', 'patch', 'patches', 'pchanged', 'pick',
64             'pickable', 'properties', 'remove',
65             'remove_callback', #'savefig', keeping plt instead
66             'sca', 'set', 'set_agg_filter', 'set_alpha', 'set_animated', 'set_canvas',
67             'set_clip_box', 'set_clip_on', 'set_clip_path', 'set_constrained_layout',
68             'set_constrained_layout_pads', 'set_dpi', 'set_edgecolor', 'set_facecolor',
69             'set_figheight'
70             , # default 4.8 # 'set_figure', # deprecated as of matplotlib 3.10.0
71             'set_figwidth', # default 6.4
72             'set_frameon', 'set_gid', 'set_in_layout', 'set_label',
73             'set_layout_engine', 'set_linewidth', 'set_mouseover', 'set_path_effects',
74             'set_picker', 'set_rasterized', 'set_size_inches', 'set_sketch_params',
75             'set_snap', 'set_tight_layout', 'set_transform', 'set_url', 'set_visible',
76             'set_zorder', # 'show', # keeping plt instead
77             'stale', 'stale_callback', 'sticky_edges', 'subfigs',
78             'subfigures', # subplot_mosaic',
79             'subplotpars', # subplots','subplots_adjust',
80             'suppressComposite', # 'suptitle', # keeping plt instead
81             'supxlabel', 'supylabel', #'text',
82             'texts', #'tight_layout',
83             'transFigure', 'transSubfigure', 'update',
84             'update_from', #'waitforbuttonpress',
85             'zorder'
86             );
87             my @plt_methods = (
88             'AbstractContextManager', 'Annotation', 'Arrow', 'Artist', 'AutoLocator',
89             'AxLine', 'Axes', 'BackendFilter', 'Button', 'Circle', 'Colorizer',
90             'ColorizingArtist', 'Colormap', 'Enum', 'ExitStack', 'Figure',
91             'FigureBase', 'FigureCanvasBase', 'FigureManagerBase', ' FixedFormatter',
92             'FixedLocator', 'FormatStrFormatter', 'Formatter', 'FuncFormatter',
93             'GridSpec', 'IndexLocator', 'Line2D', 'LinearLocator', 'Locator',
94             'LogFormatter', 'LogFormatterExponent', 'LogFormatterMathtext',
95             'LogLocator', 'MaxNLocator', 'MouseButton', 'MultipleLocator', 'Normalize',
96             'NullFormatter', 'NullLocator', 'PolarAxes', 'Polygon', 'Rectangle',
97             'ScalarFormatter', 'Slider', 'Subplot', 'SubplotSpec', 'TYPE_CHECKING',
98             'Text', 'TickHelper', 'Widget', 'acorr', 'angle_spectrum', 'annotate',
99             'annotations', 'arrow', 'autoscale', 'autumn', 'axes', 'axhline',
100             'axhspan', 'axis', 'axline', 'axvline', 'axvspan', 'backend_registry',
101             'bar_label', 'barbs', 'bone', 'box', 'boxplot',
102             'broken_barh', 'cast', 'cbook', 'cla', 'clabel'
103             , #'clf', # I don't think you'd ever do that, also redundant with fig
104             'clim', 'close', 'cm', 'cohere', 'color_sequences', 'colorbar',
105             'colormaps', 'connect', 'contour', 'contourf', 'cool', 'copper', 'csd',
106             'cycler', 'delaxes', 'disconnect', 'draw', 'draw_all',
107             'draw_if_interactive', 'ecdf', 'errorbar', 'eventplot', 'figaspect',
108             'figimage', 'figlegend', 'fignum_exists', 'figtext', 'figure', 'fill',
109             'fill_between', 'fill_betweenx', 'findobj', 'flag', 'functools', 'gca',
110             'gcf', 'gci', 'get', 'get_backend', 'get_cmap', 'get_current_fig_manager',
111             'get_figlabels', 'get_fignums', 'get_plot_commands', 'get_scale_names',
112             'getp', 'ginput', 'gray', 'grid',
113             'hot', 'hsv', 'importlib', 'imread', 'imsave', 'inferno',
114             'inspect', 'install_repl_displayhook', 'interactive', 'ioff', 'ion',
115             'isinteractive', 'jet', 'legend', 'locator_params', 'logging', 'loglog',
116             'magma', 'magnitude_spectrum', 'margins', 'matplotlib', 'matshow',
117             'minorticks_off', 'minorticks_on', 'mlab', 'new_figure_manager',
118             'nipy_spectral', 'np', 'overload', 'pause', 'pcolor', 'pcolormesh',
119             'phase_spectrum', 'pie', 'pink', 'plasma', 'plot', 'plot_date', 'polar',
120             'prism', 'psd', 'quiver', 'quiverkey', 'rc', 'rcParams', 'rcParamsDefault',
121             'rcParamsOrig', 'rc_context', 'rcdefaults', 'rcsetup', 'rgrids', 'savefig',
122             'sca', #'scatter', # taken by "ax"
123             'sci', 'semilogx', 'semilogy', 'set_cmap', 'set_loglevel', 'setp', 'show',
124             'specgram', 'spring', 'spy', 'stackplot', 'stairs', 'stem', 'step',
125             'streamplot', 'style',
126             'subplot', # nrows, ncols : int, default: 1
127             'subplot2grid', 'subplot_mosaic', 'subplot_tool', 'subplots',
128             'subplots_adjust', 'summer', 'suptitle', 'switch_backend', 'sys', 'table',
129             # 'text'
130             , # text(x: 'float', y: 'float', s: 'str', fontdict: 'dict[str, Any] | None' = None, **kwargs) -> 'Text'
131             'thetagrids', 'threading',# 'tick_params',
132             'tight_layout', 'time', 'title', 'tricontour', 'tricontourf', 'tripcolor',
133             'triplot',
134             #'twinx', 'twiny',
135             'uninstall_repl_displayhook', 'violinplot',
136             'viridis', 'waitforbuttonpress', 'winter', 'xcorr', 'xkcd',# 'vlines'
137             'xlabel','xscale','ylabel', 'ylim', 'yscale',
138             # 'xlim','xticks','yticks'
139             );
140              
141             my @arg = ('add', 'cmap', 'data', 'execute', 'fh','ncols', 'plot.type', 'plots', 'plot', 'output.file', 'nrows', 'scale', 'scalex', 'scaley', 'shared.colorbar', 'show', 'twinx');
142             my @cb_arg = (
143             'cbdrawedges', # for colarbar: Whether to draw lines at color boundaries
144             'cblabel', # The label on the colorbar's long axis
145             'cblocation', # of the colorbar None or {'left', 'right', 'top', 'bottom'}
146             'cborientation', # None or {'vertical', 'horizontal'}
147             'cbpad', # pad : float, default: 0.05 if vertical, 0.15 if horizontal; Fraction of original Axes between colorbar and new image Axes
148             'cb_logscale');
149             my %opt = (
150             barplot_helper => [
151             'color'
152             , # :mpltype:`color` or list of :mpltype:`color`, optional; The colors of the bar faces. This is an alias for *facecolor*. If both are given, *facecolor* takes precedence # if entering multiple colors, quoting isn't needed
153             'edgecolor' , # optional; The colors of the bar edges.
154             'key.order', # define the keys in an order (an array reference)
155             'label', # an array of labels for grouped bar plots
156             'linewidth', # float or array, optional; Width of the bar edge(s). If 0, don't draw edges
157             'log' , # bool, default: False; If *True*, set the y-axis to be log scale.
158             'logscale', # equivalent to "log"
159             'stacked', # stack the groups on top of one another; default 0 = off
160             'width', # float or array, default: 0.8; The width(s) of the bars.
161             'xerr', # float or array-like of shape(N,) or shape(2, N), optional. If not *None*, add horizontal / vertical errorbars to the bar tips. The values are +/- sizes relative to the data: - scalar: symmetric +/- values for all bars # - shape(N,): symmetric +/- values for each bar # - shape(2, N): Separate - and + values for each bar. First row # contains the lower errors, the second row contains the upper # errors. # - *None*: No errorbar. (Default)
162             'yerr', # same as xerr, but better with bar
163             ],
164             boxplot_helper => [
165             'color', # a hash, where keys are the keys in data, and values are colors, e.g. X => 'blue'
166             'colors', 'key.order',
167             'logscale', # array of "x" and/or "y"
168             'notch', # Whether to draw a notched boxplot (`True`), or a rectangular boxplot (`False`)
169             'orientation',# {'vertical', 'horizontal'}, default: 'vertical'
170             'showcaps', # bool: Show the caps on the ends of whiskers; default "True"
171             'showfliers', #bool, default: :rc:`boxplot.showfliers`; Show the outliers beyond the caps.
172             'showmeans' #bool, default: :rc:`boxplot.showmeans`
173             ],
174             colored_table_helper => [@cb_arg,
175             'col.labels',
176             'cmap', # the cmap used for coloring
177             'colorbar.on', # only draw if colorbar is on
178             'default_undefined', # what value should undefined values be assigned to?
179             'mirror', # $data{A}{B} = $data{B}{A}
180             'row.labels', # row labels
181             'shared.colorbar', # array of 0-based indices for sharing a colorbar
182             'show.numbers',# show the numbers or not, by default off. 0 = "off"; "show.numbers" > 0 => "on"
183             'undef.color', # what color will undefined points be
184             ],
185             hexbin_helper => [ @cb_arg,
186             'cb_logscale',
187             'cmap', # "gist_rainbow" by default
188             'colorbar.on', # only draw colorbar if colorbar is on
189             'key.order', # define the keys in an order (an array reference)
190             'marginals', # If marginals is *True*, plot the marginal density as colormapped rectangles along the bottom of the x-axis and left of the y-axis.
191             'mincnt'
192             , # int >= 0, default: 0 If > 0, only display cells with at least *mincnt* number of points in the cell.
193             'shared.colorbar', # array of 0-based indices for sharing a colorbar
194             'vmax'
195             , # When using scalar data and no explicit *norm*, *vmin* and *vmax* define the data range that the colormap cover
196             'vmin'
197             , # When using scalar data and no explicit *norm*, *vmin* and *vmax* define the data range that the colormap cover
198             'xbins', # default 15
199             'xscale.hexbin', # 'linear', 'log'}, default: 'linear': Use a linear or log10 scale on the horizontal axis.
200             'ybins', # default 15
201             'yscale.hexbin', # 'linear', 'log'}, default: 'linear': Use a linear or log10 scale on the vertical axis.
202             ],
203             hist_helper => [
204             'alpha', # default 0.5; same for all sets
205             'bins'
206             , # nt or sequence or str, default: :rc:`hist.bins`If *bins* is an integer, it defines the number of equal-width bins in the range. If *bins* is a sequence, it defines the bin edges, including the left edge of the first bin and the right edge of the last bin; in this case, bins may be unequally spaced. All but the last (righthand-most) bin is half-open
207             'color', # a hash, where keys are the keys in data, and values are colors, e.g. X => 'blue'
208             'colorbar.on', # only draw colorbar if colorbar is on
209             'logscale', # if set to > 1, the y-axis will be logarithmic
210             'orientation', # {'vertical', 'horizontal'}, default: 'vertical'
211             'shared.colorbar', # array of 0-based indices for sharing a colorbar
212             ],
213             hist2d_helper => [@cb_arg,
214             'cb_logscale',
215             'cmap', # "gist_rainbow" by default
216             'cmax', # All bins that has count < *cmin* or > *cmax* will not be displayed
217             'cmin', # color min
218             'colorbar.on', # only draw colorbar if colorbar is on
219             'density', # density : bool, default: False
220             'key.order', # define the keys in an order (an array reference)
221             'logscale', # logscale, an array of axes that will get log scale
222             'shared.colorbar', # array of 0-based indices for sharing a colorbar
223             'show.colorbar',
224             'vmax'
225             , # When using scalar data and no explicit *norm*, *vmin* and *vmax* define the data range that the colormap cover
226             'vmin'
227             , # When using scalar data and no explicit *norm*, *vmin* and *vmax* define the data range that the colormap cover
228             'xbins', # default 15
229             'xmin', 'xmax', 'ymin', 'ymax',
230             'ybins', # default 15
231             ],
232             imshow_helper => [@cb_arg,
233             'cblabel', # colorbar label
234             'cbdrawedges', # for colorbar
235             'cblocation', # of the colorbar None or {'left', 'right', 'top', 'bottom'}
236             'cborientation', # None or {'vertical', 'horizontal'}
237             'cmap', # The Colormap instance or registered colormap name used to map scalar data to colors
238             'colorbar.on', # only draw if colorbar is on
239             'shared.colorbar', # array of 0-based indices for sharing a colorbar
240             'stringmap', # 'H' => 'Alpha helix'
241             'vmax', # float
242             'vmin', # flat
243             ],
244             pie_helper => [
245             'autopct', # percent wise
246             #labeldistance and pctdistance are ratios of the radius; therefore they vary between 0 for the center of the pie and 1 for the edge of the pie, and can be set to greater than 1 to place text outside the pie https://matplotlib.org/stable/gallery/pie_and_polar_charts/pie_features.html
247             'labeldistance',
248             'pctdistance',
249             ],
250             plot_helper => [
251             'key.order', # an array of key strings (which are defined in data)
252             'logscale', # an array of "x" and/or "y"
253             'show.legend', # be default on; should be 0 if off
254             'set.options',
255             'twinx.args'
256             ],
257             scatter_helper => [
258             'color_key', # which of data keys is the color key
259             'cmap', # for 3-set scatterplots; default "gist_rainbow"
260             'colorbar.on', # only draw colorbar if colorbar is on
261             'keys', # specify the order, otherwise alphabetical #'log', # if set to > 1, the y-axis will be logarithmic # 's', # float or array-like, shape (n, ), optional. The marker size in points**2 (typographic points are 1/72 in.).
262             'logscale', # "x" and/or "y" as an aray
263             'shared.colorbar', # array of 0-based indices for sharing a colorbar
264             'set.options' # color = 'red', marker = 'v', etc.
265             ],
266             violin_helper => [
267             'color', # a hash, where keys are the keys in data, and values are colors, e.g. X => 'blue'
268             'colorbar.on',# only draw colorbar if colorbar is on
269             'colors',
270             'key.order',
271             'logscale', # array: "x" and/or "y"
272             'orientation',# {'vertical', 'horizontal'}, default: 'vertical'
273             'whiskers'
274             ],
275             wide_helper => [
276             'color', # a hash, with each key assigned to a color "blue" or something
277             'show.legend', # be default on; should be 0 if off
278             ],
279             );
280             sub write_data {
281 0     0 0   my ($args) = @_;
282 0           my $current_sub = ( split( /::/, ( caller(0) )[3] ) )[-1];
283 0 0         if ( ref $args ne 'HASH' ) {
284 0           die "args must be given as a hash ref, e.g. \"$current_sub({ data => ... })\"";
285             }
286 0           my @reqd_args = (
287             'data', # args to original function (scalar, hashref, or arrayref)
288             'fh', # file handle
289             'name' # python variable name
290             );
291 0           my @undef_args = grep { not defined $args->{$_} } @reqd_args;
  0            
292 0 0         if (scalar @undef_args > 0) {
293 0           p @undef_args;
294 0           die "the above args are required for $current_sub, but weren't defined";
295             }
296             # 1. Create the JSON Encoder; allow_nonref: allows scalars (strings/numbers) to be encoded
297 0           my $json_encoder = JSON::MaybeXS->new->utf8->allow_nonref;
298             # 2. Serialize Perl Data -> JSON String; Passing data directly. JSON::MaybeXS handles refs + scalars automatically.
299 0           my $json_string = $json_encoder->encode($args->{data});
300             # 3. Base64 Encode the JSON String, not the reference
301 0           my $b64_data = encode_base64($json_string, '');
302             # Assign the b64 string to a temp python variable
303 0           say {$args->{fh}} "$args->{name}_b64 = '$b64_data'";
  0            
304             # Decode b64 -> bytes -> utf8 string -> json load -> python object
305 0           say {$args->{fh}} "$args->{name} = json.loads(base64.b64decode($args->{name}_b64).decode('utf-8'))";
  0            
306             }
307             sub plot_args { # this is a helper function to other matplotlib subroutines
308 0     0 0   my ($args) = @_;
309 0           my $current_sub = ( split( /::/, ( caller(0) )[3] ) )[-1];
310 0 0         if ( ref $args ne 'HASH' ) {
311 0           die "args must be given as a hash ref, e.g. \"$current_sub({ data => \@blah })\"";
312             }
313 0           my @reqd_args = (
314             'ax', # ax1, ax2, etc. when there are multiple plots
315             'fh', # e.g. $py, $fh, which will be passed by the subroutine
316             'args', # args to original function
317             );
318 0           my @undef_args = grep { !defined $args->{$_} } @reqd_args;
  0            
319 0 0         if ( scalar @undef_args > 0 ) {
320 0           p @undef_args;
321 0           die 'the above args are necessary, but were not defined.';
322             }
323 0           my @defined_args = ( @reqd_args, @ax_methods, @fig_methods, @plt_methods, @arg, @cb_arg );
324             my @bad_args = grep {
325 0           my $key = $_;
326 0           not grep { $_ eq $key } @defined_args
  0            
327 0           } keys %{$args};
  0            
328 0 0         if ( scalar @bad_args > 0 ) {
329 0           p @bad_args, array_max => scalar @bad_args;
330 0           say 'the above arguments are not recognized.';
331 0           p @defined_args, array_max => scalar @defined_args;
332 0           die 'The above args are accepted.';
333             }
334 0   0       $args->{ax} = $args->{ax} // 'ax';
335 0           foreach my $item (
336 0           grep { defined $args->{args}{$_} } ( # no quotes!
337             'set_title', 'set_xlabel', 'set_ylabel', 'suptitle',
338             'xlabel', 'ylabel', 'title'
339             )
340             )
341             {
342 0 0         if ( $args->{args}{$item} =~ m/^([^\"\',]+)$/ ) {
343 0           $args->{args}{$item} = "'$args->{args}{$item}'";
344             }
345             }
346 0           my @obj = ( $args->{ax}, 'fig', 'plt' );
347 0           my @args = ( \@ax_methods, \@fig_methods, \@plt_methods );
348 0           foreach my $i ( 0 .. $#args ) {
349 0           foreach my $method ( grep { defined $args->{args}{$_} } @{ $args[$i] } ) {
  0            
  0            
350 0           my $ref = ref $args->{args}{$method};
351 0 0 0       if ( ( $ref ne 'ARRAY' ) && ( $ref ne '' ) ) {
352 0           die "$current_sub only accepts scalar or array types, but \"$ref\" was entered.";
353             }
354 0 0         if ( $ref eq '' ) {
355 0 0         if ($method eq 'show') {
356 0           say {$args->{fh}} "$obj[$i].$method()" . '#line' . __LINE__;
  0            
357             } else {
358 0           say {$args->{fh}} "$obj[$i].$method($args->{args}{$method}) #line" . __LINE__;
  0            
359             }
360 0           next;
361             }
362             # can only be ARRAY
363 0           foreach my $j ( @{ $args->{args}{$method} } ) {
  0            
364 0           say { $args->{fh} } "$obj[$i].$method($j) #line" . __LINE__;
  0            
365             }
366             }
367             }
368 0 0         return unless defined $args->{ax};
369 0   0       my $legend = $args->{args}{legend} // '';
370 0           my $pie_plot = 0;
371 0 0 0       if ( ( defined $args->{args}{'plot.type'} )
372             && ( $args->{args}{'plot.type'} eq 'pie' ) ) {
373 0           $pie_plot = 1;
374             }
375 0 0         return 1 if $pie_plot == 1;
376             # pie charts don't get legends
377 0           say { $args->{fh} }
  0            
378             "handles, labels = $args->{ax}.get_legend_handles_labels()";
379 0           say { $args->{fh} } 'if len(labels) > 0:';
  0            
380 0           say { $args->{fh} } "\t$args->{ax}.legend($legend)";
  0            
381             }
382             sub barplot_helper { # this is a helper function to other matplotlib subroutines
383 0     0 0   my ($args) = @_;
384 0           my $current_sub = ( split( /::/, ( caller(0) )[3] ) )[-1]
385             ; # https://stackoverflow.com/questions/2559792/how-can-i-get-the-name-of-the-current-subroutine-in-perl
386 0 0         if ( ref $args ne 'HASH' ) {
387 0           die
388             "args must be given as a hash ref, e.g. \"$current_sub({ data => \@blah })\"";
389             }
390 0           my @reqd_args = (
391             'fh', # e.g. $py, $fh, which will be passed by the subroutine
392             'plot', # args to original function
393             );
394 0           my @undef_args = grep { !defined $args->{$_} } @reqd_args;
  0            
395 0 0         if ( scalar @undef_args > 0 ) {
396 0           p @undef_args;
397 0           die 'the above args are necessary, but were not defined.';
398             }
399 0           my @opt = ('ax', @reqd_args, @ax_methods, @plt_methods, @fig_methods, @arg, @{ $opt{$current_sub} } );
  0            
400 0           my $plot = $args->{plot};
401             my @bad_opt = grep {
402 0           my $key = $_;
403 0           not grep { $_ eq $key } @opt
  0            
404 0           } keys %{$plot};
  0            
405 0   0       my $ax = $args->{ax} // '';
406 0 0         if ( scalar @bad_opt > 0 ) {
407 0           p @bad_opt;
408 0           die
409             "The above arguments aren't defined for $plot->{'plot.type'} at plot position $ax";
410             }
411 0           my ( %ref_counts, $plot_type );
412 0           foreach my $set ( keys %{ $plot->{data} } ) {
  0            
413 0           $ref_counts{ ref $plot->{data}{$set} }++;
414             }
415 0 0         if ( scalar keys %ref_counts > 1 ) {
416 0           p $plot->{data};
417 0           p %ref_counts;
418 0           die
419             "different kinds of data were entered to plot $ax which should be simple hash or hash of arrays.";
420             }
421 0 0         if ( defined $ref_counts{''} ) {
    0          
    0          
422 0           $plot_type = 'simple';
423             } elsif ( defined $ref_counts{'ARRAY'} ) {
424 0           $plot_type = 'grouped';
425             } elsif ( defined $ref_counts{'HASH'} ) {
426 0           $plot_type = 'grouped'; # now make the hash of hash into a ARRAY structure
427 0           my %key2;
428 0           foreach my $key1 ( keys %{ $plot->{data} } ) {
  0            
429 0           foreach my $key2 ( keys %{ $plot->{data}{$key1} } ) {
  0            
430 0           $key2{$key2}++;
431             }
432             }
433 0           my @key2 = sort { lc $a cmp lc $b } keys %key2;
  0            
434 0           my %new_structure;
435 0           foreach my $k1 ( keys %{ $plot->{data} } ) {
  0            
436 0           @{ $new_structure{$k1} } = @{ $plot->{data}{$k1} }{@key2};
  0            
  0            
437             }
438 0           @{ $plot->{label} } = @key2;
  0            
439 0           $plot->{data} = \%new_structure;
440             } else {
441 0           p %ref_counts;
442 0           p $plot->{data};
443 0           die 'the above plot type is not yet programmed in to bar/barh';
444             }
445 0   0       $plot->{stacked} = $plot->{stacked} // 0;
446 0 0 0       if ( ( $plot_type eq 'grouped' )
      0        
447             && ( defined $plot->{width} )
448             && ( $plot->{stacked} == 0 ) )
449             {
450 0           say STDERR 'grouped, non-stacked barplots ignore width settings';
451 0           delete $plot->{width};
452             }
453 0           my @key_order;
454 0 0         if ( defined $plot->{'key.order'} ) {
455 0           @key_order = @{ $plot->{'key.order'} };
  0            
456             } else {
457 0           @key_order = sort keys %{ $plot->{data} };
  0            
458             }
459 0           my $options = ''; # these args go to the plt.bar call
460 0 0 0       if ( $plot->{'log'} || $plot->{logscale}) {
461 0           $options .= ', log = True';
462             } # args that can be either arrays or strings below; STRINGS:
463 0           foreach my $c ( grep { defined $plot->{$_} } ( 'color', 'edgecolor' ) ) {
  0            
464 0 0 0       next if ( ( $c eq 'color' ) && ( $plot_type eq 'grouped' ) );
465 0           my $ref = ref $plot->{$c};
466 0 0         if ( $ref eq '' ) { # single color
    0          
    0          
467 0           $options .= ", $c = '$plot->{$c}'";
468             } elsif ( $ref eq 'ARRAY' ) {
469 0           $options .= ", $c = [\"" . join( '","', @{ $plot->{$c} } ) . '"]';
  0            
470             } elsif ( $ref eq 'HASH') {
471            
472             } else {
473 0           die "ref \"$ref\" isn't defined";
474             }
475             } # args that can be either arrays or strings below; NUMERIC:
476 0           foreach my $c ( grep { defined $plot->{$_} } ('linewidth') ) {
  0            
477 0           my $ref = ref $plot->{$c};
478 0 0         if ( $ref eq '' ) { # single color
    0          
479 0           $options .= ", $c = $plot->{$c}";
480             } elsif ( $ref eq 'ARRAY' ) {
481 0           $options .= ", $c = [" . join( ',', @{ $plot->{$c} } ) . ']';
  0            
482             } else {
483 0           p $args;
484 0           die "$ref for $c isn't acceptable";
485             }
486             }
487 0           foreach my $err ( grep { defined $plot->{$_} } ( 'xerr', 'yerr' ) ) {
  0            
488 0           my $ref = ref $plot->{$err};
489 0 0         if ( $ref eq '' ) {
    0          
490 0           $options .= ", $err = $plot->{$err}";
491             } elsif ( $ref eq 'HASH' ) { # I assume that it's all defined
492 0           my ( @low, @high );
493 0           foreach my $i (@key_order) {
494 0 0         if ( scalar @{ $plot->{$err}{$i} } != 2 ) {
  0            
495 0           p $plot->{$err}{$i};
496 0           die "$err/$i should have exactly 2 items: low and high error bars";
497             }
498 0           push @low, $plot->{$err}{$i}[0];
499 0           push @high, $plot->{$err}{$i}[1];
500             }
501             $options .=
502 0           ", $err = [["
503             . join( ',', @low ) . '],['
504             . join( ',', @high ) . ']]';
505             } else {
506 0           p $args;
507 0           die "$ref for $err isn't acceptable";
508             }
509             }
510 0 0         if ( $plot_type eq 'simple' ) { # a simple hash -> simple bar plot
    0          
511             write_data({
512             data => \@key_order,
513             fh => $args->{fh},
514 0           name => 'labels'
515             });
516 0           say { $args->{fh} } 'vals = [' . join( ',', @{ $plot->{data} }{@key_order} ) . ']';
  0            
  0            
517 0 0 0       if ((defined $plot->{color}) && (ref $plot->{color} eq 'HASH')) {
518 0           @undef_args = grep {not defined $plot->{color}{$_}} @key_order;
  0            
519 0 0         if (scalar @undef_args > 0) {
520 0           p @undef_args;
521 0           die 'the above keys were not defined in the colors hash';
522             }
523 0           $options .= ',color = ["' . join ('","', @{ $plot->{color} }{@key_order} ) . '"]';
  0            
524             }
525 0           say { $args->{fh} } "ax$ax.$plot->{'plot.type'}(labels, vals $options)";
  0            
526             } elsif ( $plot_type eq 'grouped' ) { # grouped bar plot; hash of array
527 0           my @val;
528 0           foreach my $k (@key_order) {
529 0           foreach my $i ( 0 .. scalar @{ $plot->{data}{$k} } - 1 ) {
  0            
530 0           push @{ $val[$i] }, $plot->{data}{$k}[$i];
  0            
531             }
532             }
533 0   0       my $barwidth = $plot->{width} // 0.8;
534 0   0       $plot->{stacked} = $plot->{stacked} // 0;
535 0 0         if ( $plot->{stacked} == 0 ) {
536 0           $barwidth /= ( (scalar keys %ref_counts) + 3 );
537             }
538 0           my @xticks = 0 .. scalar @{ $val[0] } - 1;
  0            
539 0           my @mean_pos = map { 0 } 0 .. scalar @{ $val[0] } - 1; # initialize
  0            
  0            
540 0           my $hw = 'height';
541 0 0         $hw = 'width' if $plot->{'plot.type'} eq 'bar';
542 0           my @bottom = map { 0 } 0 .. scalar @{ $val[0] } - 1; # initialize
  0            
  0            
543 0           my $i = 0;
544 0           foreach my $arr (@val) {
545 0           my $x = '[' . join( ',', @xticks ) . ']';
546 0           foreach my $p ( 0 .. $#mean_pos ) {
547 0           $mean_pos[$p] += $xticks[$p];
548             }
549 0           my $set_options = '';
550 0           foreach
551 0           my $f ( grep { defined $plot->{$_}[$i] } ( 'color', 'label' ) )
552             {
553 0           $set_options .= ", $f = '$plot->{$f}[$i]'";
554             }
555 0 0         if ( $plot->{stacked} > 0 ) {
556 0           $set_options .= ', bottom = [' . join( ',', @bottom ) . ']';
557             }
558 0           say { $args->{fh} } "ax$ax.$plot->{'plot.type'}($x, ["
559 0           . join( ',', @{$arr} )
  0            
560             . "], $hw = $barwidth $options $set_options)";
561             @bottom =
562 0           map { $bottom[$_] + $arr->[$_] } 0 .. scalar @{ $val[0] } - 1
  0            
563 0 0         if $plot->{stacked} > 0;
564 0           @xticks = map { $_ + $barwidth } @xticks
565 0 0         if $plot->{stacked} <= 0; # for next iteration
566 0           $i++;
567             }
568 0           my $xticks = '["' . join( '","', @key_order ) . '"]';
569 0           my $ticks = 'yticks';
570 0 0         $ticks = 'xticks' if $plot->{'plot.type'} eq 'bar';
571 0           $_ /= scalar @val for @mean_pos;
572 0           say { $args->{fh} } "ax$ax.set_$ticks(["
  0            
573             . join( ',', @mean_pos )
574             . "], $xticks)";
575             } else {
576 0           die
577             "\$plot_type = $plot_type & stacked = $plot->{stacked}and isn't defined.";
578             }
579             }
580              
581             sub boxplot_helper {
582 0     0 0   my ($args) = @_;
583 0           my $current_sub = ( split( /::/, ( caller(0) )[3] ) )[-1]
584             ; # https://stackoverflow.com/questions/2559792/how-can-i-get-the-name-of-the-current-subroutine-in-perl
585 0 0         if ( ref $args ne 'HASH' ) {
586 0           die "args must be given as a hash ref, e.g. \"$current_sub({ data => \@blah })\"";
587             }
588 0           my @reqd_args = (
589             'fh', # e.g. $py, $fh, which will be passed by the subroutine
590             'plot', # args to original function
591             );
592 0           my @undef_args = grep { !defined $args->{$_} } @reqd_args;
  0            
593 0 0         if ( scalar @undef_args > 0 ) {
594 0           p @undef_args;
595 0           die 'the above args are necessary, but were not defined.';
596             }
597             my @opt = (
598 0           @ax_methods, @plt_methods, @fig_methods, @arg, 'ax', @{ $opt{$current_sub} }
  0            
599             );
600 0           my $plot = $args->{plot};
601             my @bad_opt = grep {
602 0           my $key = $_;
603 0           not grep { $_ eq $key } @opt
  0            
604 0           } keys %{$plot};
  0            
605 0 0         if ( scalar @bad_opt > 0 ) {
606 0           p @bad_opt;
607 0           die "The above arguments aren't defined for $plot->{'plot.type'} using $current_sub";
608             }
609 0   0       $plot->{orientation} = $plot->{orientation} // 'vertical';
610 0 0         if ( $plot->{orientation} !~ m/^(?:horizontal|vertical)$/ ) {
611 0           die
612             "$current_sub needs either \"horizontal\" or \"vertical\", not \"$plot->{orientation}\"";
613             }
614 0           my ( @xticks, @key_order );
615 0 0         if ( defined $plot->{'key.order'} ) {
616 0           @key_order = @{ $plot->{'key.order'} };
  0            
617             } else {
618 0           @key_order = sort keys %{ $plot->{data} };
  0            
619             }
620 0   0       my $ax = $args->{ax} // '';
621             # $plot->{medians} = $plot->{medians} // 1; # by default, show median values
622 0   0       $plot->{notch} = $plot->{notch} // 'False';
623 0   0       $plot->{showcaps} = $plot->{showcaps} // 'True';
624 0   0       $plot->{showfliers} = $plot->{showfliers} // 'True';
625 0   0       $plot->{showmeans} = $plot->{showmeans} // 'True';
626 0           my $options = "orientation = '$plot->{orientation}'";
627 0           foreach my $arg ( 'showcaps', 'showfliers', 'showmeans', 'notch') {
628 0           $options .= ", $arg = $plot->{$arg}";
629             }
630 0           foreach my $axis (@{ $plot->{logscale} }) { # x, y
  0            
631 0 0         if ($axis =~ m/^([^xy])$/) {
632 0           p $plot->{logscale};
633 0           die "only \"x\" and \"y\" are allowed in boxplot, not \"$axis\"";
634             }
635 0           say {$args->{fh}} "ax$ax.set_$axis" . 'scale("log")';
  0            
636             }
637 0           say { $args->{fh} } 'd = []';
  0            
638 0           foreach my $key (@key_order) {
639 0           @{ $plot->{data}{$key} } = grep { defined } @{ $plot->{data}{$key} };
  0            
  0            
  0            
640 0           say { $args->{fh} } 'd.append(['
641 0           . join( ',', @{ $plot->{data}{$key} } ) . '])';
  0            
642             }
643 0           say { $args->{fh} } "bp = ax$ax.boxplot(d, patch_artist = True, $options)";
  0            
644 0 0         if ( defined $plot->{colors} ){ # every hash key should have its own color defined
645             # the below code helps to provide better error messages in case I make an error in calling the sub
646             my @bad_keys =
647 0           grep { not defined $plot->{colors}{$_} } keys %{ $plot->{data} };
  0            
  0            
648 0 0         if ( scalar @bad_keys > 0 ) {
649 0           p @bad_keys;
650 0           die 'the above data keys have no defined color';
651             }
652              
653             # list of pre-defined colors: https://matplotlib.org/stable/gallery/color/named_colors.html
654 0           print { $args->{fh} } 'colors = ["'
655 0           . join( '","', @{ $plot->{colors} }{@key_order} ) . '"]' . "\n";
  0            
656              
657             # the above color list will have the same order, via the above hash slice
658 0           say { $args->{fh} } 'for patch, color in zip(bp["boxes"], colors):';
  0            
659 0           say { $args->{fh} } "\tpatch.set_facecolor(color)";
  0            
660 0           say { $args->{fh} } "\tpatch.set_edgecolor('black')";
  0            
661             } else {
662 0           say { $args->{fh} } 'for pc in bp["boxes"]:';
  0            
663 0 0         if ( defined $plot->{color} ) {
664 0           say { $args->{fh} } "\tpc.set_facecolor('$plot->{color}')";
  0            
665             }
666 0           say { $args->{fh} } "\tpc.set_edgecolor('black')";
  0            
667             }
668 0           foreach my $key (@key_order) {
669             push @xticks, "$key ("
670 0           . format_commas( scalar @{ $plot->{data}{$key} }, '%.0u' ) . ')';
  0            
671             }
672 0 0         if ( $plot->{orientation} eq 'vertical' ) {
673 0           say { $args->{fh} } "ax$ax.set_xticks(["
  0            
674             . join( ',', 1 .. scalar @key_order ) . '], ["'
675             . join( '","', @xticks ) . '"])';
676             } else {
677 0           say { $args->{fh} } "ax$ax.set_yticks(["
  0            
678             . join( ',', 1 .. scalar @key_order ) . '], ["'
679             . join( '","', @xticks ) . '"])';
680             }
681             }
682              
683             sub colored_table_helper {
684 0     0 0   my ($args) = @_;
685 0           my $current_sub = (split(/::/,(caller(0))[3]))[-1]; # https://stackoverflow.com/questions/2559792/how-can-i-get-the-name-of-the-current-subroutine-in-perl
686 0 0         if (ref $args ne 'HASH') {
687 0           die "args must be given as a hash ref, e.g. \"$current_sub({ data => \@blah })\"";
688             }
689 0           my @reqd_args = (
690             'fh', # e.g. $py, $fh, which will be passed by the subroutine
691             'plot', # args to original function
692             );
693 0           my @undef_args = grep {!defined $args->{$_}} @reqd_args;
  0            
694 0 0         if (scalar @undef_args > 0) {
695 0           p @undef_args;
696 0           die "The arguments above are necessary for proper function of $current_sub and weren't defined.";
697             }
698             # optional args are below
699             my @defined_args = (@reqd_args, @ax_methods, @plt_methods, @fig_methods, @arg,
700 0           'ax', @{ $opt{$current_sub} });
  0            
701 0           my @bad_args = grep { my $key = $_; not grep {$_ eq $key} @defined_args} keys %{ $args };
  0            
  0            
  0            
  0            
702 0 0         if (scalar @bad_args > 0) {
703 0           p @bad_args;
704 0           say 'the above arguments are not recognized.';
705 0           p @defined_args;
706 0           die 'The above args are accepted.'
707             }
708 0           my $plot = $args->{plot};
709 0   0       $plot->{default_undefined} = $plot->{default_undefined} // 0;
710 0   0       $plot->{mirror} = $plot->{mirror} // 0;
711             # my @data;
712 0           my (@cols, @rows, %data);
713 0 0         if (defined $plot->{'col.labels'}) {
714 0           @cols = @{ $plot->{'col.labels'} };
  0            
715             } else {
716 0           @cols = sort keys %{ $plot->{data} };
  0            
717             }
718 0           foreach my $k1 (@cols) {
719 0           foreach my $k2 (keys %{ $plot->{data}{$k1} }) {
  0            
720 0           $data{$k1}{$k2} = $plot->{data}{$k1}{$k2};
721 0 0         $data{$k2}{$k1} = $data{$k1}{$k2} if $plot->{mirror} > 0;
722             }
723             }
724 0 0         if (defined $plot->{'row.labels'}) {
725 0           @rows = @{ $plot->{'row.labels'} };
  0            
726             } else {
727 0           @rows = sort keys %data;
728             }
729 0           my ($min, $max) = ('inf', '-inf');
730 0           say {$args->{fh}} 'd = []';
  0            
731 0           say {$args->{fh}} 'import numpy as np';
  0            
732 0           foreach my $k1 (@cols) {
733 0           foreach my $k2 (grep {!defined $data{$k1}{$_}} @cols) {
  0            
734 0           $data{$k1}{$k2} = 'np.nan';#$plot->{default_undefined};
735 0           $data{$k2}{$k1} = 'np.nan';#$plot->{default_undefined};
736             }
737 0           foreach my $k2 (grep {looks_like_number($data{$k1}{$_})} @cols) {
  0            
738 0           $min = min($min, $data{$k1}{$k2});
739 0           $max = max($max, $data{$k1}{$k2});
740             }
741 0           say {$args->{fh}} 'd.append([' . join (',', @{ $data{$k1} }{@cols}) . '])';
  0            
  0            
742             }
743 0   0       $min = $args->{cb_min} // $min;
744 0   0       $max = $args->{cb_max} // $max;
745 0   0       $plot->{cmap} = $plot->{cmap} // 'gist_rainbow';
746 0   0       $plot->{cb_logscale} = $plot->{cb_logscale} // 0;
747 0   0       my $ax = $args->{ax} // '';
748 0 0         say {$args->{fh}} 'from matplotlib import colors' if $plot->{cb_logscale} > 0;
  0            
749 0   0       $plot->{'undef.color'} = $plot->{'undef.color'} // 'gray';
750 0           say {$args->{fh}} 'plt.cm.gist_rainbow.set_bad("' . $plot->{'undef.color'} . '")';
  0            
751 0           say {$args->{fh}} "norm = plt.Normalize($min, $max)";
  0            
752 0           say {$args->{fh}} 'datacolors = plt.cm.gist_rainbow(norm(d))';
  0            
753 0           my @options;
754 0           my %translate = (cb_min => 'vmin', cb_max => 'vmax');
755 0           foreach my $opt (grep {defined $plot->{$_}} 'cb_min', 'cb_max'){
  0            
756 0 0         unless (looks_like_number( $plot->{$opt} )) {
757 0           die "\"$opt\" = $plot->{$opt} must be a number";
758             }
759 0           push @options, "$translate{$opt} = $plot->{$opt}";
760             }
761 0           my $opt = join (',', @options);
762 0 0         if ($plot->{cb_logscale}) {
763 0           say {$args->{fh}} "img = ax$ax.imshow(d, cmap='$plot->{cmap}', norm=colors.LogNorm($opt))";
  0            
764             } else {
765 0           say {$args->{fh}} "img = ax$ax.imshow(d, cmap='$plot->{cmap}' $opt)";
  0            
766             }
767 0   0       $plot->{'colorbar.on'} = $plot->{'colorbar.on'} // 1;
768 0 0         if (defined $plot->{cblabel}) {
769 0           say {$args->{fh}} "fig.colorbar(img, label = '$plot->{cblabel}')";
  0            
770             } else {
771 0 0         say {$args->{fh}} "fig.colorbar(img)" if $plot->{'colorbar.on'};
  0            
772             }
773 0           say {$args->{fh}} 'img.set_visible(False)';
  0            
774 0   0       $plot->{'show.numbers'} = $plot->{'show.numbers'} // 0;
775 0           say {$args->{fh}} 'for ri, row in enumerate(d):';
  0            
776 0           say {$args->{fh}} ' for ii, item in enumerate(row):';
  0            
777 0           say {$args->{fh}} ' if np.isnan(item):';
  0            
778 0           say {$args->{fh}} ' d[ri][ii] = ""';
  0            
779 0 0         if ($plot->{'show.numbers'}) {
780 0           say {$args->{fh}} "table = ax$ax" . '.table(cellText=d, rowLabels=["' . join ('","', @rows) . '"], colLabels = ["' . join ('","', @cols) . '"], cellColours = datacolors, loc = "center", bbox=[0,0,1,1])';
  0            
781             } else {
782 0           say {$args->{fh}} "table = ax$ax" . '.table(rowLabels=["' . join ('","', @rows) . '"], colLabels = ["' . join ('","', @cols) . '"], cellColours = datacolors, loc = "center", bbox=[0,0,1,1])';
  0            
783             }
784 0           foreach my $arg (grep {defined $plot->{$_}} ('title')) {
  0            
785 0           say {$args->{fh}} "ax$ax.$arg('$plot->{$arg}')";
  0            
786             }
787 0           foreach my $axis (@{ $plot->{logscale} }) { # x, y
  0            
788 0 0         if ($axis =~ m/^([^xy])$/) {
789 0           p $plot->{logscale};
790 0           die "only \"x\" and \"y\" are allowed in boxplot, not \"$axis\"";
791             }
792 0           say {$args->{fh}} "ax$ax.set_$axis" . 'scale("log")';
  0            
793             }
794             # say {$args->{fh}} "fig.clim(vmin = $plot->{cb_min})" if defined $plot->{cb_min};
795             # say {$args->{fh}} "fig.clim(vmax = $plot->{cb_max})" if defined $plot->{cb_max};
796 0           foreach my $axis ('x','y') {
797 0           say {$args->{fh}} "ax$ax.set_${axis}ticks" . '([])';
  0            
798 0           say {$args->{fh}} "ax$ax.set_${axis}ticklabels" . '([])';
  0            
799             }
800             }
801              
802             sub hexbin_helper {
803 0     0 0   my ($args) = @_;
804 0           my $current_sub = ( split( /::/, ( caller(0) )[3] ) )[-1]
805             ; # https://stackoverflow.com/questions/2559792/how-can-i-get-the-name-of-the-current-subroutine-in-perl
806 0 0         if ( ref $args ne 'HASH' ) {
807 0           die "args must be given as a hash ref, e.g. \"$current_sub({ data => \@blah })\"";
808             }
809 0           my @reqd_args = (
810             'fh', # e.g. $py, $fh, which will be passed by the subroutine
811             'plot', # args to original function
812             );
813 0           my @undef_args = grep { !defined $args->{$_} } @reqd_args;
  0            
814 0 0         if ( scalar @undef_args > 0 ) {
815 0           p @undef_args;
816 0           die 'the above args are necessary, but were not defined.';
817             }
818             my @opt = (
819             @ax_methods, @fig_methods, @arg, @plt_methods,
820 0           'ax', @{ $opt{$current_sub} }
  0            
821             );
822 0           my $plot = $args->{plot};
823             @undef_args = grep {
824 0           my $key = $_;
825 0           not grep { $_ eq $key } @opt
  0            
826 0           } keys %{$plot};
  0            
827 0 0         if ( scalar @undef_args > 0 ) {
828 0           p @undef_args;
829 0           die "The above arguments aren't defined for $plot->{'plot.type'} in $current_sub";
830             }
831 0   0       $plot->{cb_logscale} = $plot->{cb_logscale} // 0;
832 0   0       $plot->{marginals} = $plot->{marginals} // 0;
833 0   0       $plot->{xbins} = $plot->{xbins} // 15;
834 0   0       $plot->{ybins} = $plot->{ybins} // 15;
835 0           $plot->{xbins} = int $plot->{xbins};
836 0           $plot->{ybins} = int $plot->{ybins};
837 0 0 0       if ( ( $plot->{xbins} == 0 ) || ( $plot->{ybins} == 0 ) ) {
838 0           p $plot;
839 0           die "# of bins cannot be 0 in $current_sub";
840             }
841 0           my @keys;
842 0 0         if ( defined $plot->{'key.order'} ) {
843 0           @keys = @{ $plot->{'key.order'} };
  0            
844             } else {
845 0           @keys = sort keys %{ $plot->{data} };
  0            
846             }
847 0 0         if ( scalar @keys != 2 ) {
848 0           p @keys;
849 0           die "There must be exactly 2 keys for $current_sub";
850             }
851 0           my $n_points = scalar @{ $plot->{data}{ $keys[0] } };
  0            
852 0 0         if ( scalar @{ $plot->{data}{ $keys[1] } } != $n_points ) {
  0            
853 0           say "\"$keys[0]\" has $n_points points.";
854             say "\"$keys[1]\" has "
855 0           . scalar @{ $plot->{data}{ $keys[1] } }
  0            
856             . " points.";
857 0           die 'The length of both keys must be equal.';
858             }
859 0   0       $plot->{xlabel} = $plot->{xlabel} // $keys[0];
860 0   0       $plot->{ylabel} = $plot->{ylabel} // $keys[1];
861 0   0       $plot->{cmap} = $plot->{cmap} // 'gist_rainbow';
862 0           my $options =
863             ", gridsize = ($plot->{xbins}, $plot->{ybins}), cmap = '$plot->{cmap}'"
864             ; # these args go to the plt.hist call
865 0 0         if ( $plot->{cb_logscale} ) {
866 0           say { $args->{fh} } 'from matplotlib.colors import LogNorm';
  0            
867 0           $options .= ', norm = LogNorm()';
868             }
869 0           foreach my $opt (
870 0           grep { defined $plot->{$_} } ('xrange', 'yrange', 'vmin', 'vmax', 'mincnt')
871             )
872             {
873 0           $options .= ", $opt = $plot->{$opt}";
874             }
875 0           foreach my $opt (grep {defined $plot->{$_} } ('xscale.hexbin', 'yscale.hexbin')) {
  0            
876 0 0 0       if (($plot->{$opt} ne 'log') && ($plot->{$opt} ne 'linear')) {
877 0           die "\"$opt\" is neither \"log\" nor \"linear\"";
878             }
879 0           my $opth = $opt;
880 0           $opth =~ s/\.\w+$//;
881 0           $options .= ", $opth = '$plot->{$opt}'";
882             }
883 0 0 0       if ((defined $plot->{marginals}) && ($plot->{marginals} > 0)) {
884 0           $options .= ', marginals = True';
885             }
886 0           say { $args->{fh} } 'x = ['
887 0           . join( ',', @{ $plot->{data}{ $keys[0] } } ) . ']';
  0            
888 0           say { $args->{fh} } 'y = ['
889 0           . join( ',', @{ $plot->{data}{ $keys[1] } } ) . ']';
  0            
890 0   0       my $ax = $args->{ax} // '';
891 0           say { $args->{fh} } "im$ax = ax$ax.hexbin(x, y $options)\n";
  0            
892 0           my $opts = '';
893 0           foreach my $o (grep {defined $plot->{$_}} ('cblabel', 'cblocation', 'cborientation')) { #str
  0            
894 0           my $mpl_opt = $o;
895 0           $mpl_opt =~ s/^cb//;
896 0           $opts .= ", $mpl_opt = '$plot->{$o}'";
897             }
898 0           foreach my $o (grep {defined $plot->{$_}} ('cbdrawedges', 'cbpad')) { # numeric
  0            
899 0 0         die "$o = $plot->{$o} must be numeric" unless (looks_like_number($plot->{$o}));
900 0           my $mpl_opt = $o;
901 0           $mpl_opt =~ s/^cb//;
902 0           $opts .= ", $mpl_opt = $plot->{$o}";
903             }
904 0   0       $plot->{'colorbar.on'} = $plot->{'colorbar.on'} // 1;
905 0 0 0       if (($plot->{'colorbar.on'}) && (defined $plot->{'shared.colorbar'})) {
906 0           my @ax = map {"ax$_"} @{ $plot->{'shared.colorbar'} };
  0            
  0            
907 0           $opts .= ', ax = [' . join (',', @ax) . '] ';
908             }
909 0 0         if ( defined $plot->{cblabel} ) {
910             write_data({
911             data => $plot->{cblabel},
912             fh => $args->{fh},
913 0           name => 'cblabel',
914             });
915 0           say { $args->{fh} } "plt.colorbar(im$ax, label = cblabel $opts)";
  0            
916             } else {
917 0           say { $args->{fh} } "plt.colorbar(im$ax, label = 'Density' $opts)";
  0            
918             }
919             }
920              
921             sub format_commas
922             { #($n, $format = '.%02d') { # https://stackoverflow.com/questions/33442240/perl-printf-to-use-commas-as-thousands-separator
923             # $format should be '%.0u' for integers
924 0     0 0   my ( $n, $format ) = @_;
925 0 0         $format = '.%02d' if not defined $format;
926             return
927 0           reverse( join( ",", unpack( "(A3)*", reverse int($n) ) ) )
928             . sprintf( $format, int( 100 * ( .005 + ( $n - int($n) ) ) ) );
929             }
930              
931             sub hist_helper {
932 0     0 0   my ($args) = @_;
933 0           my $current_sub = ( split( /::/, ( caller(0) )[3] ) )[-1]
934             ; # https://stackoverflow.com/questions/2559792/how-can-i-get-the-name-of-the-current-subroutine-in-perl
935 0 0         if ( ref $args ne 'HASH' ) {
936 0           die
937             "args must be given as a hash ref, e.g. \"$current_sub({ data => \@blah })\"";
938             }
939 0           my @reqd_args = (
940             'ax', # used for multiple plots
941             'fh', # e.g. $py, $fh, which will be passed by the subroutine
942             'plot', # args to original function
943             );
944 0           my @undef_args = grep { !defined $args->{$_} } @reqd_args;
  0            
945 0 0         if ( scalar @undef_args > 0 ) {
946 0           p @undef_args;
947 0           die 'the above args are necessary, but were not defined.';
948             }
949 0           my @opt = (@ax_methods, @plt_methods, @fig_methods, @arg, 'ax', @{ $opt{$current_sub} });
  0            
950 0           my $plot = $args->{plot};
951             my @undef_opt = grep {
952 0           my $key = $_;
953 0           not grep { $_ eq $key } @opt
  0            
954 0           } keys %{$plot};
  0            
955 0 0         if ( scalar @undef_opt > 0 ) {
956 0           p @undef_opt;
957 0           die "The above arguments aren't defined for $plot->{'plot.type'}";
958             }
959 0           my $options = ''; # these args go to the plt.hist call
960 0   0       $plot->{alpha} = $plot->{alpha} // 0.5;
961 0           foreach my $arg ( grep { defined $plot->{$_} } ( 'bins', 'orientation' ) ) {
  0            
962 0 0         next if ref $plot->{$arg} eq 'HASH'; # set-specific setting exists
963 0           my $ref = ref $plot->{$arg};
964 0 0         if ( $ref eq '' ) { # single color
    0          
965 0 0         if ( $plot->{$arg} =~ m/^[A-Za-z]+$/ ) { # "Red" needs quotes
966 0           $options .= ", $arg = '$plot->{$arg}'";
967             } else { # I'm assuming numeric
968 0           $options .= ", $arg = $plot->{$arg}";
969             }
970             } elsif ( $ref eq 'ARRAY' ) {
971 0           $options .= ", $arg = [" . join( ',', @{ $plot->{$arg} } ) . '"]';
  0            
972             } else {
973 0           p $plot;
974 0           die "$ref for $arg isn't acceptable";
975             }
976             }
977 0           foreach my $axis (@{ $plot->{logscale} }) { # x, y
  0            
978 0 0         if ($axis =~ m/^([^xy])$/) {
979 0           p $plot->{logscale};
980 0           die "only \"x\" and \"y\" are allowed in boxplot, not \"$axis\"";
981             }
982 0           say {$args->{fh}} "ax$args->{ax}.set_$axis" . 'scale("log")';
  0            
983             }
984 0           foreach my $set ( sort keys %{ $plot->{data} } ) {
  0            
985 0           my $set_options = '';
986 0           foreach
987 0           my $arg ( grep { ref $plot->{$_} eq 'HASH' } ( 'bins', 'color' ) )
988             {
989 0 0         next unless defined $plot->{$arg}{$set};
990 0 0         if ( $plot->{$arg}{$set} =~ m/^[A-Za-z]+$/ ) { # "Red" needs quotes
991 0           $set_options .= ", $arg = '$plot->{$arg}{$set}'";
992             } else { # I'm assuming numeric; "10" doesn't need quotes
993 0           $set_options .= ", $arg = $plot->{$arg}{$set}";
994             }
995             }
996             write_data({
997             data => $plot->{data}{$set},
998             fh => $args->{fh},
999 0           name => 'd'
1000             });
1001 0           say { $args->{fh} } "ax$args->{ax}.hist(d, alpha = $plot->{alpha}, label = '$set' $options $set_options)";
  0            
1002             }
1003             }
1004              
1005             sub hist2d_helper {
1006 0     0 0   my ($args) = @_;
1007 0           my $current_sub = ( split( /::/, ( caller(0) )[3] ) )[-1]
1008             ; # https://stackoverflow.com/questions/2559792/how-can-i-get-the-name-of-the-current-subroutine-in-perl
1009 0 0         if ( ref $args ne 'HASH' ) {
1010 0           die "args must be given as a hash ref, e.g. \"$current_sub({ data => \@blah })\"";
1011             }
1012 0           my @reqd_args = (
1013             'fh', # e.g. $py, $fh, which will be passed by the subroutine
1014             'plot', # args to original function
1015             );
1016 0           my @undef_args = grep { !defined $args->{$_} } @reqd_args;
  0            
1017 0 0         if ( scalar @undef_args > 0 ) {
1018 0           p @undef_args;
1019 0           die 'the above args are necessary, but were not defined.';
1020             }
1021 0           my @opt = (@ax_methods, @plt_methods, @fig_methods, @arg, 'ax', @{ $opt{$current_sub} });
  0            
1022 0           my $plot = $args->{plot};
1023             @undef_args = grep {
1024 0           my $key = $_;
1025 0           not grep { $_ eq $key } @opt
  0            
1026 0           } keys %{$plot};
  0            
1027 0 0         if ( scalar @undef_args > 0 ) {
1028 0           p @undef_args;
1029 0           die
1030             "The above arguments aren't defined for $plot->{'plot.type'} in $current_sub";
1031             }
1032 0   0       $plot->{cb_logscale} = $plot->{cb_logscale} // 0;
1033 0   0       $plot->{'show.colorbar'} = $plot->{'show.colorbar'} // 1;
1034 0   0       $plot->{xbins} = int( $plot->{xbins} // 15 );
1035 0   0       $plot->{ybins} = int( $plot->{ybins} // 15 );
1036 0 0 0       if ( ( $plot->{xbins} == 0 ) || ( $plot->{ybins} == 0 ) ) {
1037 0           p $plot;
1038 0           die "# of bins cannot be 0 in $current_sub";
1039             }
1040 0           my @keys;
1041 0 0         if ( defined $plot->{'key.order'} ) {
1042 0           @keys = @{ $plot->{'key.order'} };
  0            
1043             } else {
1044 0           @keys = sort keys %{ $plot->{data} };
  0            
1045             }
1046 0 0         if ( scalar @keys != 2 ) {
1047 0           p @keys;
1048 0           die "There must be exactly 2 keys for $current_sub";
1049             }
1050 0           my $n_points = scalar @{ $plot->{data}{ $keys[0] } };
  0            
1051 0 0         if ( scalar @{ $plot->{data}{ $keys[1] } } != $n_points ) {
  0            
1052 0           say "$keys[0] has $n_points points.";
1053             say "$keys[1] has "
1054 0           . scalar @{ $plot->{data}{ $keys[1] } }
  0            
1055             . " points.";
1056 0           die 'The length of both keys must be equal.';
1057             }
1058 0 0         if ($plot->{xlabel}) {
1059            
1060             }
1061 0   0       $plot->{xlabel} = $plot->{xlabel} // $keys[0];
1062 0   0       $plot->{ylabel} = $plot->{ylabel} // $keys[1];
1063 0   0       $plot->{cmap} = $plot->{cmap} // 'gist_rainbow';
1064 0           my $options = ", cmap = '$plot->{cmap}'"; # these args go to the plt.hist call
1065 0 0         if ( $plot->{cb_logscale} ) {
1066 0           say {$args->{fh}} 'from matplotlib.colors import LogNorm';
  0            
1067             # prevents "ValueError: Passing a Normalize instance simultaneously with vmin/vmax is not supported. Please pass vmin/vmax directly to the norm when creating it"
1068 0           my @logNorm_opt;
1069 0           foreach my $arg (grep {defined $plot->{$_}} ('vmin', 'vmax')) {
  0            
1070 0 0         if (not looks_like_number($plot->{$arg})) {
1071 0           die "$arg must be numeric for $current_sub, but was given \"$plot->{$arg}\"";
1072             }
1073 0           push @logNorm_opt, "$arg = $plot->{$arg}";
1074 0           delete $plot->{$arg};
1075             }
1076 0           $options .= ', norm = LogNorm(' . join (',', @logNorm_opt) . ')';
1077             }
1078 0           foreach my $opt ( grep { defined $plot->{$_} } ( 'cmin', 'cmax', 'density', 'vmin', 'vmax' ) )
  0            
1079             {
1080 0           $options .= ", $opt = $plot->{$opt}";
1081             }
1082 0           my @bad_indices;
1083 0           my $bad_pts = 0;
1084 0           foreach my $i (0,1) {
1085 0           @{ $bad_indices[$i] } = grep {not defined $plot->{data}{$keys[$i]}[$_]} 0..$n_points-1;
  0            
  0            
1086 0           $bad_pts += scalar @{ $bad_indices[$i] };
  0            
1087             }
1088 0 0         if ($bad_pts > 0) {
1089 0           say STDERR "the above args have the following indices undefined ($n_points total)";
1090 0           p @bad_indices;
1091 0           die "Cannot proceed as there are $bad_pts undefined points.";
1092             }
1093 0           foreach my $i (0,1) {
1094 0           @{ $bad_indices[$i] } = grep {not looks_like_number($plot->{data}{$keys[$i]}[$_])} 0..$n_points-1;
  0            
  0            
1095 0           $bad_pts += scalar @{ $bad_indices[$i] };
  0            
1096             }
1097 0 0         if ($bad_pts > 0) {
1098 0           p $args;
1099 0           say STDERR "the above args have the following indices non-numeric ($n_points total)";
1100 0           p @bad_indices;
1101 0           die "Cannot proceed as there are $bad_pts non-numeric points.";
1102             }
1103 0           say { $args->{fh} } 'x = ['
1104 0           . join( ',', @{ $plot->{data}{ $keys[0] } } ) . ']';
  0            
1105 0   0       $plot->{xmin} = $plot->{xmin} // min( @{ $plot->{data}{ $keys[0] } } );
  0            
1106 0   0       $plot->{xmax} = $plot->{xmax} // max( @{ $plot->{data}{ $keys[0] } } );
  0            
1107 0           say { $args->{fh} } 'y = ['
1108 0           . join( ',', @{ $plot->{data}{ $keys[1] } } ) . ']';
  0            
1109 0   0       $plot->{ymin} = $plot->{ymin} // min( @{ $plot->{data}{ $keys[1] } } );
  0            
1110 0   0       $plot->{ymax} = $plot->{ymax} // max( @{ $plot->{data}{ $keys[1] } } );
  0            
1111 0   0       my $ax = $args->{ax} // '';
1112             # the range argument ensures that there are no empty parts of the plot
1113 0           my $range = ", range = [($plot->{xmin}, $plot->{xmax}), ($plot->{ymin}, $plot->{ymax})]";
1114             # logscale complications
1115 0           say {$args->{fh}} 'import numpy as np';
  0            
1116 0 0         if ($plot->{logscale}) {
1117 0           my %linear_axes = ('x' => 1, 'y' => 1);
1118 0           foreach my $axis (@{ $plot->{logscale} }) { # x, y
  0            
1119 0 0         if ($axis =~ m/^([^xy])$/) {
1120 0           p $plot->{logscale};
1121 0           die "only \"x\" and \"y\" are allowed in boxplot, not \"$axis\"";
1122             }
1123 0           say {$args->{fh}} "ax$ax.set_$axis" . 'scale("log")';
  0            
1124 0           my $min = $plot->{$axis . 'min'};
1125 0           my $max = $plot->{$axis . 'max'};
1126 0           my $key = "${axis}bins";
1127 0           say {$args->{fh}} "${axis}bins = np.logspace(np.log10($min), np.log10($max), $plot->{$key})";
  0            
1128 0           delete $linear_axes{$axis}; # so that I don't make a linear space for it
1129             }
1130 0           foreach my $axis ( keys %linear_axes ) {
1131 0           my $min = $plot->{$axis . 'min'};
1132 0           my $max = $plot->{$axis . 'max'};
1133 0           my $key = "${axis}bins";
1134 0           say {$args->{fh}} "${axis}bins = np.linspace($min, $max, $plot->{$key})";
  0            
1135             }
1136 0           $options = ", bins = [xbins, ybins] $options";
1137             } else {
1138 0           $options = ", ($plot->{xbins}, $plot->{ybins}) $options";
1139             }
1140 0           say {$args->{fh}} "hist2d_n, hist2d_xedges, hist2d_yedges, im$ax = ax$ax.hist2d(x, y $options $range)";
  0            
1141 0           say {$args->{fh}} 'max_hist2d_box = np.max(hist2d_n)';
  0            
1142 0           say {$args->{fh}} 'min_hist2d_box = np.min(hist2d_n)';
  0            
1143 0           say {$args->{fh}} "print(f'plot $ax hist2d density range = [{min_hist2d_box}, {max_hist2d_box}]')";
  0            
1144 0 0         return 0 if $plot->{'show.colorbar'} == 0;
1145 0           my $opts = '';
1146 0           foreach my $o (grep {defined $plot->{$_}} ('cblabel', 'cblocation', 'cborientation')) { #str
  0            
1147 0           my $mpl_opt = $o;
1148 0           $mpl_opt =~ s/^cb//;
1149 0           $opts .= ", $mpl_opt = '$plot->{$o}'";
1150             }
1151 0           foreach my $o (grep {defined $plot->{$_}} ('cbdrawedges', 'cbpad')) { # numeric
  0            
1152 0 0         die "$o = $plot->{$o} must be numeric" unless (looks_like_number($plot->{$o}));
1153 0           my $mpl_opt = $o;
1154 0           $mpl_opt =~ s/^cb//;
1155 0           $opts .= ", $mpl_opt = $plot->{$o}";
1156             }
1157 0   0       $plot->{'colorbar.on'} = $plot->{'colorbar.on'} // 1;
1158 0 0 0       if (($plot->{'colorbar.on'}) && (defined $plot->{'shared.colorbar'})) {
1159 0           my @ax = map {"ax$_"} @{ $plot->{'shared.colorbar'} };
  0            
  0            
1160 0           $opts .= ', ax = [' . join (',', @ax) . '] ';
1161             }
1162             # say { $args->{fh} } "cbar = fig.colorbar(im$ax $opts)" if $plot->{'colorbar.on'};
1163 0 0         if ( defined $plot->{cblabel} ) {
1164 0           say { $args->{fh} } "plt.colorbar(im$ax, label = '$plot->{cblabel}' $opts)";
  0            
1165             } else {
1166 0           say { $args->{fh} } "plt.colorbar(im$ax, label = 'Density' $opts)";
  0            
1167             }
1168             }
1169              
1170             sub imshow_helper {
1171 0     0 0   my ($args) = @_;
1172 0           my $current_sub = ( split( /::/, ( caller(0) )[3] ) )[-1]
1173             ; # https://stackoverflow.com/questions/2559792/how-can-i-get-the-name-of-the-current-subroutine-in-perl
1174 0 0         if ( ref $args ne 'HASH' ) {
1175 0           die
1176             "args must be given as a hash ref, e.g. \"$current_sub({ data => \@blah })\"";
1177             }
1178 0           my @reqd_args = (
1179             'ax',
1180             'fh', # e.g. $py, $fh, which will be passed by the subroutine
1181             'plot', # args to original function
1182             );
1183 0           my @undef_args = grep { !defined $args->{$_} } @reqd_args;
  0            
1184 0 0         if ( scalar @undef_args > 0 ) {
1185 0           p @undef_args;
1186 0           die 'the above args are necessary, but were not defined.';
1187             }
1188 0           my @opt = (@ax_methods, @plt_methods, @fig_methods, @arg, 'ax', @{ $opt{$current_sub} });
  0            
1189 0           my $plot = $args->{plot};
1190             @undef_args = grep {
1191 0           my $key = $_;
1192 0           not grep { $_ eq $key } @opt
  0            
1193 0           } keys %{$plot};
  0            
1194 0 0         if ( scalar @undef_args > 0 ) {
1195 0           p @undef_args;
1196 0           die
1197             "The above arguments aren't defined for $plot->{'plot.type'} in $current_sub";
1198             }
1199 0           my $data_ref = ref $plot->{data};
1200 0 0         if ($data_ref ne 'ARRAY') {
1201 0           p $args;
1202 0           die "$current_sub can only accept 2-D arrays as input in \"data\", but received $data_ref";
1203             }
1204 0           my $non_numeric_data = 0;
1205 0           foreach my $row (@{ $plot->{data} }) {
  0            
1206 0 0         if (grep {not looks_like_number($_)} @{ $row }) {
  0            
  0            
1207 0           $non_numeric_data = 1;
1208 0           last;
1209             }
1210             }
1211 0 0 0       if (($non_numeric_data) && (not defined $plot->{stringmap})) {
1212 0           p $args;
1213 0           die "$current_sub needs a map to translate strings to integers";
1214             }
1215 0           my (@ytick_labels, %intmap);
1216             # assign integers for each key in stringmap
1217 0           foreach my $string (sort keys %{ $plot->{stringmap} }) {
  0            
1218 0           $intmap{$string} = scalar @ytick_labels;
1219 0           push @ytick_labels, $plot->{stringmap}{$string};
1220             }
1221 0 0         if ($non_numeric_data) {
1222 0           foreach my $row (@{ $plot->{data} }) {
  0            
1223 0           @{ $row } = map { $intmap{$_} } @{ $row };
  0            
  0            
  0            
1224             }
1225             }
1226 0           my ($min_val, $max_val) = ('inf', '-inf');
1227 0           my $opts = '';
1228 0 0         if ($non_numeric_data) {
1229 0           say { $args->{fh} } 'from matplotlib.colors import ListedColormap';
  0            
1230 0           my @prop_cycle = ('#1f77b4', '#ff7f0e', '#2ca02c', '#d62728', '#9467bd', '#8c564b', '#e377c2',
1231             '#7f7f7f', '#bcbd22', '#17becf'); #plt.rcParams['axes.prop_cycle']
1232 0           say { $args->{fh} } 'colors = ["' . join ('","', @prop_cycle[0..(scalar keys %intmap) - 1]) . '"]';
  0            
1233 0           say { $args->{fh} } 'this_cmap = ListedColormap(colors)';
  0            
1234 0 0         warn "deleting \"$plot->{cmap}\" because string data is present" if defined $plot->{cmap};
1235 0           delete $plot->{cmap};
1236 0           $min_val = 0;
1237 0           $max_val = max(values %intmap);
1238 0           $opts .= ', cmap = this_cmap';
1239             }
1240             write_data({
1241             data => $plot->{data},
1242             fh => $args->{fh},
1243 0           name => 'd',
1244             });
1245 0           foreach my $row (@{ $plot->{data} }) { # write data to the python file
  0            
1246 0 0         next if $non_numeric_data; # strings don't have max and min
1247 0           $min_val = min(@{ $row }, $min_val);
  0            
1248 0           $max_val = max(@{ $row }, $max_val);
  0            
1249             }
1250 0   0       my $ax = $args->{ax} // '';
1251 0   0       $plot->{vmax} = $plot->{vmax} // $max_val;
1252 0   0       $plot->{vmin} = $plot->{vmin} // $min_val;
1253 0           foreach my $opt (grep {defined $plot->{$_}} ('cmap')) { # strings
  0            
1254 0           $opts .= ", $opt = '$plot->{$opt}'";
1255             }
1256 0           foreach my $opt (grep {defined $plot->{$_}} ('vmax', 'vmin')) { # numeric
  0            
1257 0           $opts .= ", $opt = $plot->{$opt}";
1258             }
1259 0           say { $args->{fh} } "im$ax = ax$ax.imshow(d, aspect = 'auto' $opts)";
  0            
1260 0           $opts = '';
1261 0 0         if ($non_numeric_data) {
1262 0           $opts .= ', ticks = [' . join (',', map {$_ + 0.5 - $_/$max_val} 0..$max_val) . ']';
  0            
1263             }
1264 0           foreach my $o (grep {defined $plot->{$_}} ('cblabel', 'cblocation', 'cborientation')) { #str
  0            
1265 0           my $mpl_opt = $o;
1266 0           $mpl_opt =~ s/^cb//;
1267 0           $opts .= ", $mpl_opt = '$plot->{$o}'";
1268             }
1269 0           foreach my $o (grep {defined $plot->{$_}} ('cbdrawedges', 'cbpad')) { # numeric
  0            
1270 0 0         die "$o = $plot->{$o} must be numeric" unless (looks_like_number($plot->{$o}));
1271 0           my $mpl_opt = $o;
1272 0           $mpl_opt =~ s/^cb//;
1273 0           $opts .= ", $mpl_opt = $plot->{$o}";
1274             }
1275 0   0       $plot->{'colorbar.on'} = $plot->{'colorbar.on'} // 1;
1276 0 0 0       if (($plot->{'colorbar.on'}) && (defined $plot->{'shared.colorbar'})) {
1277 0           my @ax = map {"ax$_"} @{ $plot->{'shared.colorbar'} };
  0            
  0            
1278 0           $opts .= ', ax = [' . join (',', @ax) . '] ';
1279             }
1280 0 0         say { $args->{fh} } "cbar = fig.colorbar(im$ax $opts)" if $plot->{'colorbar.on'};
  0            
1281 0 0 0       if (($non_numeric_data) && ($plot->{'colorbar.on'})) {
1282 0           say { $args->{fh} } 'cbar.ax.set_yticklabels(["' . join ('","', @ytick_labels) . '"])';
  0            
1283             }
1284             }
1285              
1286             sub pie_helper {
1287 0     0 0   my ($args) = @_;
1288 0           my $current_sub = ( split( /::/, ( caller(0) )[3] ) )[-1]
1289             ; # https://stackoverflow.com/questions/2559792/how-can-i-get-the-name-of-the-current-subroutine-in-perl
1290 0 0         if ( ref $args ne 'HASH' ) {
1291 0           die
1292             "args must be given as a hash ref, e.g. \"$current_sub({ data => \@blah })\"";
1293             }
1294 0           my @reqd_args = (
1295             'ax',
1296             'fh', # e.g. $py, $fh, which will be passed by the subroutine
1297             'plot', # args to original function
1298             );
1299 0           my @undef_args = grep { !defined $args->{$_} } @reqd_args;
  0            
1300 0 0         if ( scalar @undef_args > 0 ) {
1301 0           p @undef_args;
1302 0           die 'the above args are necessary, but were not defined.';
1303             }
1304 0           my @opt = (@ax_methods, @plt_methods, @fig_methods, @arg, 'ax', @{ $opt{$current_sub} });
  0            
1305 0           my $plot = $args->{plot};
1306             my @undef_opt = grep {
1307 0           my $key = $_;
1308 0           not grep { $_ eq $key } @opt
  0            
1309 0           } keys %{$plot};
  0            
1310 0 0         if ( scalar @undef_opt > 0 ) {
1311 0           p @undef_opt;
1312 0           die
1313             "The above arguments aren't defined for $plot->{'plot.type'} in $current_sub";
1314             }
1315 0           my @key_order;
1316 0 0         if ( defined $plot->{'key.order'} ) {
1317 0           @key_order = @{ $plot->{'key.order'} };
  0            
1318             } else {
1319 0           @key_order = sort keys %{ $plot->{data} };
  0            
1320             }
1321 0   0       $plot->{autopct} = $plot->{autopct} // '';
1322 0           my $opt = '';
1323 0 0         if ( $plot->{autopct} ne '' ) {
1324 0           $opt .= ", autopct = '$plot->{autopct}'";
1325             }
1326 0           foreach my $arg ( grep { defined $plot->{$_} } 'labeldistance', 'pctdistance' ) {
  0            
1327 0           $opt .= ", $arg = $plot->{$arg}";
1328             }
1329             write_data({
1330             data => \@key_order,
1331             fh => $args->{fh},
1332 0           name => 'labels',
1333             });
1334 0           say { $args->{fh} } 'vals = ['
1335 0           . join( ',', @{ $plot->{data} }{@key_order} ) . ']';
  0            
1336 0   0       my $ax = $args->{ax} // '';
1337 0           say { $args->{fh} } "ax$ax.pie(vals, labels = labels $opt)";
  0            
1338             }
1339              
1340             sub plot_helper {
1341 0     0 0   my ($args) = @_;
1342 0           my $current_sub = ( split( /::/, ( caller(0) )[3] ) )[-1]
1343             ; # https://stackoverflow.com/questions/2559792/how-can-i-get-the-name-of-the-current-subroutine-in-perl
1344 0 0         if ( ref $args ne 'HASH' ) {
1345 0           die "args must be given as a hash ref, e.g. \"$current_sub({ data => \@blah })\"";
1346             }
1347 0           my @reqd_args = (
1348             'ax', 'fh',# e.g. $py, $fh, which will be passed by the subroutine
1349             'plot', # args to original function
1350             );
1351 0           my @undef_args = grep { !defined $args->{$_} } @reqd_args;
  0            
1352 0 0         if ( scalar @undef_args > 0 ) {
1353 0           p @undef_args;
1354 0           die 'the above args are necessary, but were not defined.';
1355             }
1356 0           my @opt = (@ax_methods, @fig_methods, @arg, @plt_methods, 'ax', @{ $opt{$current_sub} });
  0            
1357 0           my $plot = $args->{plot};
1358             my @bad_opt = grep {
1359 0           my $key = $_;
1360 0           not grep { $_ eq $key } @opt
  0            
1361 0           } keys %{$plot};
  0            
1362 0 0         if ( scalar @bad_opt > 0 ) {
1363 0           p $args;
1364 0           p @bad_opt;
1365 0           die "The above arguments aren't defined for $plot->{'plot.type'} in $current_sub";
1366             }
1367 0   0       $plot->{'show.legend'} = $plot->{'show.legend'} // 1;
1368 0           foreach my $axis (@{ $plot->{logscale} }) { # x, y
  0            
1369 0 0         if ($axis =~ m/^([^xy])$/) {
1370 0           p $plot->{logscale};
1371 0           die "only \"x\" and \"y\" are allowed in boxplot, not \"$axis\"";
1372             }
1373 0           say {$args->{fh}} "ax$args->{ax}.set_$axis" . 'scale("log")';
  0            
1374             }
1375 0           my @twinx;
1376 0 0         if (ref $plot->{data} eq 'ARRAY') {
1377 0 0         if (defined $plot->{'set.options'}) {
1378 0           my $ref_type = ref $plot->{'set.options'};
1379 0 0         if ($ref_type ne 'ARRAY') {
1380 0           p $args;
1381 0           die "\"set.options\" must also be an array when the data is an array, but \"$ref_type\" was given." ;
1382             }
1383 0           my $n_set_opt = scalar @{ $plot->{'set.options'} };
  0            
1384 0           my $n_data = scalar @{ $plot->{data} };
  0            
1385 0 0         if ($n_set_opt > $n_data) {
1386 0           p $args;
1387 0           die "there are $n_set_opt sets for options, but only $n_data data points.";
1388             }
1389             }
1390 0 0         if (defined $plot->{twinx}) {
1391 0 0         if (ref $plot->{twinx} eq '') {
    0          
1392 0 0         die "twinx must be an array index, not \"$plot->{twinx}\"" unless $plot->{twinx} =~ m/^\d+$/;
1393 0           @twinx = $plot->{twinx};
1394             } elsif (ref $plot->{twinx} eq 'ARRAY') {
1395 0           @bad_opt = grep {$_ !~ m/^\d+$/} @{ $plot->{twinx} };
  0            
  0            
1396 0 0         if (scalar @bad_opt > 0) {
1397 0           p @bad_opt;
1398 0           die 'data that could not possibly be an array index for twinx is shown above';
1399             }
1400 0           @twinx = @{ $plot->{twinx} };
  0            
1401             }
1402             }
1403 0 0         if (defined $plot->{'twinx.args'}) {
1404 0           my $ref = ref $plot->{'twinx.args'};
1405 0 0         die "\"twinx.args\" must be a hash, but $ref was entered" unless $ref eq 'HASH';
1406 0           @bad_opt = grep {$_ !~ m/^\d+$/} keys %{ $plot->{'twinx.args'} };
  0            
  0            
1407 0 0         if (scalar @bad_opt > 0) {
1408 0           p @bad_opt;
1409 0           die 'the above keys are not hash indices';
1410             }
1411 0           foreach my $idx (keys %{ $plot->{'twinx.args'} }) {
  0            
1412 0 0         next if grep {$idx == $_} @twinx;
  0            
1413 0           push @twinx, $idx;
1414             }
1415             }
1416 0           my $arr_i = 0;
1417 0           foreach my $arr (@{ $plot->{data} }) {
  0            
1418 0           my $ref = ref $arr;
1419 0 0         if ($ref ne 'ARRAY') {
1420 0           p $plot->{data}[$arr_i];
1421 0           die "index $arr_i is \"$ref\" but must be \"ARRAY\"";
1422             }
1423 0           my $n_elem = scalar @{ $arr };
  0            
1424 0 0         if ($n_elem != 2) {
1425 0           p $arr;
1426 0           die "there must be 2 array references (x, y) but index $arr_i has $n_elem";
1427             }
1428 0           @bad_opt = map { scalar @{ $arr->[$_] } } (0,1);
  0            
  0            
1429 0 0         if ($bad_opt[0] != $bad_opt[1]) {
1430 0           say STDERR "index $arr_i must have arrays/array refs of equal length, but these lengths were given:";
1431 0           p @bad_opt;
1432 0           die 'the array/array ref lengths must be equal';
1433             }
1434 0           foreach my $i (0,1) {
1435 0           my $max_i = scalar @{ $arr->[$i] } - 1;
  0            
1436 0           @bad_opt = grep {not looks_like_number($arr->[$i][$_])} 0..$max_i;
  0            
1437 0 0         next if scalar @bad_opt == 0; # it's fine, don't worry
1438 0           p $plot->{data}[$arr_i];
1439 0           p @bad_opt;
1440 0           @bad_opt = @{ $arr->[$i] }[@bad_opt];
  0            
1441 0           say STDERR 'have these non-numeric values:';
1442 0           p @bad_opt;
1443 0           die "Array index $arr_i/axis $i has non-numeric values (above)";
1444             }
1445 0           my $options = '';
1446 0           say { $args->{fh} } 'x = [' . join( ',', @{ $arr->[0] } ) . ']';
  0            
  0            
1447 0           say { $args->{fh} } 'y = [' . join( ',', @{ $arr->[1] } ) . ']';
  0            
  0            
1448 0 0 0       if ( ( defined $plot->{'set.options'} )
1449             && ( ref $plot->{'set.options'} eq '' ) )
1450             {
1451 0           $options = ", $plot->{'set.options'}";
1452             }
1453 0 0         if ( defined $plot->{'set.options'}[$arr_i] ) {
1454 0           $options = ", $plot->{'set.options'}[$arr_i]";
1455             }
1456 0           my $ax = "ax$args->{ax}";
1457 0 0         if (grep {$arr_i == $_} @twinx) {
  0            
1458 0           say { $args->{fh} } "twinx_$ax = $ax.twinx()# " . __LINE__;
  0            
1459 0           say { $args->{fh} } "twinx_$ax.plot(x, y $options) # " . __LINE__;
  0            
1460 0 0         if (defined $plot->{'twinx.args'}{$arr_i}) {
1461             plot_args({
1462             fh => $args->{fh},
1463 0           args => $plot->{'twinx.args'}{$arr_i},
1464             ax => "twinx_$ax"
1465             });
1466             }
1467             } else {
1468 0           say { $args->{fh} } "ax$args->{ax}.plot(x, y $options) # " . __LINE__;
  0            
1469             }
1470 0           $arr_i++;
1471             }
1472 0           return 1; # the rest only applies if $plot->{data} is a hash
1473             }
1474 0           my @key_order;
1475 0 0         if ( defined $plot->{'key.order'} ) {
1476 0           @key_order = @{ $plot->{'key.order'} };
  0            
1477             } else {
1478 0           @key_order = sort keys %{ $plot->{data} };
  0            
1479             }
1480 0 0 0       if ((defined $plot->{'set.options'}) && (ref $plot->{'set.options'} eq 'HASH')) {
1481 0           @bad_opt = sort grep {!defined $plot->{data}{$_}} keys %{ $plot->{'set.options'} };
  0            
  0            
1482 0 0         if (scalar @bad_opt > 0) {
1483 0           p @bad_opt;
1484 0           die "the above options are defined for undefined data sets in $current_sub.";
1485             }
1486             }
1487 0 0         if (defined $plot->{twinx}) {
1488 0 0         if (ref $plot->{twinx} eq '') {
    0          
1489 0 0         die "twinx must be an hash index, not \"$plot->{twinx}\"" unless $plot->{twinx} =~ m/^\d+$/;
1490 0           @twinx = $plot->{twinx};
1491             } elsif (ref $plot->{twinx} eq 'HASH') {
1492 0           @bad_opt = sort grep {!defined $plot->{data}{$_}} keys %{ $plot->{twinx} };
  0            
  0            
1493 0 0         if (scalar @bad_opt > 0) {
1494 0           p @bad_opt;
1495 0           die 'data for undefined data keys is shown above';
1496             }
1497 0           @twinx = sort keys %{ $plot->{twinx} };
  0            
1498             }
1499             }
1500 0 0         if (defined $plot->{'twinx.args'}) {
1501 0           my $ref = ref $plot->{'twinx.args'};
1502 0 0         die "\"twinx.args\" must be a hash, but $ref was entered" unless $ref eq 'HASH';
1503 0           @bad_opt = sort grep {!defined $plot->{data}{$_}} keys %{ $plot->{'twinx.args'} };
  0            
  0            
1504 0 0         if (scalar @bad_opt > 0) {
1505 0           p @bad_opt;
1506 0           die 'the above keys are not present in data keys';
1507             }
1508 0           foreach my $set (keys %{ $plot->{'twinx.args'} }) {
  0            
1509 0 0         next if grep {$set eq $_} @twinx;
  0            
1510 0           push @twinx, $set;
1511             }
1512             }
1513 0           my $set_i = 0;
1514 0           foreach my $set (@key_order) {
1515 0           my $set_ref = ref $plot->{data}{$set};
1516 0 0         if ( $set_ref ne 'ARRAY' ) {
1517 0           p $plot->{data}{$set};
1518 0           die "$set must have two arrays, x and y coordinates, but instead has a $set_ref";
1519             }
1520 0           my $n_arrays = scalar @{ $plot->{data}{$set} };
  0            
1521 0 0         if ( $n_arrays != 2 ) {
1522 0           p $plot->{data}{$set};
1523 0           die "$n_arrays were entered for $set, but there must be exactly 2";
1524             }
1525 0           my @n_elem = map { scalar @{ $plot->{data}{$set}[$_] }} (0,1);
  0            
  0            
1526 0 0         if ( $n_elem[0] != $n_elem[1] ) {
1527 0           p $plot->{data}{$set};
1528 0           p @n_elem;
1529 0           die "$set has length = $n_elem[0] for x; length = $n_elem[1] for y: x & y must be of equal length";
1530             }
1531 0           foreach my $ax (0,1) {
1532 0           my $n = scalar @{ $plot->{data}{$set}[$ax] };
  0            
1533 0           my @undef_i = grep {not defined $plot->{data}{$set}[$ax][$_]} 0..$n-1;
  0            
1534 0 0         if (scalar @undef_i > 0) {
1535 0           p $plot;
1536 0           p @undef_i;
1537 0           my $max_i = scalar @{ $plot->{data}{$set}[$ax] };
  0            
1538 0           die "set $set axis $ax has undefined indices, of max index $max_i in $current_sub";
1539             }
1540             }
1541 0           my $options = '';
1542 0           say { $args->{fh} } 'x = [' . join( ',', @{ $plot->{data}{$set}[0] } ) . ']';
  0            
  0            
1543 0           say { $args->{fh} } 'y = [' . join( ',', @{ $plot->{data}{$set}[1] } ) . ']';
  0            
  0            
1544 0 0 0       if ( ( defined $plot->{'set.options'} )
1545             && ( ref $plot->{'set.options'} eq '' ) )
1546             {
1547 0           $options = ", $plot->{'set.options'}";
1548             }
1549 0 0         if ( defined $plot->{'set.options'}{$set} ) {
1550 0           $options = ", $plot->{'set.options'}{$set}";
1551             }
1552 0           my $label = '';
1553 0 0         if ( $plot->{'show.legend'} ) {
1554 0           $label = ",label = '$set'";
1555             }
1556 0           my $ax = "ax$args->{ax}";
1557 0 0         if (grep {$set eq $_} @twinx) { # this set has
  0            
1558 0           say { $args->{fh} } "twinx_${ax}_$set_i = $ax.twinx()# " . __LINE__;
  0            
1559 0           say { $args->{fh} } "twinx_${ax}_$set_i.plot(x, y $label $options) # " . __LINE__;
  0            
1560 0 0         if (defined $plot->{'twinx.args'}{$set}) {
1561             plot_args({
1562             fh => $args->{fh},
1563 0           args => $plot->{'twinx.args'}{$set},
1564             ax => "twinx_${ax}_$set_i"
1565             });
1566             }
1567             } else {
1568 0           say { $args->{fh} } "ax$args->{ax}.plot(x, y $label $options) # " . __LINE__;
  0            
1569             }
1570 0           $set_i++;
1571             }
1572 0           return 1;
1573             }
1574              
1575             sub scatter_helper {
1576 0     0 0   my ($args) = @_;
1577 0           my $current_sub = ( split( /::/, ( caller(0) )[3] ) )[-1]
1578             ; # https://stackoverflow.com/questions/2559792/how-can-i-get-the-name-of-the-current-subroutine-in-perl
1579 0 0         if ( ref $args ne 'HASH' ) {
1580 0           die "args must be given as a hash ref, e.g. \"$current_sub({ data => \@blah })\"";
1581             }
1582 0           my @reqd_args = (
1583             'ax', 'fh', # e.g. $py, $fh, which will be passed by the subroutine
1584             'plot', # args to original function
1585             );
1586 0           my @undef_args = grep { !defined $args->{$_} } @reqd_args;
  0            
1587 0 0         if ( scalar @undef_args > 0 ) {
1588 0           p @undef_args;
1589 0           die 'the above args are necessary, but were not defined.';
1590             }
1591 0           my @opt = (@ax_methods, @plt_methods, @fig_methods, @arg, 'ax', @{ $opt{$current_sub} });
  0            
1592 0           my $plot = $args->{plot};
1593             @undef_args = grep {
1594 0           my $key = $_;
1595 0           not grep { $_ eq $key } @opt
  0            
1596 0           } keys %{$plot};
  0            
1597 0 0         if ( scalar @undef_args > 0 ) {
1598 0           p @undef_args;
1599 0           die "The above arguments aren't defined for $plot->{'plot.type'} in $current_sub";
1600             }
1601 0           my $overall_ref = ref $plot->{data};
1602 0 0         if ( $overall_ref ne 'HASH' ) {
1603 0           die
1604             "scatter only takes 1) hashes of arrays (single or 2) hash of hash of arrays; but $overall_ref was entered";
1605             }
1606 0           my ( %ref_counts, $plot_type );
1607 0           foreach my $set ( keys %{ $plot->{data} } ) {
  0            
1608 0           $ref_counts{ ref $plot->{data}{$set} }++;
1609             }
1610 0           my $ax = $args->{ax};
1611 0 0         if ( scalar %ref_counts > 1 ) {
1612 0           p $plot->{data};
1613 0           die "different kinds of data were entered to plot $ax; should be simple hash or hash of arrays.";
1614             }
1615 0 0         if ( defined $ref_counts{ARRAY} ) {
    0          
1616 0           $plot_type = 'single';
1617             } elsif ( defined $ref_counts{HASH} ) {
1618 0           $plot_type = 'multiple';
1619             } else {
1620 0           p $plot->{data};
1621 0           p %ref_counts;
1622 0           die 'Could not determine scatter type for the above data.';
1623             }
1624 0   0       $plot->{cmap} = $plot->{cmap} // 'gist_rainbow';
1625 0           foreach my $axis (@{ $plot->{logscale} }) { # x, y
  0            
1626 0           say {$args->{fh}} "ax$ax.set_$axis" . 'scale("log")';
  0            
1627             }
1628 0 0         if ( $plot_type eq 'single' ) { # only a single set of data
    0          
1629 0           my $options = '';
1630 0           my ( $color_key, @keys );
1631 0 0         if ( defined $plot->{'keys'} ) {
1632 0           @keys = @{ $plot->{'keys'} };
  0            
1633             } else {
1634 0           @keys = sort { lc $a cmp lc $b } keys %{ $plot->{data} };
  0            
  0            
1635             }
1636 0           my $n_keys = scalar keys %{ $plot->{data} };
  0            
1637 0 0 0       if ( ( $n_keys != 2 ) && ( $n_keys != 3 ) ) {
1638 0           p $plot->{data};
1639 0           die "scatterplots can only take 2 or 3 keys as data, but $current_sub received $n_keys";
1640             }
1641 0 0         if ( defined $plot->{color_key} ) {
    0          
1642 0           $color_key = $plot->{color_key};
1643 0           @keys = grep {$_ ne $plot->{color_key}} @keys;
  0            
1644             } elsif ( scalar @keys == 3 ) {
1645 0           $color_key = pop @keys;
1646             }
1647 0           say { $args->{fh} } 'x = [' . join( ',', @{ $plot->{data}{ $keys[0] } } ) . ']';
  0            
  0            
1648 0           say { $args->{fh} } 'y = [' . join( ',', @{ $plot->{data}{ $keys[1] } } ) . ']';
  0            
  0            
1649 0 0 0       if ( ( defined $plot->{'set.options'} )
1650             && ( ref $plot->{'set.options'} eq '' ) )
1651             {
1652 0           $options = ", $plot->{'set.options'}";
1653             }
1654 0 0         if ( defined $color_key ) {
1655 0           say { $args->{fh} } 'z = ['
1656 0           . join( ',', @{ $plot->{data}{$color_key} } ) . ']';
  0            
1657 0           say { $args->{fh} }
  0            
1658             "im = ax$ax.scatter(x, y, c = z, cmap = 'gist_rainbow' $options)";
1659 0           say { $args->{fh} } "fig.colorbar(im, label = '$color_key')";
  0            
1660             } else {
1661 0           say { $args->{fh} } "ax$ax.scatter(x, y, $options)";
  0            
1662             }
1663 0   0       $plot->{xlabel} = $plot->{xlabel} // $keys[0];
1664 0   0       $plot->{ylabel} = $plot->{ylabel} // $keys[1];
1665             } elsif ( $plot_type eq 'multiple' ) { # multiple sets
1666 0           my @undefined_opts;
1667 0           foreach my $set ( sort keys %{ $plot->{'set.options'} } ) {
  0            
1668 0 0         next if grep { $set eq $_ } keys %{ $plot->{data} };
  0            
  0            
1669 0           push @undefined_opts, $set;
1670             }
1671 0 0         if ( scalar @undefined_opts > 0 ) {
1672 0           p $plot->{data};
1673 0           p $plot;
1674 0           say 'The data and options are above, but the following sets have options without data:';
1675 0           p @undefined_opts;
1676 0           die 'no data was defined for the above options';
1677             }
1678 0           my $color_key;
1679 0           foreach my $set ( sort keys %{ $plot->{data} } ) {
  0            
1680 0           my $options = '';
1681 0           my @keys;
1682 0 0         if ( defined $plot->{'keys'} ) {
1683 0           @keys = @{ $plot->{'keys'} };
  0            
1684             } else { # automatically take the key from the first; further sets should have the same labels
1685 0           @keys = sort { lc $a cmp lc $b } keys %{ $plot->{data}{$set} };
  0            
  0            
1686             }
1687 0           my $n_keys = scalar keys %{ $plot->{data}{$set} };
  0            
1688 0 0 0       if ( ( $n_keys != 2 ) && ( $n_keys != 3 ) ) {
1689 0           p $plot->{data}{$set};
1690 0           die "scatterplots can only take 2 or 3 keys as data, but $current_sub received $n_keys";
1691             }
1692 0           foreach my $key (@keys) {
1693 0           @undef_args = grep {!defined $plot->{data}{$set}{$key}[$_]} 0..scalar @{ $plot->{data}{$set}{$key} } - 1;
  0            
  0            
1694 0 0         if (scalar @undef_args > 0) {
1695 0           p @undef_args;
1696 0           die "the above indices for \"$key\" are undefined in $current_sub";
1697             }
1698             }
1699 0 0 0       if ( ( not defined $color_key ) && ( $n_keys == 3 ) ) {
1700 0           $color_key = pop @keys;
1701             }
1702 0 0         if ( defined $plot->{'set.options'}{$set} ) {
1703 0           $options = ", $plot->{'set.options'}{$set}";
1704             }
1705 0           say { $args->{fh} } 'x = [' . join( ',', @{ $plot->{data}{$set}{ $keys[0] } } ) . ']';
  0            
  0            
1706 0           say { $args->{fh} } 'y = [' . join( ',', @{ $plot->{data}{$set}{ $keys[1] } } ) . ']';
  0            
  0            
1707 0 0         if ( defined $color_key ) {
1708 0           say { $args->{fh} } 'z = [' . join( ',', @{ $plot->{data}{$set}{$color_key} } ) . ']';
  0            
  0            
1709 0 0         unless ( $options =~ m/label\s*=/ ) {
1710 0           $options .= ", label = '$set'";
1711             }
1712 0           say { $args->{fh} }
  0            
1713             "im = ax$ax.scatter(x, y, c = z, cmap = '$plot->{cmap}' $options)";
1714             } else {
1715 0           say { $args->{fh} } "ax$ax.scatter(x, y, label = '$set' $options)";
  0            
1716             }
1717 0   0       $plot->{xlabel} = $plot->{xlabel} // $keys[0];
1718 0   0       $plot->{ylabel} = $plot->{ylabel} // $keys[1];
1719             }
1720 0 0         say { $args->{fh} } "plt.colorbar(im, label = '$color_key')" if defined $color_key;
  0            
1721             }
1722             }
1723              
1724             sub violin_helper {
1725 0     0 0   my ($args) = @_;
1726 0           my $current_sub = ( split( /::/, ( caller(0) )[3] ) )[-1]
1727             ; # https://stackoverflow.com/questions/2559792/how-can-i-get-the-name-of-the-current-subroutine-in-perl
1728 0 0         if ( ref $args ne 'HASH' ) {
1729 0           die "args must be given as a hash ref, e.g. \"$current_sub({ data => \@blah })\"";
1730             }
1731 0           my @reqd_args = (
1732             'fh', # e.g. $py, $fh, which will be passed by the subroutine
1733             'plot', # args to original function
1734             );
1735 0           my @undef_args = grep { !defined $args->{$_} } @reqd_args;
  0            
1736 0 0         if ( scalar @undef_args > 0 ) {
1737 0           p @undef_args;
1738 0           die 'the above args are necessary, but were not defined.';
1739             }
1740 0           my @opt = (@ax_methods, @plt_methods, @fig_methods, @arg, 'ax', @{ $opt{$current_sub} });
  0            
1741 0           my $plot = $args->{plot};
1742             my @undef_opt = grep {
1743 0           my $key = $_;
1744 0           not grep { $_ eq $key } @opt
  0            
1745 0           } keys %{$plot};
  0            
1746 0 0         if ( scalar @undef_opt > 0 ) {
1747 0           p @undef_opt;
1748 0           die "The above arguments aren't defined for $plot->{'plot.type'} using $current_sub";
1749             }
1750 0   0       $plot->{orientation} = $plot->{orientation} // 'vertical';
1751 0 0         if ( $plot->{orientation} !~ m/^(?:horizontal|vertical)$/ ) {
1752 0           die "$current_sub needs either \"horizontal\" or \"vertical\", not \"$plot->{orientation}\"";
1753             }
1754 0   0       $args->{whiskers} = $args->{whiskers} // 1; # by default, make whiskers
1755 0           my ( @xticks, @key_order );
1756 0 0         if ( defined $plot->{'key.order'} ) {
1757 0           @key_order = @{ $plot->{'key.order'} };
  0            
1758             } else {
1759 0           @key_order = sort keys %{ $plot->{data} };
  0            
1760             }
1761 0   0       my $ax = $args->{ax} // '';
1762 0   0       $plot->{medians} = $plot->{medians} // 1; # by default, show median values
1763 0   0       $plot->{whiskers} = $plot->{whiskers} // 1;
1764 0   0       $plot->{edgecolor} = $plot->{edgecolor} // 'black';
1765 0           my $options = ''; # these args go to the plt.hist call
1766 0 0         if ( $plot->{'log'} ) {
1767 0           $options .= ', log = True';
1768             }
1769 0           say { $args->{fh} } 'd = []';
  0            
1770 0           my $min_n_points = 'inf';
1771 0           foreach my $key (@key_order) {
1772 0 0         @{ $plot->{data}{$key} } = grep { defined && looks_like_number($_) } @{ $plot->{data}{$key} };
  0            
  0            
  0            
1773 0           say { $args->{fh} } 'd.append(['
1774 0           . join( ',', @{ $plot->{data}{$key} } ) . '])';
  0            
1775 0           $min_n_points = min( scalar @{ $plot->{data}{$key} }, $min_n_points );
  0            
1776             }
1777 0           foreach my $axis (@{ $plot->{logscale} }) { # x, y
  0            
1778 0 0         if ($axis =~ m/^([^xy])$/) {
1779 0           p $plot->{logscale};
1780 0           die "only \"x\" and \"y\" are allowed in boxplot, not \"$axis\"";
1781             }
1782 0           say {$args->{fh}} "ax$ax.set_$axis" . 'scale("log")';
  0            
1783             }
1784 0           say { $args->{fh} } "vp = ax$ax.violinplot(d, showmeans=False, points = $min_n_points, orientation = '$plot->{orientation}', showmedians = $plot->{medians})";
  0            
1785 0 0         if ( defined $plot->{colors} ) { # every hash key should have its own color defined
1786             # the below code helps to provide better error messages in case I make an error in calling the sub
1787 0           my @wrong_keys = grep { not defined $plot->{colors}{$_} } keys %{ $plot->{data} };
  0            
  0            
1788 0 0         if ( scalar @wrong_keys > 0 ) {
1789 0           p $plot;
1790 0           p @wrong_keys;
1791 0           die 'the above data keys have no defined color';
1792             }
1793             # list of pre-defined colors: https://matplotlib.org/stable/gallery/color/named_colors.html
1794 0           say { $args->{fh} } 'colors = ["'
1795 0           . join( '","', @{ $plot->{colors} }{@key_order} ) . '"]';
  0            
1796              
1797             # the above color list will have the same order, via the above hash slice
1798 0           say { $args->{fh} } 'for i, pc in enumerate(vp["bodies"], 1):';
  0            
1799 0           say { $args->{fh} } "\tpc.set_facecolor(colors[i-1])";
  0            
1800 0           say { $args->{fh} } "\tpc.set_edgecolor('black')";
  0            
1801             } else {
1802 0           say { $args->{fh} } 'for pc in vp["bodies"]:';
  0            
1803 0 0         if ( defined $plot->{color} ) {
1804 0           say { $args->{fh} } "\tpc.set_facecolor('$plot->{color}')";
  0            
1805             }
1806 0           say { $args->{fh} } "\tpc.set_edgecolor('black')";
  0            
1807              
1808             # say {$args->{fh}} "\tpc.set_alpha(1)";
1809             }
1810 0 0         if ( $plot->{whiskers} ) {
1811             # https://matplotlib.org/stable/gallery/statistics/customized_violin.html
1812 0           say {$args->{fh} } 'import numpy as np';
  0            
1813 0           say {$args->{fh} } 'def adjacent_values(vals, q1, q3):';
  0            
1814 0           say {$args->{fh} } ' upper_adjacent_value = q3 + (q3 - q1) * 1.5';
  0            
1815 0           say {$args->{fh} }
  0            
1816             ' upper_adjacent_value = np.clip(upper_adjacent_value, q3, vals[-1])';
1817 0           say {$args->{fh} } ' lower_adjacent_value = q1 - (q3 - q1) * 1.5';
  0            
1818 0           say {$args->{fh} }
  0            
1819             ' lower_adjacent_value = np.clip(lower_adjacent_value, vals[0], q1)';
1820 0           say {$args->{fh} }
  0            
1821             ' return lower_adjacent_value, upper_adjacent_value';
1822 0           say {$args->{fh} } 'np_data = np.array(d, dtype = object)';
  0            
1823 0           say {$args->{fh} } 'quartile1 = []';
  0            
1824 0           say {$args->{fh} } 'medians = []';
  0            
1825 0           say {$args->{fh} } 'quartile3 = []';
  0            
1826 0           say {$args->{fh} } 'for subset in list(range(0, len(np_data))):';
  0            
1827 0           say {$args->{fh}} ' local_quartile1, local_medians, local_quartile3 = np.percentile(d[subset], [25, 50, 75])' . "\n";
  0            
1828 0           say {$args->{fh}} ' quartile1.append(local_quartile1)';
  0            
1829 0           say {$args->{fh}} ' medians.append(local_medians)';
  0            
1830 0           say {$args->{fh}} ' quartile3.append(local_quartile3)';
  0            
1831 0           say {$args->{fh}} 'whiskers = np.array([';
  0            
1832 0           say {$args->{fh}} ' adjacent_values(sorted_array, q1, q3)';
  0            
1833 0           say {$args->{fh}} ' for sorted_array, q1, q3 in zip(d, quartile1, quartile3)])';
  0            
1834 0           say {$args->{fh}} 'whiskers_min, whiskers_max = whiskers[:, 0], whiskers[:, 1]';
  0            
1835 0           say {$args->{fh}} 'inds = np.arange(1, len(medians) + 1)';
  0            
1836 0 0         if ( $plot->{orientation} eq 'vertical' ) {
1837 0           say { $args->{fh} } "ax$ax"
  0            
1838             . '.vlines(inds, quartile1, quartile3, color="k", linestyle="-", lw=5)';
1839 0           say { $args->{fh} } "ax$ax"
  0            
1840             . '.vlines(inds, whiskers_min, whiskers_max, color="k", linestyle="-", lw=1)';
1841             } else {
1842 0           say { $args->{fh} } "ax$ax"
  0            
1843             . '.hlines(inds, quartile1, quartile3, color="k", linestyle="-", lw=5)';
1844 0           say { $args->{fh} } "ax$ax"
  0            
1845             . '.hlines(inds, whiskers_min, whiskers_max, color="k", linestyle="-", lw=1)';
1846             }
1847             }
1848 0           foreach my $key (@key_order) {
1849             push @xticks, "$key ("
1850 0           . format_commas( scalar @{ $plot->{data}{$key} }, '%.0u' ) . ')';
  0            
1851 0 0         if ( $plot->{orientation} eq 'vertical' ) {
1852 0           say { $args->{fh} } "ax$ax.plot("
1853             . scalar @xticks . ', '
1854 0           . ( sum( @{ $plot->{data}{$key} } ) /
1855 0           scalar @{ $plot->{data}{$key} } )
  0            
1856             . ', "ro")'; # plot mean point, which is red
1857             } else { # orientation = horizontal
1858 0           say { $args->{fh} } "ax$ax.plot("
1859 0           . ( sum( @{ $plot->{data}{$key} } ) /
1860 0           scalar @{ $plot->{data}{$key} } )
  0            
1861             . ', '
1862             . scalar @xticks
1863             . ', "ro")'; # plot mean point, which is red
1864             }
1865             }
1866 0 0         if ( $plot->{orientation} eq 'vertical' ) {
1867 0           say { $args->{fh} } "ax$ax.set_xticks(["
  0            
1868             . join( ',', 1 .. scalar @key_order ) . '], ["'
1869             . join( '","', @xticks ) . '"])';
1870             } else {
1871 0           say { $args->{fh} } "ax$ax.set_yticks(["
  0            
1872             . join( ',', 1 .. scalar @key_order ) . '], ["'
1873             . join( '","', @xticks ) . '"])';
1874             }
1875             }
1876              
1877             sub wide_helper {
1878 0     0 0   my ($args) = @_;
1879 0           my $current_sub = ( split( /::/, ( caller(0) )[3] ) )[-1]
1880             ; # https://stackoverflow.com/questions/2559792/how-can-i-get-the-name-of-the-current-subroutine-in-perl
1881 0 0         if ( ref $args ne 'HASH' ) {
1882 0           die "args must be given as a hash ref, e.g. \"$current_sub({ data => \@blah })\"";
1883             }
1884 0           my @reqd_args = (
1885             'fh', # e.g. $py, $fh, which will be passed by the subroutine
1886             'plot', # args to original function
1887             );
1888 0           my @undef_args = grep { !defined $args->{$_} } @reqd_args;
  0            
1889 0 0         if ( scalar @undef_args > 0 ) {
1890 0           p @undef_args;
1891 0           die "the above args are necessary for $current_sub, but were not defined.";
1892             }
1893 0           my @opt = (@ax_methods, @plt_methods, @fig_methods, @arg, 'ax', @{ $opt{$current_sub} });
  0            
1894 0           my $plot = $args->{plot};
1895 0   0       $plot->{'show.legend'} = $plot->{'show.legend'} // 1;
1896             my @undef_opt = grep {
1897 0           my $key = $_;
1898 0           not grep { $_ eq $key } @opt
  0            
1899 0           } keys %{$plot};
  0            
1900 0 0         if ( scalar @undef_opt > 0 ) {
1901 0           p @undef_opt;
1902 0           die
1903             "The above arguments aren't defined for $plot->{'plot.type'} using $current_sub";
1904             }
1905 0           say { $args->{fh} } 'import numpy as np';
  0            
1906 0   0       my $ax = $args->{ax} // '';
1907 0           my $ref_type = ref $plot->{data};
1908 0 0         if ( $ref_type eq 'HASH' ) { # multiple groups, no label
    0          
1909 0           foreach my $group ( keys %{ $plot->{data} } ) {
  0            
1910 0   0       my $color = $plot->{color}{$group} // 'b';
1911 0           say { $args->{fh} } 'ys = []';
  0            
1912 0           my ( $min_x, $max_x ) = ( 'inf', '-inf' );
1913 0           foreach my $run ( 0 .. scalar @{ $plot->{data}{$group} } - 1 ) {
  0            
1914 0           $min_x = min( $min_x, @{ $plot->{data}{$group}[$run][0] } );
  0            
1915 0           $max_x = max( $max_x, @{ $plot->{data}{$group}[$run][0] } );
  0            
1916             }
1917 0           say { $args->{fh} } "base_y = np.linspace($max_x, $min_x, 101)";
  0            
1918 0           foreach my $run ( 0 .. scalar @{ $plot->{data}{$group} } - 1 ) {
  0            
1919 0           say { $args->{fh} } 'x = ['
1920 0           . join( ',', @{ $plot->{data}{$group}[$run][0] } ) . ']';
  0            
1921 0           say { $args->{fh} } 'y = ['
1922 0           . join( ',', @{ $plot->{data}{$group}[$run][1] } ) . ']';
  0            
1923 0           say { $args->{fh} } "ax$ax.plot(x, y, '$color', alpha=0.15)";
  0            
1924 0           say { $args->{fh} } 'y = np.interp(base_y, x, y)';
  0            
1925 0           say { $args->{fh} } 'ys.append(y)';
  0            
1926             }
1927 0           say { $args->{fh} } 'ys = np.array(ys)';
  0            
1928 0           say { $args->{fh} } 'mean_ys = ys.mean(axis=0)';
  0            
1929 0           say { $args->{fh} } 'std = ys.std(axis=0)';
  0            
1930 0           say { $args->{fh} } 'ys_upper = np.minimum(mean_ys + std, 1)';
  0            
1931 0           say { $args->{fh} } 'ys_lower = mean_ys - std';
  0            
1932 0 0         if ( $plot->{'show.legend'} > 0 ) {
1933 0           say { $args->{fh} } "ax$ax.plot(base_y, mean_ys, '$color', label = '$group')";
  0            
1934             } else {
1935 0           say { $args->{fh} } "ax$ax.plot(base_y, mean_ys, '$color')";
  0            
1936             }
1937 0           say { $args->{fh} }
  0            
1938             "ax$ax.fill_between(base_y, ys_lower, ys_upper, color='$color', alpha=0.3)";
1939             }
1940             } elsif ( $ref_type eq 'ARRAY' ) {
1941 0   0       my $color = $plot->{color} // 'b';
1942 0           say { $args->{fh} } 'ys = []';
  0            
1943 0           my ( $min_x, $max_x ) = ( 'inf', '-inf' );
1944 0           foreach my $run ( 0 .. scalar @{ $plot->{data} } - 1 ) {
  0            
1945 0           $min_x = min( $min_x, @{ $plot->{data}[$run][0] } );
  0            
1946 0           $max_x = max( $max_x, @{ $plot->{data}[$run][0] } );
  0            
1947             }
1948 0           say { $args->{fh} } "base_y = np.linspace($max_x, $min_x, 101)";
  0            
1949 0           foreach my $run ( 0 .. scalar @{ $plot->{data} } - 1 ) {
  0            
1950 0           say { $args->{fh} } 'x = ['
1951 0           . join( ',', @{ $plot->{data}[$run][0] } ) . ']';
  0            
1952 0           say { $args->{fh} } 'y = ['
1953 0           . join( ',', @{ $plot->{data}[$run][1] } ) . ']';
  0            
1954 0           say { $args->{fh} } "ax$ax.plot(x, y, '$color', alpha=0.15)";
  0            
1955 0           say { $args->{fh} } 'y = np.interp(base_y, x, y)';
  0            
1956 0           say { $args->{fh} } 'ys.append(y)';
  0            
1957             }
1958 0           say { $args->{fh} } 'ys = np.array(ys)';
  0            
1959 0           say { $args->{fh} } 'mean_ys = ys.mean(axis=0)';
  0            
1960 0           say { $args->{fh} } 'std = ys.std(axis=0)';
  0            
1961 0           say { $args->{fh} } 'ys_upper = np.minimum(mean_ys + std, 1)';
  0            
1962 0           say { $args->{fh} } 'ys_lower = mean_ys - std';
  0            
1963 0           say { $args->{fh} } "ax$ax.plot(base_y, mean_ys, '$color')";
  0            
1964 0           say { $args->{fh} }
  0            
1965             "ax$ax.fill_between(base_y, ys_lower, ys_upper, color='$color', alpha=0.3)";
1966             } else {
1967 0           die "$current_sub cannot take ref type \"$ref_type\" for \"data\"";
1968             }
1969             }
1970              
1971             sub print_type {
1972 0     0 0   my $str = shift;
1973 0           my $type = 'no quotes';
1974 0 0         if ($str =~ m/^\w+\h*=\h*["']/) {
1975 0           return 'no quotes';
1976             }
1977 0 0 0       if ($str =~ m/^\w+$/) {
    0          
    0          
1978 0           return 'single quotes';
1979             } elsif ($str =~ m/[!@#\$\%^&*\(\)\{\}\[\]\<\>,\/\-\h:;\+=\w]+$/) {
1980 0           return 'single quotes';
1981             } elsif (($str =~ m/,/) && ($str !~ m/[\]\[]/)) {
1982 0           return 'single quotes';
1983             }
1984 0           return $type;
1985             }
1986             my @all_opt;
1987             foreach my $type (keys %opt) {
1988             push @all_opt, @{ $opt{$type} };
1989             }
1990             sub plt {
1991 0     0 0   my ($args) = @_;
1992 0           my $current_sub = ( split( /::/, ( caller(0) )[3] ) )[-1]
1993             ; # https://stackoverflow.com/questions/2559792/how-can-i-get-the-name-of-the-current-subroutine-in-perl
1994 0 0         if ( ref $args ne 'HASH' ) {
1995 0           die "args must be given as a hash ref, e.g. \"$current_sub({ data => \@blah })\"";
1996             }
1997 0 0         if ((scalar grep {$args->{$_}} ('output.file', 'show')) == 0) {
  0            
1998 0           p $args;
1999 0           die 'either "show" or "output.file" must be defined';
2000             }
2001 0           my @reqd_args = ('output.file'); # e.g. "my_image.svg"
2002 0           my $single_example = 'plt({
2003             \'output.file\' => \'/tmp/gospel.word.counts.svg\',
2004             \'plot.type\' => \'bar\',
2005             data => {
2006             \'Matthew\' => 18345,
2007             \'Mark\' => 11304,
2008             \'Luke\' => 19482,
2009             \'John\' => 15635,
2010             }
2011             });';
2012 0           my $multi_example = 'plt({
2013             \'output.file\' => \'svg/pie.svg\',
2014             plots => [
2015             {
2016             data => {
2017             Russian => 106_000_000, # Primarily European Russia
2018             German => 95_000_000, # Germany, Austria, Switzerland, etc.
2019             },
2020             \'plot.type\' => \'pie\',
2021             title => \'Top Languages in Europe\',
2022             suptitle => \'Pie in subplots\',
2023             },
2024             {
2025             data => {
2026             Russian => 106_000_000, # Primarily European Russia
2027             German => 95_000_000, # Germany, Austria, Switzerland, etc.
2028             },
2029             \'plot.type\' => \'pie\',
2030             title => \'Top Languages in Europe\',
2031             },
2032             ncols => 3,
2033             });';
2034 0           my @undef_args = grep { !defined $args->{$_} } @reqd_args;
  0            
2035 0 0         if ( scalar @undef_args > 0 ) {
2036 0           p @undef_args;
2037 0           die 'the above args are necessary, but were not defined.';
2038             }
2039 0 0 0       if ( ( not defined $args->{'plot.type'} )
2040             && ( not defined $args->{plots} ) )
2041             {
2042 0           p $args;
2043 0           die 'either "plot.type" or "plots" must be defined, but neither were';
2044             }
2045 0 0         if (ref $args->{'output.file'} ne '') {
2046 0           p $args;
2047 0           die '"output.file" must be a SCALAR or string, but was given a ' . ref $args->{'output.file'};
2048             }
2049 0           my @defined_args = (@reqd_args, @ax_methods, @fig_methods, @plt_methods, @arg, @all_opt);
2050             my @bad_args = grep {
2051 0           my $key = $_;
2052 0           not grep { $_ eq $key } @defined_args
  0            
2053 0           } keys %{$args};
  0            
2054 0 0         if ( scalar @bad_args > 0 ) {
2055 0           p @defined_args, array_max => scalar @defined_args;
2056 0           p @bad_args, array_max => scalar @bad_args;
2057 0           say STDERR 'the 2nd group of arguments are not recognized, while the 1st is the defined list';
2058 0           die "The above args are accepted by \"$current_sub\"";
2059             }
2060 0           my $single_plot = 0; # false
2061 0 0 0       if ( ( defined $args->{'plot.type'} ) && ( defined $args->{data} ) ) {
2062 0           $single_plot = 1; # true
2063             }
2064 0 0 0       if (($single_plot == 1) && (not defined $args->{'plot.type'})) {
2065 0           p $args;
2066 0           say $single_example;
2067 0           die "\"plot.type\" was not defined for a single plot in $current_sub";
2068             }
2069 0 0 0       if ( ( $single_plot == 0 ) && (not defined $args->{plots} )) {
2070 0           say $multi_example;
2071 0           die "$current_sub: single plots need \"data\" and \"plot.type\", see example above";
2072             }
2073 0 0 0       if ( ( $single_plot == 0 ) && ( ref $args->{plots} ne 'ARRAY' ) ) {
2074 0           p $args;
2075 0           die "$current_sub \"plots\" must have an array entered into it";
2076             }
2077 0 0 0       if ( ( $single_plot == 0 ) && ( scalar @{ $args->{plots} } == 0 ) ) {
  0            
2078 0           p $args;
2079 0           die "$current_sub \"plots\" has 0 plots entered.";
2080             }
2081 0 0         if ($single_plot == 1) {
2082 0 0         foreach my $arg (grep {defined $args->{$_} && $args->{$_} > 1} ('ncols', 'nrows')) {
  0            
2083 0           warn "\"$arg\" is set to >1, but there is only 1 plot: resetting $arg to 1.";
2084 0           $args->{$arg} = 1;
2085             }
2086             }
2087 0   0       $args->{nrows} = $args->{nrows} // 1;
2088 0   0       $args->{ncols} = $args->{ncols} // 1;
2089 0 0 0       if ( ( $single_plot == 0 )
2090 0           && ( ( $args->{nrows} * $args->{ncols} ) < scalar @{ $args->{plots} } )
2091             )
2092             {
2093 0           p $args;
2094 0           my $n_plots = scalar @{ $args->{plots} };
  0            
2095 0           say
2096             "ncols = $args->{ncols}; nrows = $args->{nrows}, but there are $n_plots plots.\n";
2097 0           die 'There are not enough subplots for the data';
2098             }
2099 0 0         if ($single_plot == 0) { # multiple plots
2100 0           my $max_i = scalar @{ $args->{plots} } - 1;
  0            
2101 0           my @hash_ref_i = grep { ref $args->{plots}[$_]{data} eq 'HASH' } 0..$max_i;
  0            
2102 0           @bad_args = grep { scalar keys %{ $args->{plots}[$_]{data} } == 0} @hash_ref_i;
  0            
  0            
2103 0 0         if (scalar @bad_args > 0) {
2104 0           foreach my $i (@bad_args) {
2105 0           say STDERR "plot index $i:";
2106 0           p $args->{plots}[$i];
2107             }
2108 0           die "the above hash ref indices have empty data hashes for $current_sub";
2109             }
2110 0           my @output_file = grep {defined $args->{plots}[$_]{'output.file'}} 0..$max_i;
  0            
2111 0 0         if (scalar @output_file > 0) {
2112 0           p $args;
2113 0           p @output_file;
2114 0           die '"output.file" was defined at subplots indices above, which does not make sense';
2115             }
2116             }
2117 0 0 0       if (($single_plot == 1) && (ref $args->{data} eq 'HASH') && (scalar keys %{ $args->{data}} == 0 )) {
  0   0        
2118 0           p $args;
2119 0           die '"data" is an empty hash';
2120             }
2121 0 0         @bad_args = grep {defined $args->{$_} && (not looks_like_number($args->{$_}))} ('cbpad', 'ncols', 'nrows', 'scale', 'scalex', 'scaley');
  0            
2122 0 0         if (scalar @bad_args > 0) {
2123 0           p $args;
2124 0           p @bad_args;
2125 0           die 'the above args must be numeric';
2126             }
2127 0           my @ax = map { "ax$_" } 0 .. $args->{nrows} * $args->{ncols} - 1;
  0            
2128 0           my ( @py, @y, $fh);
2129 0           my $i = 0;
2130 0           foreach my $ax (@ax) {
2131 0           my $a1i = int $i / $args->{ncols}; # 1st index
2132 0           my $a2i = $i % $args->{ncols}; # 2nd index
2133 0           $y[$a1i][$a2i] = $ax;
2134 0           $i++;
2135             }
2136 0           foreach my $y (@y) {
2137 0           push @py, '(' . join( ',', @{$y} ) . ')';
  0            
2138             }
2139 0 0 0       if ((defined $args->{'shared.colorbar'}) && ($single_plot == 1)) {
2140 0           warn 'There is only 1 plot/subplot, shared colorbars make no sense... deleting';
2141 0           delete $args->{'shared.colorbar'};
2142             }
2143 0 0         if (defined $args->{'shared.colorbar'}) {
2144 0           my $ref = ref $args->{'shared.colorbar'};
2145 0 0         if ($ref ne 'ARRAY') {
2146 0           p $args;
2147 0           die '"shared.colobar" must be an array reference';
2148             }
2149 0           my $max_subplot_idx = max(@{ $args->{'shared.colorbar'} });
  0            
2150 0 0         if ($max_subplot_idx > ($args->{nrows} * $args->{ncols} - 1)) {
2151 0           p $args;
2152 0           die "the max \"shared.colorbar\" index $max_subplot_idx > than the max index of plots";
2153             }
2154             }
2155 0 0         if (defined $args->{add}) {
2156 0           my $ref = ref $args->{add};
2157 0 0         if ($ref ne 'ARRAY') {
2158 0           die "\"add\" must be an array (of anonymous hashes), but you entered a $ref reference";
2159             }
2160             }
2161 0 0         if ( defined $args->{fh} ) {
2162 0           my $ref = ref $args->{fh};
2163 0 0         if ($ref ne 'File::Temp') {
2164 0           p $args;
2165 0           die "$current_sub received a \"$ref\" for \"fh\", which isn't a \"File::Temp\" object.";
2166             }
2167 0           $fh = $args->{fh};# open $fh, '>>', $args->{fh};
2168             } else {
2169 0           $fh = File::Temp->new(DIR => '/tmp', SUFFIX => '.py', UNLINK => 0);
2170             }
2171 0           say 'temp file is ' . $fh->filename;
2172 0           say $fh 'import matplotlib.pyplot as plt';
2173 0           say $fh 'import json, base64';
2174 0 0         if ( $single_plot == 0 ) {
    0          
2175 0   0       $args->{sharex} = $args->{sharex} // 0;
2176 0   0       $args->{sharey} = $args->{sharey} // 0;
2177 0           say $fh 'fig, ('
2178             . join( ',', @py )
2179             . ") = plt.subplots($args->{nrows}, $args->{ncols}, sharex = $args->{sharex}, sharey = $args->{sharey}, layout = 'constrained') #" . __LINE__;
2180             } elsif ( $single_plot == 1 ) {
2181 0           say $fh 'fig, ax0 = plt.subplots(1,1, layout = "constrained")';
2182             } else {
2183 0           die "\$single_plot = $single_plot breaks pigeonholes";
2184             }
2185 0 0         if ( defined $args->{plots} ) {
2186 0           my @undef_plot_types;
2187 0           my $j = 0;
2188 0           foreach my $plot (@{ $args->{plots} }) {
  0            
2189 0 0         next if defined $plot->{'plot.type'};
2190 0           push @undef_plot_types, $j;
2191 0           $j++;
2192             }
2193 0 0         if ( scalar @undef_plot_types > 0 ) {
2194 0           p $args;
2195 0           p @undef_plot_types;
2196 0           die 'The above subplot indices are missing "plot.type"';
2197             }
2198             }
2199 0           my %dispatch = (
2200             bar => \&barplot_helper, barh => \&barplot_helper,
2201             boxplot => \&boxplot_helper, colored_table=> \&colored_table_helper,
2202             hexbin => \&hexbin_helper, hist => \&hist_helper,
2203             hist2d => \&hist2d_helper, imshow => \&imshow_helper,
2204             pie => \&pie_helper, plot => \&plot_helper,
2205             scatter => \&scatter_helper, violin => \&violin_helper,
2206             violinplot => \&violin_helper,
2207             wide => \&wide_helper
2208             );
2209 0 0         if ($single_plot == 1) {
2210 0           foreach my $graph (@{ $args->{add} }) {
  0            
2211 0   0       my $type = $graph->{'plot.type'} // $args->{'plot.type'};
2212 0 0         die 'plot.type not defined' unless defined $graph->{'plot.type'};
2213 0           $dispatch{$type}->({
2214             fh => $fh,
2215             ax => 0,
2216             plot => $graph
2217             });
2218             }
2219 0           delete $args->{add};
2220 0           my $type = $args->{'plot.type'};
2221 0 0         unless (defined $dispatch{$type}) {
2222 0           p $args;
2223 0           die "$type isn't defined";
2224             }
2225 0 0         die 'plot.type not defined' unless defined $dispatch{$type};
2226 0           $dispatch{$type}->({
2227             fh => $fh,
2228             ax => 0,
2229             plot => $args
2230             });
2231 0           my %rename = (
2232             xlabel => 'set_xlabel',
2233             title => 'set_title',
2234             ylabel => 'set_ylabel',
2235             legend => 'legend',
2236             xlim => 'set_xlim',
2237             );
2238 0           foreach my $opt ( grep { defined $rename{$_} } keys %{$args} ) {
  0            
  0            
2239 0           $args->{ $rename{$opt} } = delete $args->{$opt};
2240             }
2241             plot_args({
2242 0           fh => $fh,
2243             args => $args,
2244             ax => 'ax0'
2245             });
2246             }
2247 0           my $ax = 0;
2248 0           foreach my $plot (@{ $args->{plots} } ) {
  0            
2249 0 0 0       if (
2250             (defined $args->{'shared.colorbar'}) && # shared.colorbar is defined
2251 0           (grep {$_ == $ax} @{ $args->{'shared.colorbar'} }) # subplot's colorbar is shared w other plots
  0            
2252             ) {
2253 0 0         if ($ax == max( @{ $args->{'shared.colorbar'} } )) { # this is the max
  0            
2254 0           $plot->{'colorbar.on'} = 1; # turn on if this is the max plot
2255 0           $plot->{'shared.colorbar'} = $args->{'shared.colorbar'};
2256 0           $plot->{cbpad} = $args->{cbpad};
2257             } else {
2258 0           $plot->{'colorbar.on'} = 0; # turn off, its colorbar will be shared later
2259             }
2260             }
2261 0 0         if (defined $plot->{add}) {
2262 0           my $ref = ref $plot->{add};
2263 0 0         if ($ref ne 'ARRAY') {
2264 0           die "\"add\" must be an array (of anonymous hashes), but you entered a $ref reference at ax = $ax";
2265             }
2266             }
2267 0           foreach my $graph (@{ $plot->{add} }) {
  0            
2268 0           $dispatch{$graph->{'plot.type'}}->({
2269             fh => $fh,
2270             ax => $ax,
2271             plot => $graph
2272             });
2273             }
2274 0           delete $plot->{add};
2275 0           my @reqd_keys = (
2276             'data', # data type, of which several are available
2277             'plot.type', # "bar", "barh", "hist", etc.
2278             );
2279 0           my @undef_keys = grep { !defined $plot->{$_} } @reqd_keys;
  0            
2280 0 0         if ( scalar @undef_keys > 0 ) {
2281 0           p $plot;
2282 0           p @undef_keys;
2283 0           die "Above args are necessary, but were not defined for plot $ax.";
2284             }
2285 0           $dispatch{$plot->{'plot.type'}}->({
2286             fh => $fh,
2287             ax => $ax,
2288             plot => $plot
2289             });
2290 0           my %rename = (
2291             xlabel => 'set_xlabel', title => 'set_title',
2292             ylabel => 'set_ylabel', legend => 'legend',
2293             # xlim => 'set_xlim',
2294             );
2295 0           foreach my $opt ( grep { defined $rename{$_} } keys %{$plot} ) {
  0            
  0            
2296 0           $plot->{ $rename{$opt} } = delete $plot->{$opt};
2297             }
2298             plot_args({
2299 0           fh => $fh,
2300             args => $plot,
2301             ax => "ax$ax"
2302             });
2303 0           $ax++;
2304             }
2305 0           foreach my $ax (@ax) {
2306 0           say $fh "if $ax.has_data() == False:"; # remove empty plots
2307 0           say $fh "\t$ax.remove()"; # remove empty plots
2308             }
2309 0           my %methods = map { $_ => 1 } @plt_methods;
  0            
2310 0           foreach my $plt_method ( grep { defined $methods{$_} } keys %{$args} ) {
  0            
  0            
2311 0           my $ref = ref $args->{$plt_method};
2312 0 0         if ( $ref eq '' ) {
    0          
2313 0           my $type = print_type($args->{$plt_method});
2314 0 0         if ($type eq 'single quotes') {
    0          
2315 0 0         if ($plt_method eq 'show') {
2316 0           say $fh "plt.$plt_method()#" . __LINE__;
2317             } else {
2318 0           say $fh "plt.$plt_method('$args->{$plt_method}')#" . __LINE__;
2319             }
2320             } elsif ($type eq 'no quotes') {
2321 0           say $fh "plt.$plt_method($args->{$plt_method})#" . __LINE__;
2322             }
2323             } elsif ( $ref eq 'ARRAY' ) {
2324 0           foreach my $j ( @{ $args->{$plt_method} } ) {
  0            
2325 0           my $type = print_type($j);
2326 0 0         if ($type eq 'single quotes') {
    0          
2327 0           say $fh "plt.$plt_method('$j')#" . __LINE__;
2328             } elsif ($type eq 'no quotes') {
2329 0           say $fh "plt.$plt_method($j)#" . __LINE__;
2330             }
2331             }
2332             } else {
2333 0           p $args;
2334 0           die "$plt_method = \"$ref\" only accepts scalar or array types";
2335             }
2336             }
2337 0           %methods = map { $_ => 1 } @fig_methods;
  0            
2338 0           foreach my $fig_method ( grep { defined $methods{$_} } keys %{$args} ) {
  0            
  0            
2339 0           my $ref = ref $args->{$fig_method};
2340 0 0         if ( $ref eq '' ) {
    0          
2341 0           say $fh "fig.$fig_method($args->{$fig_method})#" . __LINE__;
2342             } elsif ( $ref eq 'ARRAY' ) {
2343 0           foreach my $j ( @{ $args->{$fig_method} } ) { # say $fh "plt.$method($plt)";
  0            
2344 0           say $fh "fig.$fig_method($j)";
2345             }
2346             } else {
2347 0           p $args;
2348 0           die "$fig_method = \"$ref\" only accepts scalar or array types";
2349             }
2350             }
2351 0 0         if (defined $args->{scale}) {
2352 0           say $fh "fig.set_figheight(plt.rcParams['figure.figsize'][1] * $args->{scale}) #" . __LINE__;
2353 0           say $fh "fig.set_figwidth(plt.rcParams['figure.figsize'][0] * $args->{scale}) #" . __LINE__;
2354             }
2355 0 0         if (defined $args->{scalex}) {
2356 0           say $fh "fig.set_figwidth(plt.rcParams['figure.figsize'][0] * $args->{scalex}) #" . __LINE__;
2357             }
2358 0 0         if (defined $args->{scaley}) {
2359 0           say $fh "fig.set_figheight(plt.rcParams['figure.figsize'][1] * $args->{scaley}) #" . __LINE__;
2360             }
2361             write_data({
2362 0           data => $args->{'output.file'},
2363             fh => $fh,
2364             name => 'output_file'
2365             });
2366 0           say $fh "plt.savefig(output_file, bbox_inches = 'tight', metadata={'Creator': 'made/written by "
2367             . getcwd()
2368             . "/$RealScript called using \"$current_sub\" in " . __FILE__ . " version $VERSION'})";
2369 0   0       $args->{execute} = $args->{execute} // 1;
2370 0 0         say $fh 'plt.close()' if $args->{execute} == 0;
2371 0 0         if ( $args->{execute} ) {
2372             my ($stdout, $stderr, $exit) = capture {
2373 0     0     system( 'python3 ' . $fh->filename )
2374 0           };
2375 0 0         if ($exit != 0) {
2376 0           say STDERR "STDOUT = $stdout";
2377 0           say STDERR "STDERR = $stderr";
2378 0           die 'python3 ' . $fh->filename . ' failed';
2379             }
2380 0           say 'wrote '
2381             . colored( ['cyan on_bright_yellow'], "$args->{'output.file'}" );
2382             } else { # not running yet
2383 0           say 'will write '
2384             . colored( ['cyan on_bright_yellow'], "$args->{'output.file'}" );
2385             }
2386 0           return $fh->filename;
2387             }
2388             # Generate wrappers dynamically
2389             my @wrappers = qw(bar barh boxplot colored_table hexbin hist hist2d imshow pie plot scatter violin wide);
2390              
2391             foreach my $sub_name (@wrappers) {
2392 2     2   24 no strict 'refs'; # Gemini helped
  2         4  
  2         996  
2393             *$sub_name = sub {
2394 0     0     my ($args) = @_;
2395             # Check for conflicts
2396 0 0 0       if ((defined $args->{'plot.type'}) && ($args->{'plot.type'} ne $sub_name)) {
2397 0           warn "$args->{'plot.type'} will be ignored for $sub_name";
2398             }
2399 0 0         if (defined $args->{plots}) {
2400 0           die "\"plots\" is meant for the subroutine \"plt\"; $sub_name is single-only";
2401             }
2402             # Call plt
2403 0           plt({ %{ $args }, 'plot.type' => $sub_name });
  0            
2404             };
2405             }
2406             1;
2407             # from md2pod.pl πατερ ημων ο εν τοις ουρανοις, ἁγιασθήτω τὸ ὄνομά σου
2408             =encoding utf8
2409              
2410             =head1 Synopsis
2411              
2412             Take a data structure in Perl, and automatically write a Python3 script using matplotlib to generate an image. The Python3 script is saved in C, to be edited at the user's discretion.
2413             Requires python3 and matplotlib installations.
2414              
2415             My aim is to simplify the most common tasks as much as possible. In my opinion, using this module is much easier than matplotlib itself.
2416              
2417             =head1 Single Plots
2418              
2419             Simplest use case:
2420              
2421             use Matplotlib::Simple;
2422             bar({
2423             'output.file' => '/tmp/gospel.word.counts.png',
2424             data => {
2425             Matthew => 18345,
2426             Mark => 11304,
2427             Luke => 19482,
2428             John => 15635,
2429             }
2430             });
2431              
2432             A more complete (and slightly faster execution):
2433              
2434             use Matplotlib::Simple;
2435             plt({
2436             'output.file' => '/tmp/gospel.word.counts.png',
2437             'plot.type' => 'bar',
2438             data => {
2439             Matthew => 18345,
2440             Mark => 11304,
2441             Luke => 19482,
2442             John => 15635,
2443             }
2444             });
2445              
2446              
2447             =for html
2448            

2449             gospel word counts
2450            

2451              
2452              
2453             =head1 Multiple Plots
2454              
2455             Having a C argument as an array lets the module know to create subplots:
2456              
2457             use Matplotlib::Simple 'plt';
2458             plt({
2459             'output.file' => 'svg/pies.png',
2460             plots => [
2461             {
2462             data => {
2463             Russian => 106_000_000, # Primarily European Russia
2464             German => 95_000_000, # Germany, Austria, Switzerland, etc.
2465             },
2466             'plot.type' => 'pie',
2467             title => 'Top Languages in Europe',
2468             suptitle => 'Pie in subplots',
2469             },
2470             {
2471             data => {
2472             Russian => 106_000_000, # Primarily European Russia
2473             German => 95_000_000, # Germany, Austria, Switzerland, etc.
2474             },
2475             'plot.type' => 'pie',
2476             title => 'Top Languages in Europe',
2477             },
2478             ],
2479             ncols => 2,
2480             });
2481              
2482             which produces the following subplots image:
2483              
2484              
2485             =for html
2486            

2487             pies
2488            

2489              
2490              
2491             C, C, C, C, C, C, C, C, C, C, and C all match the methods in matplotlib itself.
2492              
2493             =head2 Options
2494              
2495             C and C are both implemented at the plot, rather than subplot, level. See Matplotlib's documentation for more clarity.
2496              
2497             =head1 Color Bars (colorbars)
2498              
2499             Colarbar args attempt to match matplotlib closely
2500              
2501             =for html
2502            
2503            
2504            
OptionDescriptionExample
2505            
----------------------
2506            
cbdrawedgesWhether to draw lines at color boundariescbdrawedges => 1
2507            
cblabelThe label on the colorbar's long axiscblabel => 1
2508            
cblocationof the colorbar None or {'left', 'right', 'top', 'bottom'}
2509            
cborientation# None or {vertical, horizontal}
2510            
cbpadpad : float, default: 0.05 if vertical, 0.15 if horizontal; Fraction of original Axes between colorbar and new image Axes
2511            
cb_logscalePerl true (anything but 0) or false (0)
2512            
shared.colorbarshare colorbar between different plots: specify plot indices'shared.colorbar' => [0,1]
2513            
2514            
2515              
2516             =head1 Size/Dimensions of output file
2517              
2518             =for html
2519            
2520            
2521            
OptionDescriptionExample
2522            
----------------------
2523            
scalescale/multiply the size of the output figurescale => 2.4
2524            
scalexscale/multiply the x-axis onlyscalex => 2.4
2525            
scaleyscale/multiply the y-axis onlyscalex => 1.4
2526            
2527            
2528              
2529             =head1 Examples/Plot Types
2530              
2531             Consider the following helper subroutines to generate data to plot:
2532              
2533             sub linspace { # mostly written by Grok
2534             my ($start, $stop, $num, $endpoint) = @_; # endpoint means include $stop
2535             $num = defined $num ? int($num) : 50; # Default to 50 points
2536             $endpoint = defined $endpoint ? $endpoint : 1; # Default to include endpoint
2537             return () if $num < 0; # Return empty array for invalid num
2538             return ($start) if $num == 1; # Return single value if num is 1
2539             my (@result, $step);
2540            
2541             if ($endpoint) {
2542             $step = ($stop - $start) / ($num - 1) if $num > 1;
2543             for my $i (0 .. $num - 1) {
2544             $result[$i] = $start + $i * $step;
2545             }
2546             } else {
2547             $step = ($stop - $start) / $num;
2548             for my $i (0 .. $num - 1) {
2549             $result[$i] = $start + $i * $step;
2550             }
2551             }
2552             return @result;
2553             }
2554            
2555             sub generate_normal_dist {
2556             my ($mean, $std_dev, $size) = @_;
2557             $size = defined $size ? int $size : 100; # default to 100 points
2558             my @numbers;
2559             for (1 .. int($size / 2) + 1) {# Box-Muller transform
2560             my $u1 = rand();
2561             my $u2 = rand();
2562             my $z0 = sqrt(-2.0 * log($u1)) * cos(2.0 * 3.141592653589793 * $u2);
2563             my $z1 = sqrt(-2.0 * log($u1)) * sin(2.0 * 3.141592653589793 * $u2); # Scale and shift to match mean and std_dev
2564             push @numbers, ($z0 * $std_dev + $mean, $z1 * $std_dev + $mean);
2565             } # Trim to exact size if needed
2566             @numbers = @numbers[0 .. $size - 1] if @numbers > $size;
2567             @numbers = map {sprintf '%.1f', $_} @numbers;
2568             return \@numbers;
2569             }
2570             sub rand_between {
2571             my ($min, $max) = @_;
2572             return $min + rand($max - $min)
2573             }
2574              
2575             =head2 Barplot/bar/barh
2576              
2577             Plot a hash or a hash of arrays as a boxplot
2578              
2579             =head3 Options
2580              
2581             =for html
2582            
2583            
2584            
OptionDescriptionExample
2585            
----------------------
2586            
color:mpltype:color or list of :mpltype:color, optional; The colors of the bar faces. This is an alias for *facecolor*. If both are given, *facecolor* takes precedence # if entering multiple colors, quoting isn't needed; as of version 0.23, colors can be given as a hashcolor => ['red', 'orange', 'yellow', 'green', 'blue', 'indigo', 'fuchsia'], or a single color for all bars color => 'red', or as of version 0.23 color => {A => 'red', B => 'green'}
2587            
edgecolor:mpltype:color or list of :mpltype:color, optional; The colors of the bar edgesedgecolor => 'black'
2588            
key.orderdefine the keys in an order (an array reference)'key.order' => ['Sun','Mon','Tue','Wed','Thu','Fri','Sat'],
2589            
linewidthfloat or array, optional; Width of the bar edge(s). If 0, don't draw edges. Only does anything with defined edgecolorlinewidth => 2,
2590            
logbool, default: False; If *True*, set the y-axis to be log scale.log = 'True',
2591            
stackedstack the groups on top of one another; default 0 = offstacked => 1,
2592            
widthfloat only, default: 0.8; The width(s) of the bars. width will be deactivated with grouped, non-stacked bar plotswidth => 0.4,
2593            
xerrfloat or array-like of shape(N,) or shape(2, N), optional. If not *None*, add horizontal / vertical errorbars to the bar tips. The values are +/- sizes relative to the data: - scalar: symmetric +/- values for all bars # - shape(N,): symmetric +/- values for each bar # - shape(2, N): Separate - and + values for each bar. First row # contains the lower errors, the second row contains the upper # errors. # - *None*: No errorbar. (Default)yerr => {'USA' => [15,29], 'Russia' => [199,1000],}
2594            
yerrsame as xerr, but better with bar
2595            
2596            
2597              
2598             an example of multiple plots, showing many options:
2599              
2600             =head3 single, simple plot
2601              
2602             use Matplotlib::Simple 'plt';
2603             plt({
2604             'output.file' => 'output.images/single.barplot.png',
2605             data => { # simple hash
2606             Fri => 76, Mon => 73, Sat => 26, Sun => 11, Thu => 94, Tue => 93, Wed => 77
2607             },
2608             'plot.type' => 'bar',
2609             xlabel => '# of Days',
2610             ylabel => 'Count',
2611             title => 'Customer Calls by Days'
2612             });
2613              
2614             where C, C, C, etc. are axis methods in matplotlib itself. C<plot.type>, C<data>, C<fh> are all specific to C<MatPlotLib::Simple>. </td> </tr> <tr> <td class="h" > <a name="2615">2615</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2616">2616</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =for html </td> </tr> <tr> <td class="h" > <a name="2617">2617</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <p> </td> </tr> <tr> <td class="h" > <a name="2618">2618</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <img width="651" height="491" alt="single barplot" src="https://github.com/user-attachments/assets/eae009a8-5571-4608-abdb-1016e3cff5fd" /> </td> </tr> <tr> <td class="h" > <a name="2619">2619</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <p> </td> </tr> <tr> <td class="h" > <a name="2620">2620</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2621">2621</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2622">2622</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =head3 multiple plots </td> </tr> <tr> <td class="h" > <a name="2623">2623</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2624">2624</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> plt({ </td> </tr> <tr> <td class="h" > <a name="2625">2625</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> fh => $fh, </td> </tr> <tr> <td class="h" > <a name="2626">2626</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> execute => 0, </td> </tr> <tr> <td class="h" > <a name="2627">2627</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'output.file' => 'output.images/barplots.png', </td> </tr> <tr> <td class="h" > <a name="2628">2628</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> plots => [ </td> </tr> <tr> <td class="h" > <a name="2629">2629</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> { # simple plot </td> </tr> <tr> <td class="h" > <a name="2630">2630</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> data => { # simple hash </td> </tr> <tr> <td class="h" > <a name="2631">2631</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Fri => 76, Mon => 73, Sat => 26, Sun => 11, Thu => 94, Tue => 93, Wed => 77 </td> </tr> <tr> <td class="h" > <a name="2632">2632</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="2633">2633</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'plot.type' => 'bar', </td> </tr> <tr> <td class="h" > <a name="2634">2634</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'key.order' => ['Sun','Mon','Tue','Wed','Thu','Fri','Sat'], </td> </tr> <tr> <td class="h" > <a name="2635">2635</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> suptitle => 'Types of Plots', # applies to all </td> </tr> <tr> <td class="h" > <a name="2636">2636</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> color => ['red', 'orange', 'yellow', 'green', 'blue', 'indigo', 'fuchsia'], </td> </tr> <tr> <td class="h" > <a name="2637">2637</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> edgecolor => 'black', </td> </tr> <tr> <td class="h" > <a name="2638">2638</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> set_figwidth => 40/1.5, # applies to all plots </td> </tr> <tr> <td class="h" > <a name="2639">2639</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> set_figheight => 30/2, # applies to all plots </td> </tr> <tr> <td class="h" > <a name="2640">2640</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> title => 'bar: Rejections During Job Search', </td> </tr> <tr> <td class="h" > <a name="2641">2641</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> xlabel => 'Day of the Week', </td> </tr> <tr> <td class="h" > <a name="2642">2642</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ylabel => 'No. of Rejections' </td> </tr> <tr> <td class="h" > <a name="2643">2643</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="2644">2644</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> { # grouped bar plot </td> </tr> <tr> <td class="h" > <a name="2645">2645</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'plot.type' => 'bar', </td> </tr> <tr> <td class="h" > <a name="2646">2646</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> data => { </td> </tr> <tr> <td class="h" > <a name="2647">2647</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 1941 => { </td> </tr> <tr> <td class="h" > <a name="2648">2648</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> UK => 6.6, </td> </tr> <tr> <td class="h" > <a name="2649">2649</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> US => 6.2, </td> </tr> <tr> <td class="h" > <a name="2650">2650</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> USSR => 17.8, </td> </tr> <tr> <td class="h" > <a name="2651">2651</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Germany => 26.6 </td> </tr> <tr> <td class="h" > <a name="2652">2652</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="2653">2653</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 1942 => { </td> </tr> <tr> <td class="h" > <a name="2654">2654</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> UK => 7.6, </td> </tr> <tr> <td class="h" > <a name="2655">2655</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> US => 26.4, </td> </tr> <tr> <td class="h" > <a name="2656">2656</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> USSR => 19.2, </td> </tr> <tr> <td class="h" > <a name="2657">2657</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Germany => 29.7 </td> </tr> <tr> <td class="h" > <a name="2658">2658</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="2659">2659</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 1943 => { </td> </tr> <tr> <td class="h" > <a name="2660">2660</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> UK => 7.9, </td> </tr> <tr> <td class="h" > <a name="2661">2661</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> US => 61.4, </td> </tr> <tr> <td class="h" > <a name="2662">2662</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> USSR => 22.5, </td> </tr> <tr> <td class="h" > <a name="2663">2663</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Germany => 34.9 </td> </tr> <tr> <td class="h" > <a name="2664">2664</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="2665">2665</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 1944 => { </td> </tr> <tr> <td class="h" > <a name="2666">2666</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> UK => 7.4, </td> </tr> <tr> <td class="h" > <a name="2667">2667</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> US => 80.5, </td> </tr> <tr> <td class="h" > <a name="2668">2668</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> USSR => 27.0, </td> </tr> <tr> <td class="h" > <a name="2669">2669</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Germany => 31.4 </td> </tr> <tr> <td class="h" > <a name="2670">2670</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="2671">2671</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 1945 => { </td> </tr> <tr> <td class="h" > <a name="2672">2672</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> UK => 5.4, </td> </tr> <tr> <td class="h" > <a name="2673">2673</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> US => 83.1, </td> </tr> <tr> <td class="h" > <a name="2674">2674</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> USSR => 25.5, </td> </tr> <tr> <td class="h" > <a name="2675">2675</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Germany => 11.2 #Rapid decrease due to war's end <br /> </td> </tr> <tr> <td class="h" > <a name="2676">2676</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="2677">2677</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="2678">2678</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> stacked => 0, </td> </tr> <tr> <td class="h" > <a name="2679">2679</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> title => 'Hash of Hash Grouped Unstacked Barplot', </td> </tr> <tr> <td class="h" > <a name="2680">2680</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> width => 0.23, </td> </tr> <tr> <td class="h" > <a name="2681">2681</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> xlabel => 'r"$\it{anno}$ $\it{domini}$"', # italic </td> </tr> <tr> <td class="h" > <a name="2682">2682</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ylabel => 'Military Expenditure (Billions of $)' </td> </tr> <tr> <td class="h" > <a name="2683">2683</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="2684">2684</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> { # grouped bar plot </td> </tr> <tr> <td class="h" > <a name="2685">2685</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'plot.type' => 'bar', </td> </tr> <tr> <td class="h" > <a name="2686">2686</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> data => { </td> </tr> <tr> <td class="h" > <a name="2687">2687</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 1941 => { </td> </tr> <tr> <td class="h" > <a name="2688">2688</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> UK => 6.6, </td> </tr> <tr> <td class="h" > <a name="2689">2689</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> US => 6.2, </td> </tr> <tr> <td class="h" > <a name="2690">2690</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> USSR => 17.8, </td> </tr> <tr> <td class="h" > <a name="2691">2691</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Germany => 26.6 </td> </tr> <tr> <td class="h" > <a name="2692">2692</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="2693">2693</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 1942 => { </td> </tr> <tr> <td class="h" > <a name="2694">2694</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> UK => 7.6, </td> </tr> <tr> <td class="h" > <a name="2695">2695</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> US => 26.4, </td> </tr> <tr> <td class="h" > <a name="2696">2696</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> USSR => 19.2, </td> </tr> <tr> <td class="h" > <a name="2697">2697</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Germany => 29.7 </td> </tr> <tr> <td class="h" > <a name="2698">2698</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="2699">2699</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 1943 => { </td> </tr> <tr> <td class="h" > <a name="2700">2700</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> UK => 7.9, </td> </tr> <tr> <td class="h" > <a name="2701">2701</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> US => 61.4, </td> </tr> <tr> <td class="h" > <a name="2702">2702</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> USSR => 22.5, </td> </tr> <tr> <td class="h" > <a name="2703">2703</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Germany => 34.9 </td> </tr> <tr> <td class="h" > <a name="2704">2704</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="2705">2705</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 1944 => { </td> </tr> <tr> <td class="h" > <a name="2706">2706</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> UK => 7.4, </td> </tr> <tr> <td class="h" > <a name="2707">2707</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> US => 80.5, </td> </tr> <tr> <td class="h" > <a name="2708">2708</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> USSR => 27.0, </td> </tr> <tr> <td class="h" > <a name="2709">2709</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Germany => 31.4 </td> </tr> <tr> <td class="h" > <a name="2710">2710</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="2711">2711</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 1945 => { </td> </tr> <tr> <td class="h" > <a name="2712">2712</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> UK => 5.4, </td> </tr> <tr> <td class="h" > <a name="2713">2713</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> US => 83.1, </td> </tr> <tr> <td class="h" > <a name="2714">2714</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> USSR => 25.5, </td> </tr> <tr> <td class="h" > <a name="2715">2715</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Germany => 11.2 #Rapid decrease due to war's end </td> </tr> <tr> <td class="h" > <a name="2716">2716</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="2717">2717</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="2718">2718</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> stacked => 1, </td> </tr> <tr> <td class="h" > <a name="2719">2719</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> title => 'Hash of Hash Grouped Stacked Barplot', </td> </tr> <tr> <td class="h" > <a name="2720">2720</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> xlabel => 'r"$\it{anno}$ $\it{domini}$"', # italic </td> </tr> <tr> <td class="h" > <a name="2721">2721</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ylabel => 'Military Expenditure (Billions of $)' </td> </tr> <tr> <td class="h" > <a name="2722">2722</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="2723">2723</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> {# grouped barplot: arrays indicate Union, Confederate which must be specified in options hash </td> </tr> <tr> <td class="h" > <a name="2724">2724</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> data => { # 4th plot: arrays indicate Union, Confederate which must be specified in options hash </td> </tr> <tr> <td class="h" > <a name="2725">2725</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'Antietam' => [ 12400, 10300 ], </td> </tr> <tr> <td class="h" > <a name="2726">2726</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'Gettysburg' => [ 23000, 28000 ], </td> </tr> <tr> <td class="h" > <a name="2727">2727</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'Chickamauga' => [ 16000, 18000 ], </td> </tr> <tr> <td class="h" > <a name="2728">2728</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'Chancellorsville' => [ 17000, 13000 ], </td> </tr> <tr> <td class="h" > <a name="2729">2729</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'Wilderness' => [ 17500, 11000 ], </td> </tr> <tr> <td class="h" > <a name="2730">2730</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'Spotsylvania' => [ 18000, 12000 ], </td> </tr> <tr> <td class="h" > <a name="2731">2731</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'Cold Harbor' => [ 12000, 5000 ], </td> </tr> <tr> <td class="h" > <a name="2732">2732</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'Shiloh' => [ 13000, 10700 ], </td> </tr> <tr> <td class="h" > <a name="2733">2733</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'Second Bull Run' => [ 10000, 8000 ], </td> </tr> <tr> <td class="h" > <a name="2734">2734</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'Fredericksburg' => [ 12600, 5300 ], </td> </tr> <tr> <td class="h" > <a name="2735">2735</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="2736">2736</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'plot.type' => 'barh', </td> </tr> <tr> <td class="h" > <a name="2737">2737</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> color => ['blue', 'gray'], # colors match indices of data arrays </td> </tr> <tr> <td class="h" > <a name="2738">2738</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> label => ['North', 'South'], # colors match indices of data arrays </td> </tr> <tr> <td class="h" > <a name="2739">2739</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> xlabel => 'Casualties', </td> </tr> <tr> <td class="h" > <a name="2740">2740</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ylabel => 'Battle', </td> </tr> <tr> <td class="h" > <a name="2741">2741</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> title => 'barh: hash of array' </td> </tr> <tr> <td class="h" > <a name="2742">2742</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="2743">2743</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> { # 5th plot: barplot with groups </td> </tr> <tr> <td class="h" > <a name="2744">2744</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> data => { </td> </tr> <tr> <td class="h" > <a name="2745">2745</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 1942 => [ 109867, 310000, 7700000 ], # US, Japan, USSR </td> </tr> <tr> <td class="h" > <a name="2746">2746</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 1943 => [ 221111, 440000, 9000000 ], </td> </tr> <tr> <td class="h" > <a name="2747">2747</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 1944 => [ 318584, 610000, 7000000 ], </td> </tr> <tr> <td class="h" > <a name="2748">2748</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 1945 => [ 318929, 1060000, 3000000 ], </td> </tr> <tr> <td class="h" > <a name="2749">2749</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="2750">2750</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> color => ['blue', 'pink', 'red'], # colors match indices of data arrays </td> </tr> <tr> <td class="h" > <a name="2751">2751</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> label => ['USA', 'Japan', 'USSR'], # colors match indices of data arrays </td> </tr> <tr> <td class="h" > <a name="2752">2752</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'log' => 1, </td> </tr> <tr> <td class="h" > <a name="2753">2753</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> title => 'grouped bar: Casualties in WWII', </td> </tr> <tr> <td class="h" > <a name="2754">2754</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ylabel => 'Casualties', </td> </tr> <tr> <td class="h" > <a name="2755">2755</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'plot.type' => 'bar' </td> </tr> <tr> <td class="h" > <a name="2756">2756</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, <br /> </td> </tr> <tr> <td class="h" > <a name="2757">2757</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> { # nuclear weapons barplot </td> </tr> <tr> <td class="h" > <a name="2758">2758</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'plot.type' => 'bar', </td> </tr> <tr> <td class="h" > <a name="2759">2759</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> data => { </td> </tr> <tr> <td class="h" > <a name="2760">2760</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'USA' => 5277, # FAS Estimate </td> </tr> <tr> <td class="h" > <a name="2761">2761</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'Russia' => 5449, # FAS Estimate </td> </tr> <tr> <td class="h" > <a name="2762">2762</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'UK' => 225, # Consistent estimate </td> </tr> <tr> <td class="h" > <a name="2763">2763</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'France' => 290, # Consistent estimate </td> </tr> <tr> <td class="h" > <a name="2764">2764</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'China' => 600, # FAS Estimate </td> </tr> <tr> <td class="h" > <a name="2765">2765</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'India' => 180, # FAS Estimate </td> </tr> <tr> <td class="h" > <a name="2766">2766</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'Pakistan' => 130, # FAS Estimate </td> </tr> <tr> <td class="h" > <a name="2767">2767</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'Israel' => 90, # FAS Estimate </td> </tr> <tr> <td class="h" > <a name="2768">2768</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'North Korea' => 50, # FAS Estimate </td> </tr> <tr> <td class="h" > <a name="2769">2769</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="2770">2770</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> title => 'Simple hash for barchart with yerr', </td> </tr> <tr> <td class="h" > <a name="2771">2771</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> xlabel => 'Country', </td> </tr> <tr> <td class="h" > <a name="2772">2772</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> yerr => { </td> </tr> <tr> <td class="h" > <a name="2773">2773</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'USA' => [15,29], </td> </tr> <tr> <td class="h" > <a name="2774">2774</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'Russia' => [199,1000], </td> </tr> <tr> <td class="h" > <a name="2775">2775</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'UK' => [15,19], </td> </tr> <tr> <td class="h" > <a name="2776">2776</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'France' => [19,29], </td> </tr> <tr> <td class="h" > <a name="2777">2777</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'China' => [200,159], </td> </tr> <tr> <td class="h" > <a name="2778">2778</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'India' => [15,25], </td> </tr> <tr> <td class="h" > <a name="2779">2779</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'Pakistan' => [15,49], </td> </tr> <tr> <td class="h" > <a name="2780">2780</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'Israel' => [90,50], </td> </tr> <tr> <td class="h" > <a name="2781">2781</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'North Korea' => [10,20], </td> </tr> <tr> <td class="h" > <a name="2782">2782</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="2783">2783</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ylabel => '# of Nuclear Warheads', </td> </tr> <tr> <td class="h" > <a name="2784">2784</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'log' => 'True', # linewidth => 1, </td> </tr> <tr> <td class="h" > <a name="2785">2785</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="2786">2786</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ], </td> </tr> <tr> <td class="h" > <a name="2787">2787</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ncols => 3, </td> </tr> <tr> <td class="h" > <a name="2788">2788</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> nrows => 4 </td> </tr> <tr> <td class="h" > <a name="2789">2789</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }); </td> </tr> <tr> <td class="h" > <a name="2790">2790</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2791">2791</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> which produces the plot: </td> </tr> <tr> <td class="h" > <a name="2792">2792</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2793">2793</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2794">2794</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =for html </td> </tr> <tr> <td class="h" > <a name="2795">2795</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <p> </td> </tr> <tr> <td class="h" > <a name="2796">2796</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <img width="2678" height="849" alt="barplots" src="https://github.com/user-attachments/assets/6d87d13b-dabd-485d-92f7-1418f4acc65b" /> </td> </tr> <tr> <td class="h" > <a name="2797">2797</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <p> </td> </tr> <tr> <td class="h" > <a name="2798">2798</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2799">2799</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2800">2800</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =head3 colors for each hash key defined by hash </td> </tr> <tr> <td class="h" > <a name="2801">2801</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2802">2802</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> plt({ </td> </tr> <tr> <td class="h" > <a name="2803">2803</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> plots => [ </td> </tr> <tr> <td class="h" > <a name="2804">2804</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> { </td> </tr> <tr> <td class="h" > <a name="2805">2805</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> color => { </td> </tr> <tr> <td class="h" > <a name="2806">2806</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> A => 'red', B => 'green', C => 'blue' </td> </tr> <tr> <td class="h" > <a name="2807">2807</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="2808">2808</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> data => { </td> </tr> <tr> <td class="h" > <a name="2809">2809</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> A => 1, B => 2, C => 3 </td> </tr> <tr> <td class="h" > <a name="2810">2810</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="2811">2811</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'plot.type' => 'bar' </td> </tr> <tr> <td class="h" > <a name="2812">2812</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="2813">2813</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> { </td> </tr> <tr> <td class="h" > <a name="2814">2814</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> color => { </td> </tr> <tr> <td class="h" > <a name="2815">2815</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> A => 'red', B => 'green', C => 'blue' </td> </tr> <tr> <td class="h" > <a name="2816">2816</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="2817">2817</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> data => { </td> </tr> <tr> <td class="h" > <a name="2818">2818</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> A => 1, B => 2, C => 3 </td> </tr> <tr> <td class="h" > <a name="2819">2819</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="2820">2820</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'plot.type' => 'barh' </td> </tr> <tr> <td class="h" > <a name="2821">2821</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="2822">2822</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ], </td> </tr> <tr> <td class="h" > <a name="2823">2823</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ncols => 2, </td> </tr> <tr> <td class="h" > <a name="2824">2824</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'output.file' => '/tmp/key.colors.bar.svg', </td> </tr> <tr> <td class="h" > <a name="2825">2825</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }); </td> </tr> <tr> <td class="h" > <a name="2826">2826</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2827">2827</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> which produces the plot </td> </tr> <tr> <td class="h" > <a name="2828">2828</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2829">2829</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2830">2830</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =for html </td> </tr> <tr> <td class="h" > <a name="2831">2831</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <p> </td> </tr> <tr> <td class="h" > <a name="2832">2832</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <img width="651" height="491" alt="key colors bar" src="https://github.com/user-attachments/assets/0eab9c75-7e87-4297-b45d-86e5d7ffc550" /> </td> </tr> <tr> <td class="h" > <a name="2833">2833</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <p> </td> </tr> <tr> <td class="h" > <a name="2834">2834</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2835">2835</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2836">2836</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =head2 boxplot </td> </tr> <tr> <td class="h" > <a name="2837">2837</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2838">2838</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Plot a hash of arrays as a series of boxplots </td> </tr> <tr> <td class="h" > <a name="2839">2839</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2840">2840</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =head3 options </td> </tr> <tr> <td class="h" > <a name="2841">2841</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2842">2842</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =for html </td> </tr> <tr> <td class="h" > <a name="2843">2843</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <table> </td> </tr> <tr> <td class="h" > <a name="2844">2844</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <tbody> </td> </tr> <tr> <td class="h" > <a name="2845">2845</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <tr><td>Option</td><td>Description</td><td>Example</td></tr> </td> </tr> <tr> <td class="h" > <a name="2846">2846</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <tr><td>--------</td><td>-------</td><td>-------</td></tr> </td> </tr> <tr> <td class="h" > <a name="2847">2847</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <tr><td><code>color</code></td><td>a single color for all plots</td><td><code>color => 'pink'</code></td></tr> </td> </tr> <tr> <td class="h" > <a name="2848">2848</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <tr><td><code>colors</code></td><td>a hash, where each data point and color is a hash pair</td><td><code>colors => { A => 'orange', E => 'yellow', B => 'purple' },</code></td></tr> </td> </tr> <tr> <td class="h" > <a name="2849">2849</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <tr><td><code>key.order</code></td><td>order that the keys in the entry hash will be plotted</td><td><code>key.order = ['A', 'E', 'B']</code></td></tr> </td> </tr> <tr> <td class="h" > <a name="2850">2850</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <tr><td><code>orientation</code></td><td>orientation of the plot, by default <code>vertical</code></td><td><code>orientation = 'horizontal'</code></td></tr> </td> </tr> <tr> <td class="h" > <a name="2851">2851</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <tr><td><code>showcaps</code></td><td>Show the caps on the ends of whiskers; default <code>True</code></td><td><code>showcaps => 'False',</code></td></tr> </td> </tr> <tr> <td class="h" > <a name="2852">2852</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <tr><td><code>showfliers</code></td><td>Show the outliers beyond the caps; default <code>True</code></td><td><code>showfliers => 'False'</code></td></tr> </td> </tr> <tr> <td class="h" > <a name="2853">2853</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <tr><td><code>showmeans</code></td><td>show means; default = <code>True</code></td><td><code>showmeans => 'False'</code></td></tr> </td> </tr> <tr> <td class="h" > <a name="2854">2854</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <tr><td><code>whiskers</code></td><td>show whiskers, default = 1</td><td><code> whiskers => 0,</code></td></tr> </td> </tr> <tr> <td class="h" > <a name="2855">2855</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> </tbody> </td> </tr> <tr> <td class="h" > <a name="2856">2856</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> </table> </td> </tr> <tr> <td class="h" > <a name="2857">2857</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2858">2858</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =head3 single, simple plot </td> </tr> <tr> <td class="h" > <a name="2859">2859</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2860">2860</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> my $x = generate_normal_dist( 100, 15, 3 * 10 ); </td> </tr> <tr> <td class="h" > <a name="2861">2861</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> my $y = generate_normal_dist( 85, 15, 3 * 10 ); </td> </tr> <tr> <td class="h" > <a name="2862">2862</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> my $z = generate_normal_dist( 106, 15, 3 * 10 ); </td> </tr> <tr> <td class="h" > <a name="2863">2863</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2864">2864</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> single plots are simple </td> </tr> <tr> <td class="h" > <a name="2865">2865</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2866">2866</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> use Matplotlib::Simple 'barplot'; </td> </tr> <tr> <td class="h" > <a name="2867">2867</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> boxplot({ </td> </tr> <tr> <td class="h" > <a name="2868">2868</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'output.file' => 'output.images/single.boxplot.png', </td> </tr> <tr> <td class="h" > <a name="2869">2869</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> data => { # simple hash </td> </tr> <tr> <td class="h" > <a name="2870">2870</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> E => [ 55, @{$x}, 160 ], </td> </tr> <tr> <td class="h" > <a name="2871">2871</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> B => [ @{$y}, 140 ], </td> </tr> <tr> <td class="h" > <a name="2872">2872</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> </td> </tr> <tr> <td class="h" > <a name="2873">2873</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # A => @a </td> </tr> <tr> <td class="h" > <a name="2874">2874</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="2875">2875</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> title => 'Single Box Plot: Specified Colors', </td> </tr> <tr> <td class="h" > <a name="2876">2876</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> colors => { E => 'yellow', B => 'purple' }, </td> </tr> <tr> <td class="h" > <a name="2877">2877</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> fh => $fh, </td> </tr> <tr> <td class="h" > <a name="2878">2878</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> execute => 0, </td> </tr> <tr> <td class="h" > <a name="2879">2879</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }); </td> </tr> <tr> <td class="h" > <a name="2880">2880</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2881">2881</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> which makes the following image: </td> </tr> <tr> <td class="h" > <a name="2882">2882</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2883">2883</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2884">2884</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =for html </td> </tr> <tr> <td class="h" > <a name="2885">2885</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <p> </td> </tr> <tr> <td class="h" > <a name="2886">2886</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <img width="651" height="491" alt="single boxplot" src="https://github.com/user-attachments/assets/19870fa2-fe36-4513-8cbb-23da3a0cf686" /> </td> </tr> <tr> <td class="h" > <a name="2887">2887</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <p> </td> </tr> <tr> <td class="h" > <a name="2888">2888</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2889">2889</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2890">2890</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =head3 multiple plots </td> </tr> <tr> <td class="h" > <a name="2891">2891</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2892">2892</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> plt({ </td> </tr> <tr> <td class="h" > <a name="2893">2893</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'output.file' => 'output.images/boxplot.png', </td> </tr> <tr> <td class="h" > <a name="2894">2894</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> execute => 0, </td> </tr> <tr> <td class="h" > <a name="2895">2895</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> fh => $fh, </td> </tr> <tr> <td class="h" > <a name="2896">2896</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> plots => [ </td> </tr> <tr> <td class="h" > <a name="2897">2897</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> { </td> </tr> <tr> <td class="h" > <a name="2898">2898</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> data => { </td> </tr> <tr> <td class="h" > <a name="2899">2899</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> A => [ 55, @{$z} ], </td> </tr> <tr> <td class="h" > <a name="2900">2900</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> E => [ @{$y} ], </td> </tr> <tr> <td class="h" > <a name="2901">2901</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> B => [ 122, @{$z} ], </td> </tr> <tr> <td class="h" > <a name="2902">2902</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="2903">2903</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> title => 'Simple Boxplot', </td> </tr> <tr> <td class="h" > <a name="2904">2904</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ylabel => 'ylabel', </td> </tr> <tr> <td class="h" > <a name="2905">2905</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> xlabel => 'label', </td> </tr> <tr> <td class="h" > <a name="2906">2906</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'plot.type' => 'boxplot', </td> </tr> <tr> <td class="h" > <a name="2907">2907</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> suptitle => 'Boxplot examples' </td> </tr> <tr> <td class="h" > <a name="2908">2908</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="2909">2909</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> { </td> </tr> <tr> <td class="h" > <a name="2910">2910</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> color => 'pink', </td> </tr> <tr> <td class="h" > <a name="2911">2911</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> data => { </td> </tr> <tr> <td class="h" > <a name="2912">2912</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> A => [ 55, @{$z} ], </td> </tr> <tr> <td class="h" > <a name="2913">2913</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> E => [ @{$y} ], </td> </tr> <tr> <td class="h" > <a name="2914">2914</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> B => [ 122, @{$z} ], </td> </tr> <tr> <td class="h" > <a name="2915">2915</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="2916">2916</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> title => 'Specify single color', </td> </tr> <tr> <td class="h" > <a name="2917">2917</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ylabel => 'ylabel', </td> </tr> <tr> <td class="h" > <a name="2918">2918</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> xlabel => 'label', </td> </tr> <tr> <td class="h" > <a name="2919">2919</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'plot.type' => 'boxplot' </td> </tr> <tr> <td class="h" > <a name="2920">2920</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="2921">2921</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> { </td> </tr> <tr> <td class="h" > <a name="2922">2922</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> colors => { </td> </tr> <tr> <td class="h" > <a name="2923">2923</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> A => 'orange', </td> </tr> <tr> <td class="h" > <a name="2924">2924</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> E => 'yellow', </td> </tr> <tr> <td class="h" > <a name="2925">2925</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> B => 'purple' </td> </tr> <tr> <td class="h" > <a name="2926">2926</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="2927">2927</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> data => { </td> </tr> <tr> <td class="h" > <a name="2928">2928</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> A => [ 55, @{$z} ], </td> </tr> <tr> <td class="h" > <a name="2929">2929</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> E => [ @{$y} ], </td> </tr> <tr> <td class="h" > <a name="2930">2930</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> B => [ 122, @{$z} ], </td> </tr> <tr> <td class="h" > <a name="2931">2931</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="2932">2932</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> title => 'Specify set-specific color; showfliers = False', </td> </tr> <tr> <td class="h" > <a name="2933">2933</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ylabel => 'ylabel', </td> </tr> <tr> <td class="h" > <a name="2934">2934</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> xlabel => 'label', </td> </tr> <tr> <td class="h" > <a name="2935">2935</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'plot.type' => 'boxplot', </td> </tr> <tr> <td class="h" > <a name="2936">2936</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> showmeans => 'True', </td> </tr> <tr> <td class="h" > <a name="2937">2937</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> showfliers => 'False', </td> </tr> <tr> <td class="h" > <a name="2938">2938</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> set_figwidth => 12 </td> </tr> <tr> <td class="h" > <a name="2939">2939</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="2940">2940</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> { </td> </tr> <tr> <td class="h" > <a name="2941">2941</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> colors => { </td> </tr> <tr> <td class="h" > <a name="2942">2942</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> A => 'orange', </td> </tr> <tr> <td class="h" > <a name="2943">2943</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> E => 'yellow', </td> </tr> <tr> <td class="h" > <a name="2944">2944</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> B => 'purple' </td> </tr> <tr> <td class="h" > <a name="2945">2945</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="2946">2946</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> data => { </td> </tr> <tr> <td class="h" > <a name="2947">2947</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> A => [ 55, @{$z} ], </td> </tr> <tr> <td class="h" > <a name="2948">2948</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> E => [ @{$y} ], </td> </tr> <tr> <td class="h" > <a name="2949">2949</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> B => [ 122, @{$z} ], </td> </tr> <tr> <td class="h" > <a name="2950">2950</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="2951">2951</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> title => 'Specify set-specific color; showmeans = False', </td> </tr> <tr> <td class="h" > <a name="2952">2952</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ylabel => 'ylabel', </td> </tr> <tr> <td class="h" > <a name="2953">2953</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> xlabel => 'label', </td> </tr> <tr> <td class="h" > <a name="2954">2954</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'plot.type' => 'boxplot', </td> </tr> <tr> <td class="h" > <a name="2955">2955</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> showmeans => 'False', </td> </tr> <tr> <td class="h" > <a name="2956">2956</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="2957">2957</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> { </td> </tr> <tr> <td class="h" > <a name="2958">2958</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> colors => { </td> </tr> <tr> <td class="h" > <a name="2959">2959</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> A => 'orange', </td> </tr> <tr> <td class="h" > <a name="2960">2960</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> E => 'yellow', </td> </tr> <tr> <td class="h" > <a name="2961">2961</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> B => 'purple' </td> </tr> <tr> <td class="h" > <a name="2962">2962</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="2963">2963</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> data => { </td> </tr> <tr> <td class="h" > <a name="2964">2964</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> A => [ 55, @{$z} ], </td> </tr> <tr> <td class="h" > <a name="2965">2965</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> E => [ @{$y} ], </td> </tr> <tr> <td class="h" > <a name="2966">2966</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> B => [ 122, @{$z} ], </td> </tr> <tr> <td class="h" > <a name="2967">2967</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="2968">2968</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> title => 'Set-specific color; orientation = horizontal', </td> </tr> <tr> <td class="h" > <a name="2969">2969</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ylabel => 'ylabel', </td> </tr> <tr> <td class="h" > <a name="2970">2970</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> xlabel => 'label', </td> </tr> <tr> <td class="h" > <a name="2971">2971</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> orientation => 'horizontal', </td> </tr> <tr> <td class="h" > <a name="2972">2972</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'plot.type' => 'boxplot', </td> </tr> <tr> <td class="h" > <a name="2973">2973</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="2974">2974</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> { </td> </tr> <tr> <td class="h" > <a name="2975">2975</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> colors => { </td> </tr> <tr> <td class="h" > <a name="2976">2976</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> A => 'orange', </td> </tr> <tr> <td class="h" > <a name="2977">2977</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> E => 'yellow', </td> </tr> <tr> <td class="h" > <a name="2978">2978</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> B => 'purple' </td> </tr> <tr> <td class="h" > <a name="2979">2979</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="2980">2980</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> data => { </td> </tr> <tr> <td class="h" > <a name="2981">2981</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> A => [ 55, @{$z} ], </td> </tr> <tr> <td class="h" > <a name="2982">2982</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> E => [ @{$y} ], </td> </tr> <tr> <td class="h" > <a name="2983">2983</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> B => [ 122, @{$z} ], </td> </tr> <tr> <td class="h" > <a name="2984">2984</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="2985">2985</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> title => 'Notch = True', </td> </tr> <tr> <td class="h" > <a name="2986">2986</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ylabel => 'ylabel', </td> </tr> <tr> <td class="h" > <a name="2987">2987</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> xlabel => 'label', </td> </tr> <tr> <td class="h" > <a name="2988">2988</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> notch => 'True', </td> </tr> <tr> <td class="h" > <a name="2989">2989</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'plot.type' => 'boxplot', </td> </tr> <tr> <td class="h" > <a name="2990">2990</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="2991">2991</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> { </td> </tr> <tr> <td class="h" > <a name="2992">2992</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> colors => { </td> </tr> <tr> <td class="h" > <a name="2993">2993</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> A => 'orange', </td> </tr> <tr> <td class="h" > <a name="2994">2994</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> E => 'yellow', </td> </tr> <tr> <td class="h" > <a name="2995">2995</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> B => 'purple' </td> </tr> <tr> <td class="h" > <a name="2996">2996</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="2997">2997</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> data => { </td> </tr> <tr> <td class="h" > <a name="2998">2998</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> A => [ 55, @{$z} ], </td> </tr> <tr> <td class="h" > <a name="2999">2999</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> E => [ @{$y} ], </td> </tr> <tr> <td class="h" > <a name="3000">3000</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> B => [ 122, @{$z} ], </td> </tr> <tr> <td class="h" > <a name="3001">3001</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="3002">3002</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> title => 'showcaps = False', </td> </tr> <tr> <td class="h" > <a name="3003">3003</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ylabel => 'ylabel', </td> </tr> <tr> <td class="h" > <a name="3004">3004</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> xlabel => 'label', </td> </tr> <tr> <td class="h" > <a name="3005">3005</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> showcaps => 'False', </td> </tr> <tr> <td class="h" > <a name="3006">3006</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'plot.type' => 'boxplot', </td> </tr> <tr> <td class="h" > <a name="3007">3007</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> set_figheight => 12, </td> </tr> <tr> <td class="h" > <a name="3008">3008</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="3009">3009</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ], </td> </tr> <tr> <td class="h" > <a name="3010">3010</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ncols => 3, </td> </tr> <tr> <td class="h" > <a name="3011">3011</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> nrows => 3, </td> </tr> <tr> <td class="h" > <a name="3012">3012</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }); </td> </tr> <tr> <td class="h" > <a name="3013">3013</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3014">3014</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> which makes the following plot: </td> </tr> <tr> <td class="h" > <a name="3015">3015</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3016">3016</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3017">3017</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =for html </td> </tr> <tr> <td class="h" > <a name="3018">3018</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <p> </td> </tr> <tr> <td class="h" > <a name="3019">3019</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <img width="1230" height="1211" alt="boxplot" src="https://github.com/user-attachments/assets/7e32e394-86fc-49e7-ad97-f48fd82fc8b0" /> </td> </tr> <tr> <td class="h" > <a name="3020">3020</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <p> </td> </tr> <tr> <td class="h" > <a name="3021">3021</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3022">3022</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3023">3023</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =head2 Colored Table </td> </tr> <tr> <td class="h" > <a name="3024">3024</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3025">3025</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =head3 options </td> </tr> <tr> <td class="h" > <a name="3026">3026</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3027">3027</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =head3 Single, simple plot </td> </tr> <tr> <td class="h" > <a name="3028">3028</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3029">3029</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> the bond dissociation energy table can be plotted: </td> </tr> <tr> <td class="h" > <a name="3030">3030</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3031">3031</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # https://labs.chem.ucsb.edu/zakarian/armen/11---bonddissociationenergy.pdf and https://chem.libretexts.org/Bookshelves/Physical_and_Theoretical_Chemistry_Textbook_Maps/Supplemental_Modules_(Physical_and_Theoretical_Chemistry)/Chemical_Bonding/Fundamentals_of_Chemical_Bonding/Bond_Energies </td> </tr> <tr> <td class="h" > <a name="3032">3032</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> my %bond_dissociation = ( </td> </tr> <tr> <td class="h" > <a name="3033">3033</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Br => { </td> </tr> <tr> <td class="h" > <a name="3034">3034</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Br => 193 </td> </tr> <tr> <td class="h" > <a name="3035">3035</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="3036">3036</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> C => { </td> </tr> <tr> <td class="h" > <a name="3037">3037</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Br => 276, C => 347, Cl => 339, F => 485, H => 413, I => 240, </td> </tr> <tr> <td class="h" > <a name="3038">3038</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> N => 305, O => 358, S => 259 </td> </tr> <tr> <td class="h" > <a name="3039">3039</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="3040">3040</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Cl => { </td> </tr> <tr> <td class="h" > <a name="3041">3041</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Br => 218, Cl => 239 </td> </tr> <tr> <td class="h" > <a name="3042">3042</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="3043">3043</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> F => { </td> </tr> <tr> <td class="h" > <a name="3044">3044</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> I => 280, Br => 237, Cl => 253, F => 154 </td> </tr> <tr> <td class="h" > <a name="3045">3045</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="3046">3046</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> H => { </td> </tr> <tr> <td class="h" > <a name="3047">3047</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Br => 363, Cl => 427, F => 565, H => 432, I => 295 </td> </tr> <tr> <td class="h" > <a name="3048">3048</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="3049">3049</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> I => { </td> </tr> <tr> <td class="h" > <a name="3050">3050</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Br => 175, Cl => 208, I => 149 </td> </tr> <tr> <td class="h" > <a name="3051">3051</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="3052">3052</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> N => { </td> </tr> <tr> <td class="h" > <a name="3053">3053</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Br => 243, Cl => 200, F => 272, H => 391, N => 160, O => 201 </td> </tr> <tr> <td class="h" > <a name="3054">3054</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="3055">3055</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> O => { </td> </tr> <tr> <td class="h" > <a name="3056">3056</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Cl => 203, F => 190, H => 467, I => 234, O => 146 </td> </tr> <tr> <td class="h" > <a name="3057">3057</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="3058">3058</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> S => { </td> </tr> <tr> <td class="h" > <a name="3059">3059</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Br => 218, Cl => 253, F => 327, H => 347, S => 266 </td> </tr> <tr> <td class="h" > <a name="3060">3060</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="3061">3061</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Si => { </td> </tr> <tr> <td class="h" > <a name="3062">3062</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> C => 360, H => 393, O => 452, Si => 340 </td> </tr> <tr> <td class="h" > <a name="3063">3063</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="3064">3064</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ); </td> </tr> <tr> <td class="h" > <a name="3065">3065</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3066">3066</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> and the plot itself: </td> </tr> <tr> <td class="h" > <a name="3067">3067</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3068">3068</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> colored_table({ </td> </tr> <tr> <td class="h" > <a name="3069">3069</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'cblabel' => 'kJ/mol', </td> </tr> <tr> <td class="h" > <a name="3070">3070</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'col.labels' => ['H', 'F', 'Cl', 'Br', 'I'], </td> </tr> <tr> <td class="h" > <a name="3071">3071</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> data => \%bond_dissociation, </td> </tr> <tr> <td class="h" > <a name="3072">3072</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> execute => 0, </td> </tr> <tr> <td class="h" > <a name="3073">3073</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> fh => $fh, </td> </tr> <tr> <td class="h" > <a name="3074">3074</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> mirror => 1, </td> </tr> <tr> <td class="h" > <a name="3075">3075</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'output.file' => 'output.images/single.tab.png', </td> </tr> <tr> <td class="h" > <a name="3076">3076</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'row.labels' => ['H', 'F', 'Cl', 'Br', 'I'], </td> </tr> <tr> <td class="h" > <a name="3077">3077</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'show.numbers'=> 1, </td> </tr> <tr> <td class="h" > <a name="3078">3078</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> set_title => 'Bond Dissociation Energy' </td> </tr> <tr> <td class="h" > <a name="3079">3079</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }); </td> </tr> <tr> <td class="h" > <a name="3080">3080</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3081">3081</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> which makes the following image: </td> </tr> <tr> <td class="h" > <a name="3082">3082</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3083">3083</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3084">3084</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =for html </td> </tr> <tr> <td class="h" > <a name="3085">3085</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <p> </td> </tr> <tr> <td class="h" > <a name="3086">3086</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <img width="584" height="491" alt="single tab" src="https://github.com/user-attachments/assets/d890830b-a502-4d51-b118-20aeae0473e8" /> </td> </tr> <tr> <td class="h" > <a name="3087">3087</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <p> </td> </tr> <tr> <td class="h" > <a name="3088">3088</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3089">3089</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3090">3090</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =head3 Multiple Plots </td> </tr> <tr> <td class="h" > <a name="3091">3091</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3092">3092</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> plt({ </td> </tr> <tr> <td class="h" > <a name="3093">3093</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'output.file' => 'output.images/tab.multiple.png', </td> </tr> <tr> <td class="h" > <a name="3094">3094</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> execute => 0, </td> </tr> <tr> <td class="h" > <a name="3095">3095</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> fh => $fh, </td> </tr> <tr> <td class="h" > <a name="3096">3096</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> plots => [ </td> </tr> <tr> <td class="h" > <a name="3097">3097</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> { </td> </tr> <tr> <td class="h" > <a name="3098">3098</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> data => \%bond_dissociation, </td> </tr> <tr> <td class="h" > <a name="3099">3099</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'output.file' => '/tmp/single.bonds.svg', </td> </tr> <tr> <td class="h" > <a name="3100">3100</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'plot.type' => 'colored_table', </td> </tr> <tr> <td class="h" > <a name="3101">3101</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> set_title => 'No other options' </td> </tr> <tr> <td class="h" > <a name="3102">3102</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="3103">3103</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> { </td> </tr> <tr> <td class="h" > <a name="3104">3104</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> data => \%bond_dissociation, </td> </tr> <tr> <td class="h" > <a name="3105">3105</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> cblabel => 'Average Dissociation Energy (kJ/mol)', </td> </tr> <tr> <td class="h" > <a name="3106">3106</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'col.labels' => ['H', 'C', 'N', 'O', 'F', 'Si', 'S', 'Cl', 'Br', 'I'], </td> </tr> <tr> <td class="h" > <a name="3107">3107</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> mirror => 1, </td> </tr> <tr> <td class="h" > <a name="3108">3108</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'output.file' => '/tmp/single.bonds.svg', </td> </tr> <tr> <td class="h" > <a name="3109">3109</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'plot.type' => 'colored_table', </td> </tr> <tr> <td class="h" > <a name="3110">3110</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'row.labels' => ['H', 'C', 'N', 'O', 'F', 'Si', 'S', 'Cl', 'Br', 'I'], </td> </tr> <tr> <td class="h" > <a name="3111">3111</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'show.numbers'=> 1, </td> </tr> <tr> <td class="h" > <a name="3112">3112</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> set_title => 'Showing numbers and mirror with defined order' </td> </tr> <tr> <td class="h" > <a name="3113">3113</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="3114">3114</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> { </td> </tr> <tr> <td class="h" > <a name="3115">3115</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> data => \%bond_dissociation, </td> </tr> <tr> <td class="h" > <a name="3116">3116</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> cblabel => 'Average Dissociation Energy (kJ/mol)', </td> </tr> <tr> <td class="h" > <a name="3117">3117</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'col.labels' => ['H', 'C', 'N', 'O', 'F', 'Si', 'S', 'Cl', 'Br', 'I'], </td> </tr> <tr> <td class="h" > <a name="3118">3118</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> mirror => 1, </td> </tr> <tr> <td class="h" > <a name="3119">3119</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'output.file' => '/tmp/single.bonds.svg', </td> </tr> <tr> <td class="h" > <a name="3120">3120</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'plot.type' => 'colored_table', </td> </tr> <tr> <td class="h" > <a name="3121">3121</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'row.labels' => ['H', 'C', 'N', 'O', 'F', 'Si', 'S', 'Cl', 'Br', 'I'], </td> </tr> <tr> <td class="h" > <a name="3122">3122</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'show.numbers'=> 1, </td> </tr> <tr> <td class="h" > <a name="3123">3123</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> set_title => 'Set undefined color to white', </td> </tr> <tr> <td class="h" > <a name="3124">3124</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'undef.color' => 'white' </td> </tr> <tr> <td class="h" > <a name="3125">3125</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="3126">3126</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ], </td> </tr> <tr> <td class="h" > <a name="3127">3127</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ncols => 3, </td> </tr> <tr> <td class="h" > <a name="3128">3128</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> set_figwidth => 14, </td> </tr> <tr> <td class="h" > <a name="3129">3129</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> suptitle => 'Colored Table options' </td> </tr> <tr> <td class="h" > <a name="3130">3130</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }); </td> </tr> <tr> <td class="h" > <a name="3131">3131</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3132">3132</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> which makes the following plot: </td> </tr> <tr> <td class="h" > <a name="3133">3133</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3134">3134</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3135">3135</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =for html </td> </tr> <tr> <td class="h" > <a name="3136">3136</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <p> </td> </tr> <tr> <td class="h" > <a name="3137">3137</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <img width="1410" height="491" alt="tab multiple" src="https://github.com/user-attachments/assets/be836742-cc5b-4618-a0c8-a0ee57856eb1" /> </td> </tr> <tr> <td class="h" > <a name="3138">3138</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <p> </td> </tr> <tr> <td class="h" > <a name="3139">3139</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3140">3140</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3141">3141</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =head2 hexbin </td> </tr> <tr> <td class="h" > <a name="3142">3142</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3143">3143</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Plot a hash of arrays as a hexbin </td> </tr> <tr> <td class="h" > <a name="3144">3144</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> see https://matplotlib.org/stable/api/I<as>gen/matplotlib.pyplot.hexbin.html </td> </tr> <tr> <td class="h" > <a name="3145">3145</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3146">3146</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =head3 options </td> </tr> <tr> <td class="h" > <a name="3147">3147</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3148">3148</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =for html </td> </tr> <tr> <td class="h" > <a name="3149">3149</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <table> </td> </tr> <tr> <td class="h" > <a name="3150">3150</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <tbody> </td> </tr> <tr> <td class="h" > <a name="3151">3151</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <tr><td>Option</td><td>Description</td><td>Example</td></tr> </td> </tr> <tr> <td class="h" > <a name="3152">3152</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <tr><td>--------</td><td>-------</td><td>------- </td></tr> </td> </tr> <tr> <td class="h" > <a name="3153">3153</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <tr><td>cb_logscale</td><td>colorbar log scale <code>from matplotlib.colors import LogNorm</code></td><td>default 0, any value > 0 enables</td></tr> </td> </tr> <tr> <td class="h" > <a name="3154">3154</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <tr><td>cmap</td><td>The Colormap instance or registered colormap name used to map scalar data to colors</td><td>default <code>gist_rainbow</code></td></tr> </td> </tr> <tr> <td class="h" > <a name="3155">3155</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <tr><td>key.order</td><td>define the keys in an order (an array reference)</td><td><code>'key.order' => ['X-rays', 'Yak Butter'],</code></td></tr> </td> </tr> <tr> <td class="h" > <a name="3156">3156</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <tr><td>marginals</td><td>integer, by default off = 0</td><td><code>marginals => 1</code></td></tr> </td> </tr> <tr> <td class="h" > <a name="3157">3157</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <tr><td>mincnt</td><td>int >= 0, default: None; If not None, only display cells with at least mincnt number of points in the cell.</td><td><code>mincnt => 2</code></td></tr> </td> </tr> <tr> <td class="h" > <a name="3158">3158</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <tr><td>vmax</td><td>The normalization method used to scale scalar data to the [0, 1] range before mapping to colors using cmap</td><td><code>'asinh', 'function', 'functionlog', 'linear', 'log', 'logit', 'symlog'</code> default <code>linear</code></td></tr> </td> </tr> <tr> <td class="h" > <a name="3159">3159</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <tr><td>vmin</td><td>The normalization method used to scale scalar data to the [0, 1] range before mapping to colors using cmap</td><td><code>'asinh', 'function', 'functionlog', 'linear', 'log', 'logit', 'symlog'</code> default <code>linear</code></td></tr> </td> </tr> <tr> <td class="h" > <a name="3160">3160</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <tr><td>xbins</td><td>integer that accesses horizontal gridsize</td><td>default is 15</td></tr> </td> </tr> <tr> <td class="h" > <a name="3161">3161</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <tr><td>xscale.hexbin</td><td>'linear', 'log'}, default: 'linear': Use a linear or log10 scale on the horizontal axis</td><td><code>'xscale.hexbin' => 'log'</code></td></tr> </td> </tr> <tr> <td class="h" > <a name="3162">3162</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <tr><td>ybins</td><td>integer that accesses vertical gridsize</td><td>default is 15</td></tr> </td> </tr> <tr> <td class="h" > <a name="3163">3163</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <tr><td>yscale.hexbin</td><td>'linear', 'log'}, default: 'linear': Use a linear or log10 scale on the vertical axis</td><td><code>'yscale.hexbin' => 'log'</code></td></tr> </td> </tr> <tr> <td class="h" > <a name="3164">3164</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> </tbody> </td> </tr> <tr> <td class="h" > <a name="3165">3165</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> </table> </td> </tr> <tr> <td class="h" > <a name="3166">3166</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3167">3167</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =head3 single, simple plot </td> </tr> <tr> <td class="h" > <a name="3168">3168</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3169">3169</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> plt({ </td> </tr> <tr> <td class="h" > <a name="3170">3170</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> data => { </td> </tr> <tr> <td class="h" > <a name="3171">3171</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> E => generate_normal_dist(100, 15, 3*210), </td> </tr> <tr> <td class="h" > <a name="3172">3172</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> B => generate_normal_dist(85, 15, 3*210) </td> </tr> <tr> <td class="h" > <a name="3173">3173</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="3174">3174</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'output.file' => 'output.images/single.hexbin.png', </td> </tr> <tr> <td class="h" > <a name="3175">3175</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'plot.type' => 'hexbin', </td> </tr> <tr> <td class="h" > <a name="3176">3176</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> set_figwidth => 12, </td> </tr> <tr> <td class="h" > <a name="3177">3177</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> title => 'Simple Hexbin', </td> </tr> <tr> <td class="h" > <a name="3178">3178</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }); </td> </tr> <tr> <td class="h" > <a name="3179">3179</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3180">3180</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> which makes the following plot: </td> </tr> <tr> <td class="h" > <a name="3181">3181</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3182">3182</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =for html </td> </tr> <tr> <td class="h" > <a name="3183">3183</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <p> </td> </tr> <tr> <td class="h" > <a name="3184">3184</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <img width="1208" height="491" alt="single hexbin" src="https://github.com/user-attachments/assets/129c41cd-2d7d-43de-978a-2b9c441b8939" /> </td> </tr> <tr> <td class="h" > <a name="3185">3185</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <p> </td> </tr> <tr> <td class="h" > <a name="3186">3186</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3187">3187</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =head3 multiple plots </td> </tr> <tr> <td class="h" > <a name="3188">3188</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3189">3189</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> plt({ </td> </tr> <tr> <td class="h" > <a name="3190">3190</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> fh => $fh, </td> </tr> <tr> <td class="h" > <a name="3191">3191</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> execute => 0, </td> </tr> <tr> <td class="h" > <a name="3192">3192</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'output.file' => 'output.images/hexbin.png', </td> </tr> <tr> <td class="h" > <a name="3193">3193</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> plots => [ </td> </tr> <tr> <td class="h" > <a name="3194">3194</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> { </td> </tr> <tr> <td class="h" > <a name="3195">3195</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> data => { </td> </tr> <tr> <td class="h" > <a name="3196">3196</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> E => @e, </td> </tr> <tr> <td class="h" > <a name="3197">3197</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> B => @b </td> </tr> <tr> <td class="h" > <a name="3198">3198</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="3199">3199</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'plot.type' => 'hexbin', </td> </tr> <tr> <td class="h" > <a name="3200">3200</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> title => 'Simple Hexbin', </td> </tr> <tr> <td class="h" > <a name="3201">3201</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="3202">3202</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> { </td> </tr> <tr> <td class="h" > <a name="3203">3203</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> data => { </td> </tr> <tr> <td class="h" > <a name="3204">3204</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> E => @e, </td> </tr> <tr> <td class="h" > <a name="3205">3205</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> B => @b </td> </tr> <tr> <td class="h" > <a name="3206">3206</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="3207">3207</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'plot.type' => 'hexbin', </td> </tr> <tr> <td class="h" > <a name="3208">3208</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> title => 'colorbar logscale', </td> </tr> <tr> <td class="h" > <a name="3209">3209</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> cb_logscale => 1 </td> </tr> <tr> <td class="h" > <a name="3210">3210</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="3211">3211</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> { </td> </tr> <tr> <td class="h" > <a name="3212">3212</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> cmap => 'jet', </td> </tr> <tr> <td class="h" > <a name="3213">3213</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> data => { </td> </tr> <tr> <td class="h" > <a name="3214">3214</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> E => @e, </td> </tr> <tr> <td class="h" > <a name="3215">3215</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> B => @b </td> </tr> <tr> <td class="h" > <a name="3216">3216</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="3217">3217</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'plot.type' => 'hexbin', </td> </tr> <tr> <td class="h" > <a name="3218">3218</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> title => 'cmap is jet', </td> </tr> <tr> <td class="h" > <a name="3219">3219</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> xlabel => 'xlabel', </td> </tr> <tr> <td class="h" > <a name="3220">3220</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="3221">3221</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> { </td> </tr> <tr> <td class="h" > <a name="3222">3222</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> data => { </td> </tr> <tr> <td class="h" > <a name="3223">3223</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> E => @e, </td> </tr> <tr> <td class="h" > <a name="3224">3224</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> B => @b </td> </tr> <tr> <td class="h" > <a name="3225">3225</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="3226">3226</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'key.order' => ['E', 'B'], </td> </tr> <tr> <td class="h" > <a name="3227">3227</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'plot.type' => 'hexbin', </td> </tr> <tr> <td class="h" > <a name="3228">3228</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> title => 'Switch axes with key.order', </td> </tr> <tr> <td class="h" > <a name="3229">3229</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="3230">3230</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> { </td> </tr> <tr> <td class="h" > <a name="3231">3231</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> data => { </td> </tr> <tr> <td class="h" > <a name="3232">3232</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> E => @e, </td> </tr> <tr> <td class="h" > <a name="3233">3233</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> B => @b </td> </tr> <tr> <td class="h" > <a name="3234">3234</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="3235">3235</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'plot.type' => 'hexbin', </td> </tr> <tr> <td class="h" > <a name="3236">3236</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> title => 'vmax set to 25', </td> </tr> <tr> <td class="h" > <a name="3237">3237</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> vmax => 25 </td> </tr> <tr> <td class="h" > <a name="3238">3238</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="3239">3239</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> { </td> </tr> <tr> <td class="h" > <a name="3240">3240</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> data => { </td> </tr> <tr> <td class="h" > <a name="3241">3241</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> E => @e, </td> </tr> <tr> <td class="h" > <a name="3242">3242</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> B => @b </td> </tr> <tr> <td class="h" > <a name="3243">3243</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="3244">3244</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'plot.type' => 'hexbin', </td> </tr> <tr> <td class="h" > <a name="3245">3245</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> title => 'vmin set to -4', </td> </tr> <tr> <td class="h" > <a name="3246">3246</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> vmin => -4 </td> </tr> <tr> <td class="h" > <a name="3247">3247</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="3248">3248</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> { </td> </tr> <tr> <td class="h" > <a name="3249">3249</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> data => { </td> </tr> <tr> <td class="h" > <a name="3250">3250</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> E => @e, </td> </tr> <tr> <td class="h" > <a name="3251">3251</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> B => @b </td> </tr> <tr> <td class="h" > <a name="3252">3252</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="3253">3253</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'plot.type' => 'hexbin', </td> </tr> <tr> <td class="h" > <a name="3254">3254</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> title => 'mincnt set to 7', </td> </tr> <tr> <td class="h" > <a name="3255">3255</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> mincnt => 7 </td> </tr> <tr> <td class="h" > <a name="3256">3256</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="3257">3257</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> { </td> </tr> <tr> <td class="h" > <a name="3258">3258</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> data => { </td> </tr> <tr> <td class="h" > <a name="3259">3259</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> E => @e, </td> </tr> <tr> <td class="h" > <a name="3260">3260</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> B => @b </td> </tr> <tr> <td class="h" > <a name="3261">3261</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="3262">3262</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'plot.type' => 'hexbin', </td> </tr> <tr> <td class="h" > <a name="3263">3263</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> title => 'xbins set to 9', </td> </tr> <tr> <td class="h" > <a name="3264">3264</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> xbins => 9 </td> </tr> <tr> <td class="h" > <a name="3265">3265</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="3266">3266</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> { </td> </tr> <tr> <td class="h" > <a name="3267">3267</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> data => { </td> </tr> <tr> <td class="h" > <a name="3268">3268</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> E => @e, </td> </tr> <tr> <td class="h" > <a name="3269">3269</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> B => @b </td> </tr> <tr> <td class="h" > <a name="3270">3270</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="3271">3271</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'plot.type' => 'hexbin', </td> </tr> <tr> <td class="h" > <a name="3272">3272</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> title => 'ybins set to 9', </td> </tr> <tr> <td class="h" > <a name="3273">3273</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ybins => 9 </td> </tr> <tr> <td class="h" > <a name="3274">3274</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="3275">3275</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> { </td> </tr> <tr> <td class="h" > <a name="3276">3276</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> data => { </td> </tr> <tr> <td class="h" > <a name="3277">3277</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> E => @e, </td> </tr> <tr> <td class="h" > <a name="3278">3278</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> B => @b </td> </tr> <tr> <td class="h" > <a name="3279">3279</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="3280">3280</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'plot.type' => 'hexbin', </td> </tr> <tr> <td class="h" > <a name="3281">3281</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> title => 'marginals = 1', </td> </tr> <tr> <td class="h" > <a name="3282">3282</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> marginals => 1 </td> </tr> <tr> <td class="h" > <a name="3283">3283</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="3284">3284</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> { </td> </tr> <tr> <td class="h" > <a name="3285">3285</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> data => { </td> </tr> <tr> <td class="h" > <a name="3286">3286</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> E => @e, </td> </tr> <tr> <td class="h" > <a name="3287">3287</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> B => @b </td> </tr> <tr> <td class="h" > <a name="3288">3288</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="3289">3289</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'plot.type' => 'hexbin', </td> </tr> <tr> <td class="h" > <a name="3290">3290</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> title => 'xscale.hexbin = 1', </td> </tr> <tr> <td class="h" > <a name="3291">3291</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'xscale.hexbin' => 'log' </td> </tr> <tr> <td class="h" > <a name="3292">3292</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="3293">3293</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> { </td> </tr> <tr> <td class="h" > <a name="3294">3294</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> data => { </td> </tr> <tr> <td class="h" > <a name="3295">3295</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> E => @e, </td> </tr> <tr> <td class="h" > <a name="3296">3296</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> B => @b </td> </tr> <tr> <td class="h" > <a name="3297">3297</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="3298">3298</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'plot.type' => 'hexbin', </td> </tr> <tr> <td class="h" > <a name="3299">3299</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> title => 'yscale.hexbin = 1', </td> </tr> <tr> <td class="h" > <a name="3300">3300</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'yscale.hexbin' => 'log' </td> </tr> <tr> <td class="h" > <a name="3301">3301</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="3302">3302</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ], </td> </tr> <tr> <td class="h" > <a name="3303">3303</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ncols => 4, </td> </tr> <tr> <td class="h" > <a name="3304">3304</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> nrows => 3, </td> </tr> <tr> <td class="h" > <a name="3305">3305</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> scale => 5, </td> </tr> <tr> <td class="h" > <a name="3306">3306</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> suptitle => 'Various Changes to Standard Hexbin: All data is the same' </td> </tr> <tr> <td class="h" > <a name="3307">3307</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }); </td> </tr> <tr> <td class="h" > <a name="3308">3308</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3309">3309</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> which produces the following image: </td> </tr> <tr> <td class="h" > <a name="3310">3310</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3311">3311</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =for html </td> </tr> <tr> <td class="h" > <a name="3312">3312</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <p> </td> </tr> <tr> <td class="h" > <a name="3313">3313</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <img width="2409" height="3211" alt="hexbin" src="https://github.com/user-attachments/assets/0b23a0cb-8f9a-43fb-8da1-0debee13d540" /> </td> </tr> <tr> <td class="h" > <a name="3314">3314</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <p> </td> </tr> <tr> <td class="h" > <a name="3315">3315</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3316">3316</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3317">3317</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =head2 hist </td> </tr> <tr> <td class="h" > <a name="3318">3318</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3319">3319</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Plot a hash of arrays as a series of histograms </td> </tr> <tr> <td class="h" > <a name="3320">3320</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3321">3321</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =head3 options </td> </tr> <tr> <td class="h" > <a name="3322">3322</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3323">3323</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =for html </td> </tr> <tr> <td class="h" > <a name="3324">3324</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <table> </td> </tr> <tr> <td class="h" > <a name="3325">3325</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <tbody> </td> </tr> <tr> <td class="h" > <a name="3326">3326</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <tr><td>Option</td><td>Description</td><td>Example</td></tr> </td> </tr> <tr> <td class="h" > <a name="3327">3327</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <tr><td>--------</td><td>-------</td><td>-------</td></tr> </td> </tr> <tr> <td class="h" > <a name="3328">3328</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <tr><td><code>alpha</code></td><td>default 0.5; same for all sets</td><td></td></tr> </td> </tr> <tr> <td class="h" > <a name="3329">3329</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <tr><td><code>bins</code></td><td># nt or sequence or str, default: :rc:<code>hist.bins</code>If *bins* is an integer, it defines the number of equal-width bins in the range. If *bins* is a sequence, it defines the bin edges, including the left edge of the first bin and the right edge of the last bin; in this case, bins may be unequally spaced. All but the last (righthand-most) bin is half-open</td><td></td></tr> </td> </tr> <tr> <td class="h" > <a name="3330">3330</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <tr><td><code>color</code></td><td>a hash, where keys are the keys in data, and values are colors</td><td><code>X => 'blue'</code></td></tr> </td> </tr> <tr> <td class="h" > <a name="3331">3331</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <tr><td><code>log</code></td><td>if set to > 1, the y-axis will be logarithmic</td><td></td></tr> </td> </tr> <tr> <td class="h" > <a name="3332">3332</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <tr><td><code>orientation</code></td><td>{'vertical', 'horizontal'}, default: 'vertical'</td><td></td></tr> </td> </tr> <tr> <td class="h" > <a name="3333">3333</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> </tbody> </td> </tr> <tr> <td class="h" > <a name="3334">3334</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> </table> </td> </tr> <tr> <td class="h" > <a name="3335">3335</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3336">3336</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =head3 single, simple plot </td> </tr> <tr> <td class="h" > <a name="3337">3337</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3338">3338</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> use Matplotlib::Simple 'hist'; </td> </tr> <tr> <td class="h" > <a name="3339">3339</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> </td> </tr> <tr> <td class="h" > <a name="3340">3340</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> my @e = generate_normal_dist( 100, 15, 3 * 200 ); </td> </tr> <tr> <td class="h" > <a name="3341">3341</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> my @b = generate_normal_dist( 85, 15, 3 * 200 ); </td> </tr> <tr> <td class="h" > <a name="3342">3342</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> my @a = generate_normal_dist( 105, 15, 3 * 200 ); </td> </tr> <tr> <td class="h" > <a name="3343">3343</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> </td> </tr> <tr> <td class="h" > <a name="3344">3344</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> hist({ </td> </tr> <tr> <td class="h" > <a name="3345">3345</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> fh => $fh, </td> </tr> <tr> <td class="h" > <a name="3346">3346</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> execute => 0, </td> </tr> <tr> <td class="h" > <a name="3347">3347</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'output.file' => 'output.images/single.hist.png', </td> </tr> <tr> <td class="h" > <a name="3348">3348</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> data => { </td> </tr> <tr> <td class="h" > <a name="3349">3349</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> E => @e, </td> </tr> <tr> <td class="h" > <a name="3350">3350</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> B => @b, </td> </tr> <tr> <td class="h" > <a name="3351">3351</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> A => @a, </td> </tr> <tr> <td class="h" > <a name="3352">3352</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="3353">3353</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }); </td> </tr> <tr> <td class="h" > <a name="3354">3354</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3355">3355</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> which makes the following simple plot: </td> </tr> <tr> <td class="h" > <a name="3356">3356</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3357">3357</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3358">3358</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =for html </td> </tr> <tr> <td class="h" > <a name="3359">3359</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <p> </td> </tr> <tr> <td class="h" > <a name="3360">3360</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <img width="651" height="491" alt="single hist" src="https://github.com/user-attachments/assets/fafcf787-6c4f-4998-88c4-77a15d878fa6" /> </td> </tr> <tr> <td class="h" > <a name="3361">3361</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <p> </td> </tr> <tr> <td class="h" > <a name="3362">3362</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3363">3363</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3364">3364</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =head3 multiple plots </td> </tr> <tr> <td class="h" > <a name="3365">3365</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3366">3366</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> plt({ </td> </tr> <tr> <td class="h" > <a name="3367">3367</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> fh => $fh, </td> </tr> <tr> <td class="h" > <a name="3368">3368</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> execute => 0, </td> </tr> <tr> <td class="h" > <a name="3369">3369</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'output.file' => 'output.images/histogram.png', </td> </tr> <tr> <td class="h" > <a name="3370">3370</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> set_figwidth => 15, </td> </tr> <tr> <td class="h" > <a name="3371">3371</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> suptitle => 'hist Examples', </td> </tr> <tr> <td class="h" > <a name="3372">3372</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> plots => [ </td> </tr> <tr> <td class="h" > <a name="3373">3373</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> { # 1st subplot </td> </tr> <tr> <td class="h" > <a name="3374">3374</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> data => { </td> </tr> <tr> <td class="h" > <a name="3375">3375</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> E => @e, </td> </tr> <tr> <td class="h" > <a name="3376">3376</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> B => @b, </td> </tr> <tr> <td class="h" > <a name="3377">3377</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> A => @a, </td> </tr> <tr> <td class="h" > <a name="3378">3378</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="3379">3379</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'plot.type' => 'hist', </td> </tr> <tr> <td class="h" > <a name="3380">3380</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> alpha => 0.25, </td> </tr> <tr> <td class="h" > <a name="3381">3381</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> bins => 50, </td> </tr> <tr> <td class="h" > <a name="3382">3382</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> title => 'alpha = 0.25', </td> </tr> <tr> <td class="h" > <a name="3383">3383</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> color => { </td> </tr> <tr> <td class="h" > <a name="3384">3384</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> B => 'Black', </td> </tr> <tr> <td class="h" > <a name="3385">3385</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> E => 'Orange', </td> </tr> <tr> <td class="h" > <a name="3386">3386</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> A => 'Yellow', </td> </tr> <tr> <td class="h" > <a name="3387">3387</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="3388">3388</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> scatter => '[' </td> </tr> <tr> <td class="h" > <a name="3389">3389</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> . join( ',', 22 .. 44 ) . '],[' # x coords </td> </tr> <tr> <td class="h" > <a name="3390">3390</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> . join( ',', 22 .. 44 ) # y coords </td> </tr> <tr> <td class="h" > <a name="3391">3391</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> . '], label = "scatter"', </td> </tr> <tr> <td class="h" > <a name="3392">3392</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> xlabel => 'Value', </td> </tr> <tr> <td class="h" > <a name="3393">3393</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ylabel => 'Frequency', </td> </tr> <tr> <td class="h" > <a name="3394">3394</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="3395">3395</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> { # 2nd subplot </td> </tr> <tr> <td class="h" > <a name="3396">3396</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> data => { </td> </tr> <tr> <td class="h" > <a name="3397">3397</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> E => @e, </td> </tr> <tr> <td class="h" > <a name="3398">3398</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> B => @b, </td> </tr> <tr> <td class="h" > <a name="3399">3399</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> A => @a, </td> </tr> <tr> <td class="h" > <a name="3400">3400</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="3401">3401</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'plot.type' => 'hist', </td> </tr> <tr> <td class="h" > <a name="3402">3402</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> alpha => 0.75, </td> </tr> <tr> <td class="h" > <a name="3403">3403</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> bins => 50, </td> </tr> <tr> <td class="h" > <a name="3404">3404</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> title => 'alpha = 0.75', </td> </tr> <tr> <td class="h" > <a name="3405">3405</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> color => { </td> </tr> <tr> <td class="h" > <a name="3406">3406</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> B => 'Black', </td> </tr> <tr> <td class="h" > <a name="3407">3407</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> E => 'Orange', </td> </tr> <tr> <td class="h" > <a name="3408">3408</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> A => 'Yellow', </td> </tr> <tr> <td class="h" > <a name="3409">3409</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="3410">3410</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> xlabel => 'Value', </td> </tr> <tr> <td class="h" > <a name="3411">3411</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ylabel => 'Frequency', </td> </tr> <tr> <td class="h" > <a name="3412">3412</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="3413">3413</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> { # 3rd subplot </td> </tr> <tr> <td class="h" > <a name="3414">3414</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> add => [ # add secondary plots/graphs/methods </td> </tr> <tr> <td class="h" > <a name="3415">3415</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> { # 1st additional plot/graph </td> </tr> <tr> <td class="h" > <a name="3416">3416</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> data => { </td> </tr> <tr> <td class="h" > <a name="3417">3417</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'Gaussian' => [ </td> </tr> <tr> <td class="h" > <a name="3418">3418</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> [40..150], </td> </tr> <tr> <td class="h" > <a name="3419">3419</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> [map {150 * exp(-0.5*($_-100)**2)} 40..150] </td> </tr> <tr> <td class="h" > <a name="3420">3420</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ] </td> </tr> <tr> <td class="h" > <a name="3421">3421</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="3422">3422</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'plot.type' => 'plot', </td> </tr> <tr> <td class="h" > <a name="3423">3423</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'set.options' => { </td> </tr> <tr> <td class="h" > <a name="3424">3424</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'Gaussian' => 'color = "red", linestyle = "dashed"' </td> </tr> <tr> <td class="h" > <a name="3425">3425</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="3426">3426</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="3427">3427</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ], </td> </tr> <tr> <td class="h" > <a name="3428">3428</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> data => { </td> </tr> <tr> <td class="h" > <a name="3429">3429</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> E => @e, </td> </tr> <tr> <td class="h" > <a name="3430">3430</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> B => @b, </td> </tr> <tr> <td class="h" > <a name="3431">3431</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> A => @a, </td> </tr> <tr> <td class="h" > <a name="3432">3432</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="3433">3433</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'plot.type' => 'hist', </td> </tr> <tr> <td class="h" > <a name="3434">3434</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> alpha => 0.75, </td> </tr> <tr> <td class="h" > <a name="3435">3435</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> bins => { </td> </tr> <tr> <td class="h" > <a name="3436">3436</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> A => 10, </td> </tr> <tr> <td class="h" > <a name="3437">3437</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> B => 25, </td> </tr> <tr> <td class="h" > <a name="3438">3438</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> E => 50 </td> </tr> <tr> <td class="h" > <a name="3439">3439</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="3440">3440</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> title => 'Varying # of bins', </td> </tr> <tr> <td class="h" > <a name="3441">3441</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> color => { </td> </tr> <tr> <td class="h" > <a name="3442">3442</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> B => 'Black', </td> </tr> <tr> <td class="h" > <a name="3443">3443</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> E => 'Orange', </td> </tr> <tr> <td class="h" > <a name="3444">3444</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> A => 'Yellow', </td> </tr> <tr> <td class="h" > <a name="3445">3445</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="3446">3446</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> xlabel => 'Value', </td> </tr> <tr> <td class="h" > <a name="3447">3447</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ylabel => 'Frequency', </td> </tr> <tr> <td class="h" > <a name="3448">3448</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="3449">3449</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> {# 4th subplot </td> </tr> <tr> <td class="h" > <a name="3450">3450</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> data => { </td> </tr> <tr> <td class="h" > <a name="3451">3451</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> E => @e, </td> </tr> <tr> <td class="h" > <a name="3452">3452</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> B => @b, </td> </tr> <tr> <td class="h" > <a name="3453">3453</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> A => @a, </td> </tr> <tr> <td class="h" > <a name="3454">3454</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="3455">3455</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'plot.type' => 'hist', </td> </tr> <tr> <td class="h" > <a name="3456">3456</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> alpha => 0.75, </td> </tr> <tr> <td class="h" > <a name="3457">3457</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> color => { </td> </tr> <tr> <td class="h" > <a name="3458">3458</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> B => 'Black', </td> </tr> <tr> <td class="h" > <a name="3459">3459</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> E => 'Orange', </td> </tr> <tr> <td class="h" > <a name="3460">3460</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> A => 'Yellow', </td> </tr> <tr> <td class="h" > <a name="3461">3461</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="3462">3462</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> orientation => 'horizontal', # assign x and y labels smartly </td> </tr> <tr> <td class="h" > <a name="3463">3463</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> title => 'Horizontal orientation', </td> </tr> <tr> <td class="h" > <a name="3464">3464</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ylabel => 'Value', </td> </tr> <tr> <td class="h" > <a name="3465">3465</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> xlabel => 'Frequency', # 'log' => 1, </td> </tr> <tr> <td class="h" > <a name="3466">3466</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="3467">3467</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ], </td> </tr> <tr> <td class="h" > <a name="3468">3468</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ncols => 3, </td> </tr> <tr> <td class="h" > <a name="3469">3469</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> nrows => 2, </td> </tr> <tr> <td class="h" > <a name="3470">3470</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }); </td> </tr> <tr> <td class="h" > <a name="3471">3471</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3472">3472</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3473">3473</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =for html </td> </tr> <tr> <td class="h" > <a name="3474">3474</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <p> </td> </tr> <tr> <td class="h" > <a name="3475">3475</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <img width="1511" height="491" alt="histogram" src="https://github.com/user-attachments/assets/b13b4cc8-6e64-40b0-913d-6a5886cee0db" /> </td> </tr> <tr> <td class="h" > <a name="3476">3476</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <p> </td> </tr> <tr> <td class="h" > <a name="3477">3477</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3478">3478</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3479">3479</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Make a 2-D histogram from a hash of arrays </td> </tr> <tr> <td class="h" > <a name="3480">3480</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3481">3481</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =head2 hist2d </td> </tr> <tr> <td class="h" > <a name="3482">3482</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3483">3483</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =head3 single, simple plot </td> </tr> <tr> <td class="h" > <a name="3484">3484</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3485">3485</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> plt({ </td> </tr> <tr> <td class="h" > <a name="3486">3486</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'output.file' => 'output.images/single.hist2d.png', </td> </tr> <tr> <td class="h" > <a name="3487">3487</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> data => { </td> </tr> <tr> <td class="h" > <a name="3488">3488</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> E => @e, </td> </tr> <tr> <td class="h" > <a name="3489">3489</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> B => @b </td> </tr> <tr> <td class="h" > <a name="3490">3490</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="3491">3491</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'plot.type' => 'hist2d', </td> </tr> <tr> <td class="h" > <a name="3492">3492</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> title => 'title', </td> </tr> <tr> <td class="h" > <a name="3493">3493</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> execute => 0, </td> </tr> <tr> <td class="h" > <a name="3494">3494</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> fh => $fh, </td> </tr> <tr> <td class="h" > <a name="3495">3495</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }); </td> </tr> <tr> <td class="h" > <a name="3496">3496</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3497">3497</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> makes the following image: </td> </tr> <tr> <td class="h" > <a name="3498">3498</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3499">3499</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3500">3500</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =for html </td> </tr> <tr> <td class="h" > <a name="3501">3501</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <p> </td> </tr> <tr> <td class="h" > <a name="3502">3502</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <img width="650" height="491" alt="single hist2d" src="https://github.com/user-attachments/assets/86480c77-7b8f-4bfa-b5d8-71f82830260f" /> </td> </tr> <tr> <td class="h" > <a name="3503">3503</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <p> </td> </tr> <tr> <td class="h" > <a name="3504">3504</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3505">3505</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3506">3506</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> the range for the density min and max is reported to stdout </td> </tr> <tr> <td class="h" > <a name="3507">3507</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3508">3508</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =head3 options </td> </tr> <tr> <td class="h" > <a name="3509">3509</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3510">3510</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =for html </td> </tr> <tr> <td class="h" > <a name="3511">3511</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <table> </td> </tr> <tr> <td class="h" > <a name="3512">3512</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <tbody> </td> </tr> <tr> <td class="h" > <a name="3513">3513</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <tr><td>Option</td><td>Description</td><td>Example</td></tr> </td> </tr> <tr> <td class="h" > <a name="3514">3514</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <tr><td>--------</td><td>-------</td><td>-------</td></tr> </td> </tr> <tr> <td class="h" > <a name="3515">3515</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <tr><td><code>cb_logscale</code></td><td>make the colorbar log-scale</td><td><code>cb_logscale => 1</code></td></tr> </td> </tr> <tr> <td class="h" > <a name="3516">3516</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <tr><td><code>cmap</code></td><td>color map for coloring # "gist_rainbow" by default</td><td></td></tr> </td> </tr> <tr> <td class="h" > <a name="3517">3517</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <tr><td>'cmax', <code>cmin</code></td><td>All bins that has count < *cmin* or > *cmax* will not be displayed</td><td></td></tr> </td> </tr> <tr> <td class="h" > <a name="3518">3518</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <tr><td>'density'</td><td>density : bool, default: False</td><td></td></tr> </td> </tr> <tr> <td class="h" > <a name="3519">3519</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <tr><td>'key.order'</td><td>define the keys in an order (an array reference)</td><td></td></tr> </td> </tr> <tr> <td class="h" > <a name="3520">3520</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <tr><td>'logscale'</td><td># logscale, an array of axes that will get log scale</td><td></td></tr> </td> </tr> <tr> <td class="h" > <a name="3521">3521</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <tr><td>'show.colorbar'</td><td>self-evident, 0 or 1</td><td><code>show.colorbar</code> => 1</td></tr> </td> </tr> <tr> <td class="h" > <a name="3522">3522</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <tr><td>'vmax'</td><td>When using scalar data and no explicit *norm*, *vmin* and *vmax* define the data range that the colormap cover</td><td></td></tr> </td> </tr> <tr> <td class="h" > <a name="3523">3523</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <tr><td>'vmin'</td><td># When using scalar data and no explicit *norm*, *vmin* and *vmax* define the data range that the colormap cover</td><td></td></tr> </td> </tr> <tr> <td class="h" > <a name="3524">3524</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <tr><td>'xbins'</td><td># default 15</td><td></td></tr> </td> </tr> <tr> <td class="h" > <a name="3525">3525</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <tr><td>'xmin', 'xmax',</td><td></td><td></td></tr> </td> </tr> <tr> <td class="h" > <a name="3526">3526</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <tr><td>'ymin', 'ymax',</td><td></td><td></td></tr> </td> </tr> <tr> <td class="h" > <a name="3527">3527</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <tr><td>'ybins'</td><td>default 15</td><td></td></tr> </td> </tr> <tr> <td class="h" > <a name="3528">3528</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> </tbody> </td> </tr> <tr> <td class="h" > <a name="3529">3529</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> </table> </td> </tr> <tr> <td class="h" > <a name="3530">3530</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3531">3531</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =head3 multiple plots </td> </tr> <tr> <td class="h" > <a name="3532">3532</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3533">3533</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> plt({ </td> </tr> <tr> <td class="h" > <a name="3534">3534</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> fh => $fh, </td> </tr> <tr> <td class="h" > <a name="3535">3535</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> execute => 1, </td> </tr> <tr> <td class="h" > <a name="3536">3536</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ncols => 3, </td> </tr> <tr> <td class="h" > <a name="3537">3537</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> nrows => 3, </td> </tr> <tr> <td class="h" > <a name="3538">3538</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> suptitle => 'Types of hist2d plots: all of the data is identical', </td> </tr> <tr> <td class="h" > <a name="3539">3539</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> plots => [ </td> </tr> <tr> <td class="h" > <a name="3540">3540</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> { </td> </tr> <tr> <td class="h" > <a name="3541">3541</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> data => { </td> </tr> <tr> <td class="h" > <a name="3542">3542</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> X => $x, # x-axis </td> </tr> <tr> <td class="h" > <a name="3543">3543</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Y => $y, # y-axis </td> </tr> <tr> <td class="h" > <a name="3544">3544</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="3545">3545</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'plot.type' => 'hist2d', </td> </tr> <tr> <td class="h" > <a name="3546">3546</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> title => 'Simple hist2d', </td> </tr> <tr> <td class="h" > <a name="3547">3547</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="3548">3548</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> { </td> </tr> <tr> <td class="h" > <a name="3549">3549</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> data => { </td> </tr> <tr> <td class="h" > <a name="3550">3550</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> X => $x, # x-axis </td> </tr> <tr> <td class="h" > <a name="3551">3551</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Y => $y, # y-axis </td> </tr> <tr> <td class="h" > <a name="3552">3552</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="3553">3553</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'plot.type' => 'hist2d', </td> </tr> <tr> <td class="h" > <a name="3554">3554</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> title => 'cmap = terrain', </td> </tr> <tr> <td class="h" > <a name="3555">3555</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> cmap => 'terrain' </td> </tr> <tr> <td class="h" > <a name="3556">3556</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="3557">3557</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> { </td> </tr> <tr> <td class="h" > <a name="3558">3558</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> cmap => 'ocean', </td> </tr> <tr> <td class="h" > <a name="3559">3559</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> data => { </td> </tr> <tr> <td class="h" > <a name="3560">3560</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> X => $x, # x-axis </td> </tr> <tr> <td class="h" > <a name="3561">3561</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Y => $y, # y-axis </td> </tr> <tr> <td class="h" > <a name="3562">3562</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="3563">3563</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'plot.type' => 'hist2d', </td> </tr> <tr> <td class="h" > <a name="3564">3564</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> title => 'cmap = ocean and set colorbar range with vmin/vmax', </td> </tr> <tr> <td class="h" > <a name="3565">3565</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> set_figwidth => 15, </td> </tr> <tr> <td class="h" > <a name="3566">3566</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> vmin => -2, </td> </tr> <tr> <td class="h" > <a name="3567">3567</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> vmax => 14 </td> </tr> <tr> <td class="h" > <a name="3568">3568</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="3569">3569</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> { </td> </tr> <tr> <td class="h" > <a name="3570">3570</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> data => { </td> </tr> <tr> <td class="h" > <a name="3571">3571</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> X => $x, # x-axis </td> </tr> <tr> <td class="h" > <a name="3572">3572</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Y => $y, # y-axis </td> </tr> <tr> <td class="h" > <a name="3573">3573</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="3574">3574</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'plot.type' => 'hist2d', </td> </tr> <tr> <td class="h" > <a name="3575">3575</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> title => 'density = True', </td> </tr> <tr> <td class="h" > <a name="3576">3576</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> cmap => 'terrain', </td> </tr> <tr> <td class="h" > <a name="3577">3577</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> density => 'True' </td> </tr> <tr> <td class="h" > <a name="3578">3578</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="3579">3579</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> { </td> </tr> <tr> <td class="h" > <a name="3580">3580</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> data => { </td> </tr> <tr> <td class="h" > <a name="3581">3581</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> X => $x, # x-axis </td> </tr> <tr> <td class="h" > <a name="3582">3582</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Y => $y, # y-axis </td> </tr> <tr> <td class="h" > <a name="3583">3583</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="3584">3584</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'plot.type' => 'hist2d', </td> </tr> <tr> <td class="h" > <a name="3585">3585</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> title => 'key.order flips axes', </td> </tr> <tr> <td class="h" > <a name="3586">3586</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> cmap => 'terrain', </td> </tr> <tr> <td class="h" > <a name="3587">3587</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'key.order' => [ 'Y', 'X' ] </td> </tr> <tr> <td class="h" > <a name="3588">3588</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="3589">3589</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> { </td> </tr> <tr> <td class="h" > <a name="3590">3590</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> cb_logscale => 1, </td> </tr> <tr> <td class="h" > <a name="3591">3591</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> data => { </td> </tr> <tr> <td class="h" > <a name="3592">3592</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> X => $x, # x-axis </td> </tr> <tr> <td class="h" > <a name="3593">3593</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Y => $y, # y-axis </td> </tr> <tr> <td class="h" > <a name="3594">3594</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="3595">3595</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'plot.type' => 'hist2d', </td> </tr> <tr> <td class="h" > <a name="3596">3596</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> title => 'cb_logscale = 1', </td> </tr> <tr> <td class="h" > <a name="3597">3597</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="3598">3598</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> { </td> </tr> <tr> <td class="h" > <a name="3599">3599</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> cb_logscale => 1, </td> </tr> <tr> <td class="h" > <a name="3600">3600</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> data => { </td> </tr> <tr> <td class="h" > <a name="3601">3601</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> X => $x, # x-axis </td> </tr> <tr> <td class="h" > <a name="3602">3602</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Y => $y, # y-axis </td> </tr> <tr> <td class="h" > <a name="3603">3603</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="3604">3604</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'plot.type' => 'hist2d', </td> </tr> <tr> <td class="h" > <a name="3605">3605</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> title => 'cb_logscale = 1 with vmax set', </td> </tr> <tr> <td class="h" > <a name="3606">3606</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> vmax => 2.1, </td> </tr> <tr> <td class="h" > <a name="3607">3607</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> vmin => 1 </td> </tr> <tr> <td class="h" > <a name="3608">3608</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="3609">3609</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> { </td> </tr> <tr> <td class="h" > <a name="3610">3610</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> data => { </td> </tr> <tr> <td class="h" > <a name="3611">3611</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> X => $x, # x-axis </td> </tr> <tr> <td class="h" > <a name="3612">3612</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Y => $y, # y-axis </td> </tr> <tr> <td class="h" > <a name="3613">3613</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="3614">3614</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'plot.type' => 'hist2d', </td> </tr> <tr> <td class="h" > <a name="3615">3615</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'show.colorbar' => 0, </td> </tr> <tr> <td class="h" > <a name="3616">3616</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> title => 'no colorbar', </td> </tr> <tr> <td class="h" > <a name="3617">3617</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="3618">3618</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> { </td> </tr> <tr> <td class="h" > <a name="3619">3619</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> data => { </td> </tr> <tr> <td class="h" > <a name="3620">3620</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> X => $x, # x-axis </td> </tr> <tr> <td class="h" > <a name="3621">3621</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Y => $y, # y-axis </td> </tr> <tr> <td class="h" > <a name="3622">3622</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="3623">3623</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'plot.type' => 'hist2d', </td> </tr> <tr> <td class="h" > <a name="3624">3624</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> title => 'xbins = 9', </td> </tr> <tr> <td class="h" > <a name="3625">3625</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> xbins => 9 </td> </tr> <tr> <td class="h" > <a name="3626">3626</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="3627">3627</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ], </td> </tr> <tr> <td class="h" > <a name="3628">3628</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'output.file' => 'output.images/hist2d.png', </td> </tr> <tr> <td class="h" > <a name="3629">3629</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }); </td> </tr> <tr> <td class="h" > <a name="3630">3630</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3631">3631</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> makes the following image: </td> </tr> <tr> <td class="h" > <a name="3632">3632</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3633">3633</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3634">3634</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =for html </td> </tr> <tr> <td class="h" > <a name="3635">3635</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <p> </td> </tr> <tr> <td class="h" > <a name="3636">3636</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <img width="1510" height="491" alt="hist2d" src="https://github.com/user-attachments/assets/3d6becd3-44f3-4511-8b0f-eae39bc325fa" /> </td> </tr> <tr> <td class="h" > <a name="3637">3637</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <p> </td> </tr> <tr> <td class="h" > <a name="3638">3638</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3639">3639</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3640">3640</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =head2 imshow </td> </tr> <tr> <td class="h" > <a name="3641">3641</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3642">3642</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Plot 2D array of numbers as an image </td> </tr> <tr> <td class="h" > <a name="3643">3643</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3644">3644</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =head3 options </td> </tr> <tr> <td class="h" > <a name="3645">3645</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3646">3646</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =for html </td> </tr> <tr> <td class="h" > <a name="3647">3647</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <table> </td> </tr> <tr> <td class="h" > <a name="3648">3648</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <tbody> </td> </tr> <tr> <td class="h" > <a name="3649">3649</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <tr><td>Option</td><td>Description</td><td>Example</td></tr> </td> </tr> <tr> <td class="h" > <a name="3650">3650</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <tr><td>--------</td><td>-------</td><td>------- </td></tr> </td> </tr> <tr> <td class="h" > <a name="3651">3651</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <tr><td><code>cblabel</code></td><td>colorbar label</td><td><code>cblabel => 'sin(x) * cos(x)',</code></td></tr> </td> </tr> <tr> <td class="h" > <a name="3652">3652</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <tr><td><code>cbdrawedges</code></td><td>draw edges for colorbar</td><td></td></tr> </td> </tr> <tr> <td class="h" > <a name="3653">3653</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <tr><td><code>cblocation</code></td><td>'left', 'right', 'top', 'bottom'</td><td><code>cblocation => 'left',</code></td></tr> </td> </tr> <tr> <td class="h" > <a name="3654">3654</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <tr><td><code>cborientation</code></td><td>None, or 'vertical', 'horizontal'</td><td></td></tr> </td> </tr> <tr> <td class="h" > <a name="3655">3655</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <tr><td><code>cmap</code></td><td># The Colormap instance or registered colormap name used to map scalar data to colors.</td><td></td></tr> </td> </tr> <tr> <td class="h" > <a name="3656">3656</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <tr><td><code>vmax</code></td><td>float</td><td></td></tr> </td> </tr> <tr> <td class="h" > <a name="3657">3657</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <tr><td><code>vmin</code></td><td>float</td><td></td></tr> </td> </tr> <tr> <td class="h" > <a name="3658">3658</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> </tbody> </td> </tr> <tr> <td class="h" > <a name="3659">3659</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> </table> </td> </tr> <tr> <td class="h" > <a name="3660">3660</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3661">3661</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =head3 single, simple plot </td> </tr> <tr> <td class="h" > <a name="3662">3662</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3663">3663</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> my @imshow_data; </td> </tr> <tr> <td class="h" > <a name="3664">3664</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> foreach my $i (0..360) { </td> </tr> <tr> <td class="h" > <a name="3665">3665</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> foreach my $j (0..360) { </td> </tr> <tr> <td class="h" > <a name="3666">3666</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> push @{ $imshow_data[$i] }, sin($i * $pi/180)*cos($j * $pi/180); </td> </tr> <tr> <td class="h" > <a name="3667">3667</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="3668">3668</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="3669">3669</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> plt({ </td> </tr> <tr> <td class="h" > <a name="3670">3670</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> data => \@imshow_data, </td> </tr> <tr> <td class="h" > <a name="3671">3671</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> execute => 0, </td> </tr> <tr> <td class="h" > <a name="3672">3672</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> fh => $fh, </td> </tr> <tr> <td class="h" > <a name="3673">3673</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'output.file' => 'output.images/imshow.single.png', </td> </tr> <tr> <td class="h" > <a name="3674">3674</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'plot.type' => 'imshow', </td> </tr> <tr> <td class="h" > <a name="3675">3675</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> set_xlim => '0, ' . scalar @imshow_data, </td> </tr> <tr> <td class="h" > <a name="3676">3676</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> set_ylim => '0, ' . scalar @imshow_data, </td> </tr> <tr> <td class="h" > <a name="3677">3677</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }); </td> </tr> <tr> <td class="h" > <a name="3678">3678</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3679">3679</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> which makes the following image: </td> </tr> <tr> <td class="h" > <a name="3680">3680</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3681">3681</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3682">3682</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =for html </td> </tr> <tr> <td class="h" > <a name="3683">3683</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <p> </td> </tr> <tr> <td class="h" > <a name="3684">3684</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <img width="599" height="491" alt="imshow single" src="https://github.com/user-attachments/assets/3fa4ffe6-4817-4133-9c91-b68099400377" /> </td> </tr> <tr> <td class="h" > <a name="3685">3685</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <p> </td> </tr> <tr> <td class="h" > <a name="3686">3686</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3687">3687</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3688">3688</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =head3 multiple plots </td> </tr> <tr> <td class="h" > <a name="3689">3689</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3690">3690</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> plt({ </td> </tr> <tr> <td class="h" > <a name="3691">3691</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> plots => [ </td> </tr> <tr> <td class="h" > <a name="3692">3692</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> { </td> </tr> <tr> <td class="h" > <a name="3693">3693</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> data => \@imshow_data, </td> </tr> <tr> <td class="h" > <a name="3694">3694</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'plot.type' => 'imshow', </td> </tr> <tr> <td class="h" > <a name="3695">3695</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> set_xlim => '0, ' . scalar @imshow_data, </td> </tr> <tr> <td class="h" > <a name="3696">3696</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> set_ylim => '0, ' . scalar @imshow_data, </td> </tr> <tr> <td class="h" > <a name="3697">3697</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> title => 'basic', </td> </tr> <tr> <td class="h" > <a name="3698">3698</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="3699">3699</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> { </td> </tr> <tr> <td class="h" > <a name="3700">3700</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> cblabel => 'sin(x) * cos(x)', </td> </tr> <tr> <td class="h" > <a name="3701">3701</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> data => \@imshow_data, </td> </tr> <tr> <td class="h" > <a name="3702">3702</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'plot.type' => 'imshow', </td> </tr> <tr> <td class="h" > <a name="3703">3703</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> set_xlim => '0, ' . scalar @imshow_data, </td> </tr> <tr> <td class="h" > <a name="3704">3704</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> set_ylim => '0, ' . scalar @imshow_data, </td> </tr> <tr> <td class="h" > <a name="3705">3705</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> title => 'cblabel', </td> </tr> <tr> <td class="h" > <a name="3706">3706</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="3707">3707</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> { </td> </tr> <tr> <td class="h" > <a name="3708">3708</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> cblabel => 'sin(x) * cos(x)', </td> </tr> <tr> <td class="h" > <a name="3709">3709</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> cblocation => 'left', </td> </tr> <tr> <td class="h" > <a name="3710">3710</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> data => \@imshow_data, </td> </tr> <tr> <td class="h" > <a name="3711">3711</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'plot.type' => 'imshow', </td> </tr> <tr> <td class="h" > <a name="3712">3712</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> set_xlim => '0, ' . scalar @imshow_data, </td> </tr> <tr> <td class="h" > <a name="3713">3713</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> set_ylim => '0, ' . scalar @imshow_data, </td> </tr> <tr> <td class="h" > <a name="3714">3714</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> title => 'cblocation = left', </td> </tr> <tr> <td class="h" > <a name="3715">3715</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="3716">3716</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> { </td> </tr> <tr> <td class="h" > <a name="3717">3717</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> cblabel => 'sin(x) * cos(x)', </td> </tr> <tr> <td class="h" > <a name="3718">3718</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> data => \@imshow_data, </td> </tr> <tr> <td class="h" > <a name="3719">3719</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> add => [ # add secondary plots </td> </tr> <tr> <td class="h" > <a name="3720">3720</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> { # 1st additional plot </td> </tr> <tr> <td class="h" > <a name="3721">3721</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> data => { </td> </tr> <tr> <td class="h" > <a name="3722">3722</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'sin(x)' => [ </td> </tr> <tr> <td class="h" > <a name="3723">3723</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> [0..360], </td> </tr> <tr> <td class="h" > <a name="3724">3724</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> [map {180 + 180*sin($_ * $pi/180)} 0..360] </td> </tr> <tr> <td class="h" > <a name="3725">3725</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ], </td> </tr> <tr> <td class="h" > <a name="3726">3726</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'cos(x)' => [ </td> </tr> <tr> <td class="h" > <a name="3727">3727</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> [0..360], </td> </tr> <tr> <td class="h" > <a name="3728">3728</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> [map {180 + 180*cos($_ * $pi/180)} 0..360] </td> </tr> <tr> <td class="h" > <a name="3729">3729</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ], </td> </tr> <tr> <td class="h" > <a name="3730">3730</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="3731">3731</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'plot.type' => 'plot', </td> </tr> <tr> <td class="h" > <a name="3732">3732</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'set.options' => { </td> </tr> <tr> <td class="h" > <a name="3733">3733</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'sin(x)' => 'color = "red", linestyle = "dashed"', </td> </tr> <tr> <td class="h" > <a name="3734">3734</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'cos(x)' => 'color = "blue", linestyle = "dashed"', </td> </tr> <tr> <td class="h" > <a name="3735">3735</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="3736">3736</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="3737">3737</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ], </td> </tr> <tr> <td class="h" > <a name="3738">3738</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'plot.type' => 'imshow', </td> </tr> <tr> <td class="h" > <a name="3739">3739</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> set_xlim => '0, ' . scalar @imshow_data, </td> </tr> <tr> <td class="h" > <a name="3740">3740</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> set_ylim => '0, ' . scalar @imshow_data, </td> </tr> <tr> <td class="h" > <a name="3741">3741</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> title => 'auxiliary plots', </td> </tr> <tr> <td class="h" > <a name="3742">3742</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="3743">3743</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ], </td> </tr> <tr> <td class="h" > <a name="3744">3744</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> execute => 0, </td> </tr> <tr> <td class="h" > <a name="3745">3745</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> fh => $fh, </td> </tr> <tr> <td class="h" > <a name="3746">3746</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'output.file' => 'output.images/imshow.multiple.png', </td> </tr> <tr> <td class="h" > <a name="3747">3747</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ncols => 2, </td> </tr> <tr> <td class="h" > <a name="3748">3748</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> nrows => 2, </td> </tr> <tr> <td class="h" > <a name="3749">3749</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> set_figheight => 6*3,# 4.8 </td> </tr> <tr> <td class="h" > <a name="3750">3750</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> set_figwidth => 6*4 # 6.4 </td> </tr> <tr> <td class="h" > <a name="3751">3751</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }); </td> </tr> <tr> <td class="h" > <a name="3752">3752</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3753">3753</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> which makes the following image: </td> </tr> <tr> <td class="h" > <a name="3754">3754</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3755">3755</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3756">3756</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =for html </td> </tr> <tr> <td class="h" > <a name="3757">3757</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <p> </td> </tr> <tr> <td class="h" > <a name="3758">3758</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <img width="2416" height="1811" alt="imshow multiple" src="https://github.com/user-attachments/assets/091acccb-151c-47ca-82cc-99c19d2bff91" /> </td> </tr> <tr> <td class="h" > <a name="3759">3759</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <p> </td> </tr> <tr> <td class="h" > <a name="3760">3760</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3761">3761</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3762">3762</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =head3 Secondary Structure Prediction (DSSP) </td> </tr> <tr> <td class="h" > <a name="3763">3763</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3764">3764</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Sometimes strings instead of numbers can be entered into a 2-D array, one example is protein secondary structure. </td> </tr> <tr> <td class="h" > <a name="3765">3765</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Protein secondary structure can be plotted thus, with a key in C<stringmap> to show which strings become which integers in a minimal working example: </td> </tr> <tr> <td class="h" > <a name="3766">3766</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3767">3767</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> plt({ </td> </tr> <tr> <td class="h" > <a name="3768">3768</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> cbpad => 0.01, # default 0.05 is too big </td> </tr> <tr> <td class="h" > <a name="3769">3769</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> data => [ # imshow gets a 2D array </td> </tr> <tr> <td class="h" > <a name="3770">3770</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> [' ', ' ', ' ', ' ', 'G'], # bottom </td> </tr> <tr> <td class="h" > <a name="3771">3771</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ['S', 'I', 'T', 'E', 'H'], # top </td> </tr> <tr> <td class="h" > <a name="3772">3772</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ], </td> </tr> <tr> <td class="h" > <a name="3773">3773</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'plot.type' => 'imshow', </td> </tr> <tr> <td class="h" > <a name="3774">3774</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> stringmap => { </td> </tr> <tr> <td class="h" > <a name="3775">3775</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'H' => 'Alpha helix', </td> </tr> <tr> <td class="h" > <a name="3776">3776</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'B' => 'Residue in isolated β-bridge', </td> </tr> <tr> <td class="h" > <a name="3777">3777</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'E' => 'Extended strand, participates in β ladder', </td> </tr> <tr> <td class="h" > <a name="3778">3778</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'G' => '3-helix (3/10 helix)', </td> </tr> <tr> <td class="h" > <a name="3779">3779</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'I' => '5 helix (pi helix)', </td> </tr> <tr> <td class="h" > <a name="3780">3780</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'T' => 'hydrogen bonded turn', </td> </tr> <tr> <td class="h" > <a name="3781">3781</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'S' => 'bend', </td> </tr> <tr> <td class="h" > <a name="3782">3782</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ' ' => 'Loops and irregular elements' </td> </tr> <tr> <td class="h" > <a name="3783">3783</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="3784">3784</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'output.file' => 'output.images/dssp.single.png', </td> </tr> <tr> <td class="h" > <a name="3785">3785</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> scalex => 2.4, </td> </tr> <tr> <td class="h" > <a name="3786">3786</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> set_ylim => '0, 1', </td> </tr> <tr> <td class="h" > <a name="3787">3787</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> title => 'Dictionary of Secondary Structure in Proteins (DSSP)', </td> </tr> <tr> <td class="h" > <a name="3788">3788</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> xlabel => 'xlabel', </td> </tr> <tr> <td class="h" > <a name="3789">3789</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ylabel => 'ylabel' </td> </tr> <tr> <td class="h" > <a name="3790">3790</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }); </td> </tr> <tr> <td class="h" > <a name="3791">3791</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3792">3792</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3793">3793</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =for html </td> </tr> <tr> <td class="h" > <a name="3794">3794</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <p> </td> </tr> <tr> <td class="h" > <a name="3795">3795</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <img width="1547" height="491" alt="dssp single" src="https://github.com/user-attachments/assets/712f6199-4a41-4d8f-953e-19df9dacc447" /> </td> </tr> <tr> <td class="h" > <a name="3796">3796</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <p> </td> </tr> <tr> <td class="h" > <a name="3797">3797</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3798">3798</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3799">3799</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> or for multiple plots, where the colorbar can be spread across multiple plots now: </td> </tr> <tr> <td class="h" > <a name="3800">3800</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3801">3801</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> plt({ </td> </tr> <tr> <td class="h" > <a name="3802">3802</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> cbpad => 0.01, # default 0.05 is too big </td> </tr> <tr> <td class="h" > <a name="3803">3803</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> plots => [ </td> </tr> <tr> <td class="h" > <a name="3804">3804</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> { # 1st plot </td> </tr> <tr> <td class="h" > <a name="3805">3805</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> data => [ </td> </tr> <tr> <td class="h" > <a name="3806">3806</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> [' ', ' ', ' ', ' ', 'G'], # bottom </td> </tr> <tr> <td class="h" > <a name="3807">3807</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ['S', 'I', 'T', 'E', 'H'], # top </td> </tr> <tr> <td class="h" > <a name="3808">3808</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ], </td> </tr> <tr> <td class="h" > <a name="3809">3809</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'plot.type' => 'imshow', </td> </tr> <tr> <td class="h" > <a name="3810">3810</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> set_xticklabels=> '[]', # remove x-axis labels </td> </tr> <tr> <td class="h" > <a name="3811">3811</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> set_ylim => '0, 1', </td> </tr> <tr> <td class="h" > <a name="3812">3812</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> stringmap => { </td> </tr> <tr> <td class="h" > <a name="3813">3813</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'H' => 'Alpha helix', </td> </tr> <tr> <td class="h" > <a name="3814">3814</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'B' => 'Residue in isolated β-bridge', </td> </tr> <tr> <td class="h" > <a name="3815">3815</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'E' => 'Extended strand, participates in β ladder', </td> </tr> <tr> <td class="h" > <a name="3816">3816</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'G' => '3-helix (3/10 helix)', </td> </tr> <tr> <td class="h" > <a name="3817">3817</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'I' => '5 helix (pi helix)', </td> </tr> <tr> <td class="h" > <a name="3818">3818</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'T' => 'hydrogen bonded turn', </td> </tr> <tr> <td class="h" > <a name="3819">3819</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'S' => 'bend', </td> </tr> <tr> <td class="h" > <a name="3820">3820</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ' ' => 'Loops and irregular elements' </td> </tr> <tr> <td class="h" > <a name="3821">3821</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="3822">3822</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> title => 'top plot', </td> </tr> <tr> <td class="h" > <a name="3823">3823</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ylabel => 'ylabel' </td> </tr> <tr> <td class="h" > <a name="3824">3824</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="3825">3825</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> { # 2nd plot </td> </tr> <tr> <td class="h" > <a name="3826">3826</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> data => [ </td> </tr> <tr> <td class="h" > <a name="3827">3827</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> [' ', ' ', ' ', ' ', 'G'], # bottom </td> </tr> <tr> <td class="h" > <a name="3828">3828</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ['S', 'I', 'T', 'E', 'H'], # top </td> </tr> <tr> <td class="h" > <a name="3829">3829</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ], </td> </tr> <tr> <td class="h" > <a name="3830">3830</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'plot.type' => 'imshow', </td> </tr> <tr> <td class="h" > <a name="3831">3831</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> set_ylim => '0, 1', </td> </tr> <tr> <td class="h" > <a name="3832">3832</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> stringmap => { </td> </tr> <tr> <td class="h" > <a name="3833">3833</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'H' => 'Alpha helix', </td> </tr> <tr> <td class="h" > <a name="3834">3834</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'B' => 'Residue in isolated β-bridge', </td> </tr> <tr> <td class="h" > <a name="3835">3835</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'E' => 'Extended strand, participates in β ladder', </td> </tr> <tr> <td class="h" > <a name="3836">3836</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'G' => '3-helix (3/10 helix)', </td> </tr> <tr> <td class="h" > <a name="3837">3837</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'I' => '5 helix (pi helix)', </td> </tr> <tr> <td class="h" > <a name="3838">3838</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'T' => 'hydrogen bonded turn', </td> </tr> <tr> <td class="h" > <a name="3839">3839</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'S' => 'bend', </td> </tr> <tr> <td class="h" > <a name="3840">3840</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ' ' => 'Loops and irregular elements' </td> </tr> <tr> <td class="h" > <a name="3841">3841</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="3842">3842</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> title => 'bottom plot', </td> </tr> <tr> <td class="h" > <a name="3843">3843</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> xlabel => 'xlabel', </td> </tr> <tr> <td class="h" > <a name="3844">3844</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ylabel => 'ylabel' </td> </tr> <tr> <td class="h" > <a name="3845">3845</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="3846">3846</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ], </td> </tr> <tr> <td class="h" > <a name="3847">3847</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> nrows => 2, </td> </tr> <tr> <td class="h" > <a name="3848">3848</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'output.file' => 'output.images/dssp.multiple.png', </td> </tr> <tr> <td class="h" > <a name="3849">3849</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> scalex => 2.4, </td> </tr> <tr> <td class="h" > <a name="3850">3850</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'shared.colorbar' => [0,1], # plots 0 and 1 share a colorbar </td> </tr> <tr> <td class="h" > <a name="3851">3851</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> suptitle => 'Dictionary of Secondary Structure in Proteins (DSSP)', </td> </tr> <tr> <td class="h" > <a name="3852">3852</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }); </td> </tr> <tr> <td class="h" > <a name="3853">3853</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3854">3854</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> which makes the following plot: </td> </tr> <tr> <td class="h" > <a name="3855">3855</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3856">3856</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3857">3857</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =for html </td> </tr> <tr> <td class="h" > <a name="3858">3858</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <p> </td> </tr> <tr> <td class="h" > <a name="3859">3859</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <img width="1547" height="491" alt="dssp multiple" src="https://github.com/user-attachments/assets/d88e295e-1d1e-4e2a-bd5b-48029c46f5b0" /> </td> </tr> <tr> <td class="h" > <a name="3860">3860</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <p> </td> </tr> <tr> <td class="h" > <a name="3861">3861</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3862">3862</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3863">3863</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =head2 pie </td> </tr> <tr> <td class="h" > <a name="3864">3864</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3865">3865</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =head3 options </td> </tr> <tr> <td class="h" > <a name="3866">3866</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3867">3867</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =head3 single, simple plot </td> </tr> <tr> <td class="h" > <a name="3868">3868</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3869">3869</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> plt({ </td> </tr> <tr> <td class="h" > <a name="3870">3870</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'output.file' => 'output.images/single.pie.png', </td> </tr> <tr> <td class="h" > <a name="3871">3871</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> data => { # simple hash </td> </tr> <tr> <td class="h" > <a name="3872">3872</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Fri => 76, </td> </tr> <tr> <td class="h" > <a name="3873">3873</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Mon => 73, </td> </tr> <tr> <td class="h" > <a name="3874">3874</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Sat => 26, </td> </tr> <tr> <td class="h" > <a name="3875">3875</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Sun => 11, </td> </tr> <tr> <td class="h" > <a name="3876">3876</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Thu => 94, </td> </tr> <tr> <td class="h" > <a name="3877">3877</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Tue => 93, </td> </tr> <tr> <td class="h" > <a name="3878">3878</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Wed => 77 </td> </tr> <tr> <td class="h" > <a name="3879">3879</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="3880">3880</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'plot.type' => 'pie', </td> </tr> <tr> <td class="h" > <a name="3881">3881</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> title => 'Single Simple Pie', </td> </tr> <tr> <td class="h" > <a name="3882">3882</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> fh => $fh, </td> </tr> <tr> <td class="h" > <a name="3883">3883</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> execute => 0, </td> </tr> <tr> <td class="h" > <a name="3884">3884</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }); </td> </tr> <tr> <td class="h" > <a name="3885">3885</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3886">3886</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> which makes the image: </td> </tr> <tr> <td class="h" > <a name="3887">3887</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3888">3888</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3889">3889</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =for html </td> </tr> <tr> <td class="h" > <a name="3890">3890</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <p> </td> </tr> <tr> <td class="h" > <a name="3891">3891</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <img width="469" height="491" alt="single pie" src="https://github.com/user-attachments/assets/a0bc3212-d013-463a-9be6-f96829ac7dba" /> </td> </tr> <tr> <td class="h" > <a name="3892">3892</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <p> </td> </tr> <tr> <td class="h" > <a name="3893">3893</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3894">3894</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3895">3895</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =head3 multiple plots </td> </tr> <tr> <td class="h" > <a name="3896">3896</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3897">3897</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> plt({ </td> </tr> <tr> <td class="h" > <a name="3898">3898</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'output.file' => 'output.images/pie.png', </td> </tr> <tr> <td class="h" > <a name="3899">3899</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> plots => [ </td> </tr> <tr> <td class="h" > <a name="3900">3900</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> { </td> </tr> <tr> <td class="h" > <a name="3901">3901</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> data => { </td> </tr> <tr> <td class="h" > <a name="3902">3902</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'Russian' => 106_000_000, # Primarily European Russia </td> </tr> <tr> <td class="h" > <a name="3903">3903</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'German' => </td> </tr> <tr> <td class="h" > <a name="3904">3904</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 95_000_000, # Germany, Austria, Switzerland, etc. </td> </tr> <tr> <td class="h" > <a name="3905">3905</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'English' => 70_000_000, # UK, Ireland, etc. </td> </tr> <tr> <td class="h" > <a name="3906">3906</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'French' => 66_000_000, # France, Belgium, Switzerland, etc. </td> </tr> <tr> <td class="h" > <a name="3907">3907</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'Italian' => 59_000_000, # Italy, Switzerland, etc. </td> </tr> <tr> <td class="h" > <a name="3908">3908</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'Spanish' => 45_000_000, # Spain </td> </tr> <tr> <td class="h" > <a name="3909">3909</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'Polish' => 38_000_000, # Poland </td> </tr> <tr> <td class="h" > <a name="3910">3910</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'Ukrainian' => 32_000_000, # Ukraine </td> </tr> <tr> <td class="h" > <a name="3911">3911</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'Romanian' => 24_000_000, # Romania, Moldova </td> </tr> <tr> <td class="h" > <a name="3912">3912</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'Dutch' => 22_000_000 # Netherlands, Belgium </td> </tr> <tr> <td class="h" > <a name="3913">3913</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="3914">3914</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'plot.type' => 'pie', </td> </tr> <tr> <td class="h" > <a name="3915">3915</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> title => 'Top Languages in Europe', </td> </tr> <tr> <td class="h" > <a name="3916">3916</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> suptitle => 'Pie in subplots', </td> </tr> <tr> <td class="h" > <a name="3917">3917</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="3918">3918</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> { </td> </tr> <tr> <td class="h" > <a name="3919">3919</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> data => { </td> </tr> <tr> <td class="h" > <a name="3920">3920</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'Russian' => 106_000_000, # Primarily European Russia </td> </tr> <tr> <td class="h" > <a name="3921">3921</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'German' => </td> </tr> <tr> <td class="h" > <a name="3922">3922</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 95_000_000, # Germany, Austria, Switzerland, etc. </td> </tr> <tr> <td class="h" > <a name="3923">3923</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'English' => 70_000_000, # UK, Ireland, etc. </td> </tr> <tr> <td class="h" > <a name="3924">3924</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'French' => 66_000_000, # France, Belgium, Switzerland, etc. </td> </tr> <tr> <td class="h" > <a name="3925">3925</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'Italian' => 59_000_000, # Italy, Switzerland, etc. </td> </tr> <tr> <td class="h" > <a name="3926">3926</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'Spanish' => 45_000_000, # Spain </td> </tr> <tr> <td class="h" > <a name="3927">3927</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'Polish' => 38_000_000, # Poland </td> </tr> <tr> <td class="h" > <a name="3928">3928</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'Ukrainian' => 32_000_000, # Ukraine </td> </tr> <tr> <td class="h" > <a name="3929">3929</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'Romanian' => 24_000_000, # Romania, Moldova </td> </tr> <tr> <td class="h" > <a name="3930">3930</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'Dutch' => 22_000_000 # Netherlands, Belgium </td> </tr> <tr> <td class="h" > <a name="3931">3931</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="3932">3932</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'plot.type' => 'pie', </td> </tr> <tr> <td class="h" > <a name="3933">3933</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> title => 'Top Languages in Europe', </td> </tr> <tr> <td class="h" > <a name="3934">3934</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> autopct => '%1.1f%%', </td> </tr> <tr> <td class="h" > <a name="3935">3935</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="3936">3936</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> { </td> </tr> <tr> <td class="h" > <a name="3937">3937</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> data => { </td> </tr> <tr> <td class="h" > <a name="3938">3938</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'United States' => 86, </td> </tr> <tr> <td class="h" > <a name="3939">3939</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'United Kingdom' => 33, </td> </tr> <tr> <td class="h" > <a name="3940">3940</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'Germany' => 29, </td> </tr> <tr> <td class="h" > <a name="3941">3941</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'France' => 10, </td> </tr> <tr> <td class="h" > <a name="3942">3942</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'Japan' => 7, </td> </tr> <tr> <td class="h" > <a name="3943">3943</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'Israel' => 6, </td> </tr> <tr> <td class="h" > <a name="3944">3944</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="3945">3945</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> title => 'Chem. Nobels: swap text positions', </td> </tr> <tr> <td class="h" > <a name="3946">3946</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'plot.type' => 'pie', </td> </tr> <tr> <td class="h" > <a name="3947">3947</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> autopct => '%1.1f%%', </td> </tr> <tr> <td class="h" > <a name="3948">3948</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> pctdistance => 1.25, </td> </tr> <tr> <td class="h" > <a name="3949">3949</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> labeldistance => 0.6, </td> </tr> <tr> <td class="h" > <a name="3950">3950</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="3951">3951</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ], </td> </tr> <tr> <td class="h" > <a name="3952">3952</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> fh => $fh, </td> </tr> <tr> <td class="h" > <a name="3953">3953</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> execute => 0, </td> </tr> <tr> <td class="h" > <a name="3954">3954</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> set_figwidth => 12, </td> </tr> <tr> <td class="h" > <a name="3955">3955</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ncols => 3, </td> </tr> <tr> <td class="h" > <a name="3956">3956</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }); </td> </tr> <tr> <td class="h" > <a name="3957">3957</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3958">3958</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3959">3959</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =for html </td> </tr> <tr> <td class="h" > <a name="3960">3960</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <p> </td> </tr> <tr> <td class="h" > <a name="3961">3961</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <img width="1210" height="444" alt="pie" src="https://github.com/user-attachments/assets/4c44d300-fd84-49bc-9a32-b73af54286cf" /> </td> </tr> <tr> <td class="h" > <a name="3962">3962</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <p> </td> </tr> <tr> <td class="h" > <a name="3963">3963</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3964">3964</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3965">3965</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =head2 plot </td> </tr> <tr> <td class="h" > <a name="3966">3966</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3967">3967</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> plot either a hash of arrays or an array of arrays </td> </tr> <tr> <td class="h" > <a name="3968">3968</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3969">3969</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =head3 single, simple </td> </tr> <tr> <td class="h" > <a name="3970">3970</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3971">3971</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> data can be given as a hash, where the hash key is the label: </td> </tr> <tr> <td class="h" > <a name="3972">3972</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3973">3973</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> plt({ </td> </tr> <tr> <td class="h" > <a name="3974">3974</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> fh => $fh, </td> </tr> <tr> <td class="h" > <a name="3975">3975</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> execute => 0, </td> </tr> <tr> <td class="h" > <a name="3976">3976</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'output.file' => 'output.images/plot.single.png', </td> </tr> <tr> <td class="h" > <a name="3977">3977</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> data => { </td> </tr> <tr> <td class="h" > <a name="3978">3978</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'sin(x)' => [ </td> </tr> <tr> <td class="h" > <a name="3979">3979</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> [@x], # x </td> </tr> <tr> <td class="h" > <a name="3980">3980</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> [ map { sin($_) } @x ] # y </td> </tr> <tr> <td class="h" > <a name="3981">3981</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ], </td> </tr> <tr> <td class="h" > <a name="3982">3982</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'cos(x)' => [ </td> </tr> <tr> <td class="h" > <a name="3983">3983</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> [@x], # x </td> </tr> <tr> <td class="h" > <a name="3984">3984</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> [ map { cos($_) } @x ] # y </td> </tr> <tr> <td class="h" > <a name="3985">3985</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ], </td> </tr> <tr> <td class="h" > <a name="3986">3986</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="3987">3987</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'plot.type' => 'plot', </td> </tr> <tr> <td class="h" > <a name="3988">3988</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> title => 'simple plot', </td> </tr> <tr> <td class="h" > <a name="3989">3989</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> set_xticks => </td> </tr> <tr> <td class="h" > <a name="3990">3990</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> "[-2 * $pi, -3 * $pi / 2, -$pi, -$pi / 2, 0, $pi / 2, $pi, 3 * $pi / 2, 2 * $pi" </td> </tr> <tr> <td class="h" > <a name="3991">3991</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> . '], [r\'$-2\pi$\', r\'$-3\pi/2$\', r\'$-\pi$\', r\'$-\pi/2$\', r\'$0$\', r\'$\pi/2$\', r\'$\pi$\', r\'$3\pi/2$\', r\'$2\pi$\']', </td> </tr> <tr> <td class="h" > <a name="3992">3992</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'set.options' => { # set options overrides global settings </td> </tr> <tr> <td class="h" > <a name="3993">3993</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'sin(x)' => 'color="blue", linewidth=2', </td> </tr> <tr> <td class="h" > <a name="3994">3994</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'cos(x)' => 'color="red", linewidth=2' </td> </tr> <tr> <td class="h" > <a name="3995">3995</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="3996">3996</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }); </td> </tr> <tr> <td class="h" > <a name="3997">3997</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="3998">3998</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> or as an array of arrays: </td> </tr> <tr> <td class="h" > <a name="3999">3999</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="4000">4000</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> plt({ </td> </tr> <tr> <td class="h" > <a name="4001">4001</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> fh => $fh, </td> </tr> <tr> <td class="h" > <a name="4002">4002</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> execute => 0, </td> </tr> <tr> <td class="h" > <a name="4003">4003</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'output.file' => 'output.images/plot.single.arr.png', </td> </tr> <tr> <td class="h" > <a name="4004">4004</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> data => [ </td> </tr> <tr> <td class="h" > <a name="4005">4005</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> [ </td> </tr> <tr> <td class="h" > <a name="4006">4006</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> [@x], # x </td> </tr> <tr> <td class="h" > <a name="4007">4007</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> [ map { sin($_) } @x ] # y </td> </tr> <tr> <td class="h" > <a name="4008">4008</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ], </td> </tr> <tr> <td class="h" > <a name="4009">4009</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> [ </td> </tr> <tr> <td class="h" > <a name="4010">4010</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> [@x], # x </td> </tr> <tr> <td class="h" > <a name="4011">4011</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> [ map { cos($_) } @x ] # y </td> </tr> <tr> <td class="h" > <a name="4012">4012</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ], </td> </tr> <tr> <td class="h" > <a name="4013">4013</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ], </td> </tr> <tr> <td class="h" > <a name="4014">4014</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'plot.type' => 'plot', </td> </tr> <tr> <td class="h" > <a name="4015">4015</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> title => 'simple plot', </td> </tr> <tr> <td class="h" > <a name="4016">4016</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> set_xticks => </td> </tr> <tr> <td class="h" > <a name="4017">4017</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> "[-2 * $pi, -3 * $pi / 2, -$pi, -$pi / 2, 0, $pi / 2, $pi, 3 * $pi / 2, 2 * $pi" </td> </tr> <tr> <td class="h" > <a name="4018">4018</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> . '], [r\'$-2\pi$\', r\'$-3\pi/2$\', r\'$-\pi$\', r\'$-\pi/2$\', r\'$0$\', r\'$\pi/2$\', r\'$\pi$\', r\'$3\pi/2$\', r\'$2\pi$\']', </td> </tr> <tr> <td class="h" > <a name="4019">4019</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'set.options' => [ # set options overrides global settings; indices match data array </td> </tr> <tr> <td class="h" > <a name="4020">4020</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'color="blue", linewidth=2, label = "sin(x)"', # labels aren't added automatically when using array here </td> </tr> <tr> <td class="h" > <a name="4021">4021</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'color="red", linewidth=2, label = "cos(x)"' </td> </tr> <tr> <td class="h" > <a name="4022">4022</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ], </td> </tr> <tr> <td class="h" > <a name="4023">4023</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }); </td> </tr> <tr> <td class="h" > <a name="4024">4024</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="4025">4025</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> both of which make the following "plot" plot: </td> </tr> <tr> <td class="h" > <a name="4026">4026</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="4027">4027</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="4028">4028</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =for html </td> </tr> <tr> <td class="h" > <a name="4029">4029</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <p> </td> </tr> <tr> <td class="h" > <a name="4030">4030</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <img width="651" height="491" alt="plot single" src="https://github.com/user-attachments/assets/6cbd6aad-c464-4703-b962-b420ec08bb66" /> </td> </tr> <tr> <td class="h" > <a name="4031">4031</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <p> </td> </tr> <tr> <td class="h" > <a name="4032">4032</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="4033">4033</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="4034">4034</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =head3 multiple sub-plots </td> </tr> <tr> <td class="h" > <a name="4035">4035</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="4036">4036</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> which makes </td> </tr> <tr> <td class="h" > <a name="4037">4037</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="4038">4038</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> my $epsilon = 10**-7; </td> </tr> <tr> <td class="h" > <a name="4039">4039</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> my (%set_opt, %d); </td> </tr> <tr> <td class="h" > <a name="4040">4040</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> my $i = 0; </td> </tr> <tr> <td class="h" > <a name="4041">4041</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> foreach my $interval ( </td> </tr> <tr> <td class="h" > <a name="4042">4042</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> [-2*$pi, -$pi], </td> </tr> <tr> <td class="h" > <a name="4043">4043</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> [-$pi, 0], </td> </tr> <tr> <td class="h" > <a name="4044">4044</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> [0, $pi], </td> </tr> <tr> <td class="h" > <a name="4045">4045</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> [$pi, 2*$pi] </td> </tr> <tr> <td class="h" > <a name="4046">4046</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ) { </td> </tr> <tr> <td class="h" > <a name="4047">4047</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> my @th = linspace($interval->[0] + $epsilon, $interval->[1] - $epsilon, 99, 0); </td> </tr> <tr> <td class="h" > <a name="4048">4048</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> @{ $d{csc}{$i}[0] } = @th; </td> </tr> <tr> <td class="h" > <a name="4049">4049</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> @{ $d{csc}{$i}[1] } = map { 1/sin($_) } @th; </td> </tr> <tr> <td class="h" > <a name="4050">4050</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> @{ $d{cot}{$i}[0] } = @th; </td> </tr> <tr> <td class="h" > <a name="4051">4051</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> @{ $d{cot}{$i}[1] } = map { cos($_)/sin($_) } @th; </td> </tr> <tr> <td class="h" > <a name="4052">4052</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> if ($i == 0) { </td> </tr> <tr> <td class="h" > <a name="4053">4053</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $set_opt{csc}{$i} = 'color = "red", label = "csc(θ)"'; </td> </tr> <tr> <td class="h" > <a name="4054">4054</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $set_opt{cot}{$i} = 'color = "violet", label = "cot(θ)"'; </td> </tr> <tr> <td class="h" > <a name="4055">4055</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } else { </td> </tr> <tr> <td class="h" > <a name="4056">4056</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $set_opt{csc}{$i} = 'color = "red"'; </td> </tr> <tr> <td class="h" > <a name="4057">4057</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $set_opt{cot}{$i} = 'color = "violet"'; </td> </tr> <tr> <td class="h" > <a name="4058">4058</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="4059">4059</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $i++; </td> </tr> <tr> <td class="h" > <a name="4060">4060</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="4061">4061</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $i = 0; </td> </tr> <tr> <td class="h" > <a name="4062">4062</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> foreach my $interval ( </td> </tr> <tr> <td class="h" > <a name="4063">4063</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> [-2 * $pi, -1.5 * $pi], </td> </tr> <tr> <td class="h" > <a name="4064">4064</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> [-1.5*$pi, -0.5*$pi], </td> </tr> <tr> <td class="h" > <a name="4065">4065</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> [-0.5*$pi, 0.5 * $pi], </td> </tr> <tr> <td class="h" > <a name="4066">4066</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> [0.5 * $pi, 1.5 * $pi], </td> </tr> <tr> <td class="h" > <a name="4067">4067</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> [1.5 * $pi, 2 * $pi] </td> </tr> <tr> <td class="h" > <a name="4068">4068</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ) { </td> </tr> <tr> <td class="h" > <a name="4069">4069</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> my @th = linspace($interval->[0] + $epsilon, $interval->[1] - $epsilon, 99, 0); </td> </tr> <tr> <td class="h" > <a name="4070">4070</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> @{ $d{sec}{$i}[0] } = @th; </td> </tr> <tr> <td class="h" > <a name="4071">4071</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> @{ $d{sec}{$i}[1] } = map { 1/cos($_) } @th; </td> </tr> <tr> <td class="h" > <a name="4072">4072</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> if ($i == 0) { </td> </tr> <tr> <td class="h" > <a name="4073">4073</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $set_opt{sec}{$i} = 'color = "blue", label = "sec(θ)"'; </td> </tr> <tr> <td class="h" > <a name="4074">4074</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $set_opt{tan}{$i} = 'color = "green", label = "tan(θ)"'; </td> </tr> <tr> <td class="h" > <a name="4075">4075</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } else { </td> </tr> <tr> <td class="h" > <a name="4076">4076</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $set_opt{sec}{$i} = 'color = "blue"'; </td> </tr> <tr> <td class="h" > <a name="4077">4077</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $set_opt{tan}{$i} = 'color = "green"'; </td> </tr> <tr> <td class="h" > <a name="4078">4078</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="4079">4079</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> @{ $d{tan}{$i}[0] } = @th; </td> </tr> <tr> <td class="h" > <a name="4080">4080</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> @{ $d{tan}{$i}[1] } = map { sin($_)/cos($_) } @th; </td> </tr> <tr> <td class="h" > <a name="4081">4081</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $i++; </td> </tr> <tr> <td class="h" > <a name="4082">4082</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="4083">4083</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> mkdir 'svg' unless -d 'svg'; </td> </tr> <tr> <td class="h" > <a name="4084">4084</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> my $xticks = "[-2 * $pi, -3 * $pi / 2, -$pi, -$pi / 2, 0, $pi / 2, $pi, 3 * $pi / 2, 2 * $pi" </td> </tr> <tr> <td class="h" > <a name="4085">4085</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> . '], [r\'$-2\pi$\', r\'$-3\pi/2$\', r\'$-\pi$\', r\'$-\pi/2$\', r\'$0$\', r\'$\pi/2$\', r\'$\pi$\', r\'$3\pi/2$\', r\'$2\pi$\']'; </td> </tr> <tr> <td class="h" > <a name="4086">4086</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> my ($min, $max) = (-9,9); </td> </tr> <tr> <td class="h" > <a name="4087">4087</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> plt({ </td> </tr> <tr> <td class="h" > <a name="4088">4088</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> fh => $fh, </td> </tr> <tr> <td class="h" > <a name="4089">4089</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> execute => 0, </td> </tr> <tr> <td class="h" > <a name="4090">4090</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'output.file' => 'output.images/plots.png', </td> </tr> <tr> <td class="h" > <a name="4091">4091</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> plots => [ </td> </tr> <tr> <td class="h" > <a name="4092">4092</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> { # sin </td> </tr> <tr> <td class="h" > <a name="4093">4093</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> data => { </td> </tr> <tr> <td class="h" > <a name="4094">4094</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'sin(θ)' => [ </td> </tr> <tr> <td class="h" > <a name="4095">4095</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> [@x], </td> </tr> <tr> <td class="h" > <a name="4096">4096</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> [map {sin($_)} @x] </td> </tr> <tr> <td class="h" > <a name="4097">4097</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ] </td> </tr> <tr> <td class="h" > <a name="4098">4098</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="4099">4099</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'plot.type' => 'plot', </td> </tr> <tr> <td class="h" > <a name="4100">4100</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'set.options' => { </td> </tr> <tr> <td class="h" > <a name="4101">4101</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'sin(θ)' => 'color = "orange"' </td> </tr> <tr> <td class="h" > <a name="4102">4102</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="4103">4103</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> set_xticks => $xticks, </td> </tr> <tr> <td class="h" > <a name="4104">4104</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> set_xlim => "-2*$pi, 2*$pi", </td> </tr> <tr> <td class="h" > <a name="4105">4105</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> xlabel => 'θ', </td> </tr> <tr> <td class="h" > <a name="4106">4106</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ylabel => 'sin(θ)', </td> </tr> <tr> <td class="h" > <a name="4107">4107</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="4108">4108</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> { # sin </td> </tr> <tr> <td class="h" > <a name="4109">4109</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> data => { </td> </tr> <tr> <td class="h" > <a name="4110">4110</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'cos(θ)' => [ </td> </tr> <tr> <td class="h" > <a name="4111">4111</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> [@x], </td> </tr> <tr> <td class="h" > <a name="4112">4112</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> [map {cos($_)} @x] </td> </tr> <tr> <td class="h" > <a name="4113">4113</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ] </td> </tr> <tr> <td class="h" > <a name="4114">4114</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="4115">4115</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'plot.type' => 'plot', </td> </tr> <tr> <td class="h" > <a name="4116">4116</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'set.options' => { </td> </tr> <tr> <td class="h" > <a name="4117">4117</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'cos(θ)' => 'color = "black"' </td> </tr> <tr> <td class="h" > <a name="4118">4118</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="4119">4119</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> set_xticks => $xticks, </td> </tr> <tr> <td class="h" > <a name="4120">4120</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> set_xlim => "-2*$pi, 2*$pi", </td> </tr> <tr> <td class="h" > <a name="4121">4121</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> xlabel => 'θ', </td> </tr> <tr> <td class="h" > <a name="4122">4122</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ylabel => 'cos(θ)', </td> </tr> <tr> <td class="h" > <a name="4123">4123</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="4124">4124</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> { # csc </td> </tr> <tr> <td class="h" > <a name="4125">4125</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> data => $d{csc}, </td> </tr> <tr> <td class="h" > <a name="4126">4126</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'plot.type' => 'plot', </td> </tr> <tr> <td class="h" > <a name="4127">4127</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'set.options' => $set_opt{csc}, </td> </tr> <tr> <td class="h" > <a name="4128">4128</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> set_xticks => $xticks, </td> </tr> <tr> <td class="h" > <a name="4129">4129</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> set_xlim => "-2*$pi, 2*$pi", </td> </tr> <tr> <td class="h" > <a name="4130">4130</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> set_ylim => "$min,$max", </td> </tr> <tr> <td class="h" > <a name="4131">4131</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'show.legend' => 0, </td> </tr> <tr> <td class="h" > <a name="4132">4132</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> vlines => [ # asymptotes </td> </tr> <tr> <td class="h" > <a name="4133">4133</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> "-2*$pi, $min, $max, color = 'gray', linestyle = 'dashed'", </td> </tr> <tr> <td class="h" > <a name="4134">4134</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> "-$pi, $min, $max, color = 'gray', linestyle = 'dashed'", </td> </tr> <tr> <td class="h" > <a name="4135">4135</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> "0, $min, $max, color = 'gray', linestyle = 'dashed'", </td> </tr> <tr> <td class="h" > <a name="4136">4136</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> "$pi, $min, $max, color = 'gray', linestyle = 'dashed'", </td> </tr> <tr> <td class="h" > <a name="4137">4137</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> "2*$pi, $min, $max, color = 'gray', linestyle = 'dashed'", </td> </tr> <tr> <td class="h" > <a name="4138">4138</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ], </td> </tr> <tr> <td class="h" > <a name="4139">4139</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> xlabel => 'θ', </td> </tr> <tr> <td class="h" > <a name="4140">4140</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ylabel => 'csc(θ)', </td> </tr> <tr> <td class="h" > <a name="4141">4141</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="4142">4142</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> { # sec </td> </tr> <tr> <td class="h" > <a name="4143">4143</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> data => $d{sec}, </td> </tr> <tr> <td class="h" > <a name="4144">4144</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'plot.type' => 'plot', </td> </tr> <tr> <td class="h" > <a name="4145">4145</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'set.options' => $set_opt{sec}, </td> </tr> <tr> <td class="h" > <a name="4146">4146</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> set_xticks => $xticks, </td> </tr> <tr> <td class="h" > <a name="4147">4147</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> set_xlim => "-2*$pi, 2*$pi", </td> </tr> <tr> <td class="h" > <a name="4148">4148</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> set_ylim => "$min,$max", </td> </tr> <tr> <td class="h" > <a name="4149">4149</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'show.legend' => 0, </td> </tr> <tr> <td class="h" > <a name="4150">4150</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> vlines => [ # asymptotes </td> </tr> <tr> <td class="h" > <a name="4151">4151</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> "-1.5*$pi, $min, $max, color = 'gray', linestyle = 'dashed'", </td> </tr> <tr> <td class="h" > <a name="4152">4152</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> "-.5*$pi, $min, $max, color = 'gray', linestyle = 'dashed'", </td> </tr> <tr> <td class="h" > <a name="4153">4153</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ".5*$pi, $min, $max, color = 'gray', linestyle = 'dashed'", </td> </tr> <tr> <td class="h" > <a name="4154">4154</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> "1.5*$pi, $min, $max, color = 'gray', linestyle = 'dashed'", </td> </tr> <tr> <td class="h" > <a name="4155">4155</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # "2*$pi, $min, $max, color = 'gray', linestyle = 'dashed'", </td> </tr> <tr> <td class="h" > <a name="4156">4156</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ], </td> </tr> <tr> <td class="h" > <a name="4157">4157</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> xlabel => 'θ', </td> </tr> <tr> <td class="h" > <a name="4158">4158</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ylabel => 'sec(θ)', </td> </tr> <tr> <td class="h" > <a name="4159">4159</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="4160">4160</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> { # csc </td> </tr> <tr> <td class="h" > <a name="4161">4161</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> data => $d{cot}, </td> </tr> <tr> <td class="h" > <a name="4162">4162</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'plot.type' => 'plot', </td> </tr> <tr> <td class="h" > <a name="4163">4163</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'set.options' => $set_opt{cot}, </td> </tr> <tr> <td class="h" > <a name="4164">4164</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> set_xticks => $xticks, </td> </tr> <tr> <td class="h" > <a name="4165">4165</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> set_xlim => "-2*$pi, 2*$pi", </td> </tr> <tr> <td class="h" > <a name="4166">4166</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> set_ylim => "$min,$max", </td> </tr> <tr> <td class="h" > <a name="4167">4167</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'show.legend' => 0, </td> </tr> <tr> <td class="h" > <a name="4168">4168</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> vlines => [ # asymptotes </td> </tr> <tr> <td class="h" > <a name="4169">4169</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> "-2*$pi, $min, $max, color = 'gray', linestyle = 'dashed'", </td> </tr> <tr> <td class="h" > <a name="4170">4170</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> "-$pi, $min, $max, color = 'gray', linestyle = 'dashed'", </td> </tr> <tr> <td class="h" > <a name="4171">4171</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> "0, $min, $max, color = 'gray', linestyle = 'dashed'", </td> </tr> <tr> <td class="h" > <a name="4172">4172</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> "$pi, $min, $max, color = 'gray', linestyle = 'dashed'", </td> </tr> <tr> <td class="h" > <a name="4173">4173</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> "2*$pi, $min, $max, color = 'gray', linestyle = 'dashed'", </td> </tr> <tr> <td class="h" > <a name="4174">4174</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ], </td> </tr> <tr> <td class="h" > <a name="4175">4175</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> xlabel => 'θ', </td> </tr> <tr> <td class="h" > <a name="4176">4176</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ylabel => 'cot(θ)', </td> </tr> <tr> <td class="h" > <a name="4177">4177</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="4178">4178</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> { # sec </td> </tr> <tr> <td class="h" > <a name="4179">4179</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> data => $d{tan}, </td> </tr> <tr> <td class="h" > <a name="4180">4180</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'plot.type' => 'plot', </td> </tr> <tr> <td class="h" > <a name="4181">4181</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'set.options' => $set_opt{tan}, </td> </tr> <tr> <td class="h" > <a name="4182">4182</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> set_xticks => $xticks, </td> </tr> <tr> <td class="h" > <a name="4183">4183</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> set_xlim => "-2*$pi, 2*$pi", </td> </tr> <tr> <td class="h" > <a name="4184">4184</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> set_ylim => "$min,$max", </td> </tr> <tr> <td class="h" > <a name="4185">4185</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'show.legend' => 0, </td> </tr> <tr> <td class="h" > <a name="4186">4186</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> vlines => [ # asymptotes </td> </tr> <tr> <td class="h" > <a name="4187">4187</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> "-1.5*$pi, $min, $max, color = 'gray', linestyle = 'dashed'", </td> </tr> <tr> <td class="h" > <a name="4188">4188</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> "-.5*$pi, $min, $max, color = 'gray', linestyle = 'dashed'", </td> </tr> <tr> <td class="h" > <a name="4189">4189</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ".5*$pi, $min, $max, color = 'gray', linestyle = 'dashed'", </td> </tr> <tr> <td class="h" > <a name="4190">4190</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> "1.5*$pi, $min, $max, color = 'gray', linestyle = 'dashed'", </td> </tr> <tr> <td class="h" > <a name="4191">4191</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # "2*$pi, $min, $max, color = 'gray', linestyle = 'dashed'", </td> </tr> <tr> <td class="h" > <a name="4192">4192</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ], </td> </tr> <tr> <td class="h" > <a name="4193">4193</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> xlabel => 'θ', </td> </tr> <tr> <td class="h" > <a name="4194">4194</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ylabel => 'tan(θ)', </td> </tr> <tr> <td class="h" > <a name="4195">4195</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="4196">4196</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ], # end </td> </tr> <tr> <td class="h" > <a name="4197">4197</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ncols => 2, </td> </tr> <tr> <td class="h" > <a name="4198">4198</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> nrows => 3, </td> </tr> <tr> <td class="h" > <a name="4199">4199</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> set_figwidth => 8, </td> </tr> <tr> <td class="h" > <a name="4200">4200</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> suptitle => 'Basic Trigonometric Functions' </td> </tr> <tr> <td class="h" > <a name="4201">4201</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }); </td> </tr> <tr> <td class="h" > <a name="4202">4202</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="4203">4203</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="4204">4204</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =for html </td> </tr> <tr> <td class="h" > <a name="4205">4205</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <p> </td> </tr> <tr> <td class="h" > <a name="4206">4206</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <img width="811" height="491" alt="plots" src="https://github.com/user-attachments/assets/0bdd0744-c1bb-4c4a-9482-b3de3f2d4fc2" /> </td> </tr> <tr> <td class="h" > <a name="4207">4207</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <p> </td> </tr> <tr> <td class="h" > <a name="4208">4208</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="4209">4209</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="4210">4210</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =head2 scatter </td> </tr> <tr> <td class="h" > <a name="4211">4211</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="4212">4212</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =head3 single, simple plot </td> </tr> <tr> <td class="h" > <a name="4213">4213</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="4214">4214</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> scatter({ </td> </tr> <tr> <td class="h" > <a name="4215">4215</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> fh => $fh, </td> </tr> <tr> <td class="h" > <a name="4216">4216</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> data => { </td> </tr> <tr> <td class="h" > <a name="4217">4217</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> X => [@x], </td> </tr> <tr> <td class="h" > <a name="4218">4218</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Y => [map {sin($_)} @x] </td> </tr> <tr> <td class="h" > <a name="4219">4219</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="4220">4220</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> execute => 0, </td> </tr> <tr> <td class="h" > <a name="4221">4221</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'output.file' => 'output.images/single.scatter.png', </td> </tr> <tr> <td class="h" > <a name="4222">4222</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }); </td> </tr> <tr> <td class="h" > <a name="4223">4223</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="4224">4224</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> makes the following image: </td> </tr> <tr> <td class="h" > <a name="4225">4225</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="4226">4226</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="4227">4227</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =for html </td> </tr> <tr> <td class="h" > <a name="4228">4228</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <p> </td> </tr> <tr> <td class="h" > <a name="4229">4229</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <img width="651" height="491" alt="single scatter" src="https://github.com/user-attachments/assets/c45d9922-23e0-4f85-8306-aa7fca400328" /> </td> </tr> <tr> <td class="h" > <a name="4230">4230</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <p> </td> </tr> <tr> <td class="h" > <a name="4231">4231</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="4232">4232</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="4233">4233</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =head3 options </td> </tr> <tr> <td class="h" > <a name="4234">4234</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="4235">4235</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =head3 multiple plots </td> </tr> <tr> <td class="h" > <a name="4236">4236</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="4237">4237</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> plt({ </td> </tr> <tr> <td class="h" > <a name="4238">4238</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> fh => $fh, </td> </tr> <tr> <td class="h" > <a name="4239">4239</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'output.file' => 'output.images/scatterplots.png', </td> </tr> <tr> <td class="h" > <a name="4240">4240</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> execute => 0, </td> </tr> <tr> <td class="h" > <a name="4241">4241</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> nrows => 2, </td> </tr> <tr> <td class="h" > <a name="4242">4242</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ncols => 3, </td> </tr> <tr> <td class="h" > <a name="4243">4243</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> set_figheight => 8, </td> </tr> <tr> <td class="h" > <a name="4244">4244</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> set_figwidth => 16, </td> </tr> <tr> <td class="h" > <a name="4245">4245</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> suptitle => 'Scatterplot Examples', # applies to all </td> </tr> <tr> <td class="h" > <a name="4246">4246</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> plots => [ </td> </tr> <tr> <td class="h" > <a name="4247">4247</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> { # single-set scatter; no label </td> </tr> <tr> <td class="h" > <a name="4248">4248</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> data => { </td> </tr> <tr> <td class="h" > <a name="4249">4249</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> X => @e, # x-axis </td> </tr> <tr> <td class="h" > <a name="4250">4250</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Y => @b, # y-axis </td> </tr> <tr> <td class="h" > <a name="4251">4251</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Z => @a # color </td> </tr> <tr> <td class="h" > <a name="4252">4252</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="4253">4253</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> title => '"Single Set Scatterplot: Random Distributions"', </td> </tr> <tr> <td class="h" > <a name="4254">4254</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> color_key => 'Z', </td> </tr> <tr> <td class="h" > <a name="4255">4255</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'set.options' => 'marker = "v"' </td> </tr> <tr> <td class="h" > <a name="4256">4256</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> , # arguments to ax.scatter: there's only 1 set, so "set.options" is a scalar </td> </tr> <tr> <td class="h" > <a name="4257">4257</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> text => [ '100, 100, "text1"', '100, 100, "text2"', ], </td> </tr> <tr> <td class="h" > <a name="4258">4258</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'plot.type' => 'scatter', </td> </tr> <tr> <td class="h" > <a name="4259">4259</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="4260">4260</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> { # multiple-set scatter, labels are "X" and "Y" </td> </tr> <tr> <td class="h" > <a name="4261">4261</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> data => { </td> </tr> <tr> <td class="h" > <a name="4262">4262</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> X => { # 1st data set; label is "X" </td> </tr> <tr> <td class="h" > <a name="4263">4263</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> A => @a, # x-axis </td> </tr> <tr> <td class="h" > <a name="4264">4264</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> B => @b, # y-axis </td> </tr> <tr> <td class="h" > <a name="4265">4265</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="4266">4266</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> W => { # 2nd data set; label is "Y" </td> </tr> <tr> <td class="h" > <a name="4267">4267</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> A => generate_normal_dist( 100, 15, 210 ), # x-axis </td> </tr> <tr> <td class="h" > <a name="4268">4268</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> B => generate_normal_dist( 100, 15, 210 ), # y-axis </td> </tr> <tr> <td class="h" > <a name="4269">4269</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="4270">4270</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="4271">4271</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'plot.type' => 'scatter', </td> </tr> <tr> <td class="h" > <a name="4272">4272</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> title => 'Multiple Set Scatterplot', </td> </tr> <tr> <td class="h" > <a name="4273">4273</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'set.options' => </td> </tr> <tr> <td class="h" > <a name="4274">4274</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> { # arguments to ax.scatter, for each set in data </td> </tr> <tr> <td class="h" > <a name="4275">4275</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> X => 'marker = ".", color = "red"', </td> </tr> <tr> <td class="h" > <a name="4276">4276</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> W => 'marker = "d", color = "green"' </td> </tr> <tr> <td class="h" > <a name="4277">4277</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="4278">4278</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="4279">4279</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> { # multiple-set scatter, labels are "X" and "Y" </td> </tr> <tr> <td class="h" > <a name="4280">4280</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> data => { # 8th plot, </td> </tr> <tr> <td class="h" > <a name="4281">4281</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> X => { # 1st data set; label is "X" </td> </tr> <tr> <td class="h" > <a name="4282">4282</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> A => @e, # x-axis </td> </tr> <tr> <td class="h" > <a name="4283">4283</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> B => @b, # y-axis </td> </tr> <tr> <td class="h" > <a name="4284">4284</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> C => @a, # color </td> </tr> <tr> <td class="h" > <a name="4285">4285</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="4286">4286</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Y => { # 2nd data set; label is "Y" </td> </tr> <tr> <td class="h" > <a name="4287">4287</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> A => generate_normal_dist( 100, 15, 210 ), # x-axis </td> </tr> <tr> <td class="h" > <a name="4288">4288</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> B => generate_normal_dist( 100, 15, 210 ), # y-axis </td> </tr> <tr> <td class="h" > <a name="4289">4289</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> C => generate_normal_dist( 100, 15, 210 ), # color </td> </tr> <tr> <td class="h" > <a name="4290">4290</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="4291">4291</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="4292">4292</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'plot.type' => 'scatter', </td> </tr> <tr> <td class="h" > <a name="4293">4293</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> title => 'Multiple Set Scatter w/ colorbar', </td> </tr> <tr> <td class="h" > <a name="4294">4294</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'set.options' => { # arguments to ax.scatter, for each set in data </td> </tr> <tr> <td class="h" > <a name="4295">4295</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> X => 'marker = "."', # diamond </td> </tr> <tr> <td class="h" > <a name="4296">4296</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Y => 'marker = "d"' # diamond </td> </tr> <tr> <td class="h" > <a name="4297">4297</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="4298">4298</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> color_key => 'Z', </td> </tr> <tr> <td class="h" > <a name="4299">4299</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="4300">4300</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ] </td> </tr> <tr> <td class="h" > <a name="4301">4301</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }); </td> </tr> <tr> <td class="h" > <a name="4302">4302</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="4303">4303</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> which makes the following figure: </td> </tr> <tr> <td class="h" > <a name="4304">4304</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="4305">4305</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="4306">4306</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =for html </td> </tr> <tr> <td class="h" > <a name="4307">4307</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <p> </td> </tr> <tr> <td class="h" > <a name="4308">4308</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <img width="1610" height="461" alt="scatterplots" src="https://github.com/user-attachments/assets/b8a90f9f-acb3-4cf2-a423-6ad18686ab8c" /> </td> </tr> <tr> <td class="h" > <a name="4309">4309</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <p> </td> </tr> <tr> <td class="h" > <a name="4310">4310</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="4311">4311</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="4312">4312</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =head2 violin </td> </tr> <tr> <td class="h" > <a name="4313">4313</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="4314">4314</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> plot a hash of array refs as violins </td> </tr> <tr> <td class="h" > <a name="4315">4315</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="4316">4316</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =head3 options </td> </tr> <tr> <td class="h" > <a name="4317">4317</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="4318">4318</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =for html </td> </tr> <tr> <td class="h" > <a name="4319">4319</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <table> </td> </tr> <tr> <td class="h" > <a name="4320">4320</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <tbody> </td> </tr> <tr> <td class="h" > <a name="4321">4321</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <tr><td>Option</td><td>Description</td><td>Example</td></tr> </td> </tr> <tr> <td class="h" > <a name="4322">4322</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <tr><td>--------</td><td>-------</td><td>-------</td></tr> </td> </tr> <tr> <td class="h" > <a name="4323">4323</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <tr><td><code>color</code></td><td># a hash, where keys are the keys in data, and values are colors, e.g. X => 'blue'</td><td></td></tr> </td> </tr> <tr> <td class="h" > <a name="4324">4324</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <tr><td><code>colors</code></td><td>match sets</td><td><code>colors => { E => 'yellow', B => 'purple', A => 'green' }</code></td></tr> </td> </tr> <tr> <td class="h" > <a name="4325">4325</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <tr><td><code>key.order</code></td><td>determine key order display on x-axis</td><td></td></tr> </td> </tr> <tr> <td class="h" > <a name="4326">4326</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <tr><td><code>log</code></td><td># if set to > 1, the y-axis will be logarithmic</td><td></td></tr> </td> </tr> <tr> <td class="h" > <a name="4327">4327</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <tr><td><code>orientation</code></td><td>'vertical', 'horizontal'}, default: 'vertical'</td><td></td></tr> </td> </tr> <tr> <td class="h" > <a name="4328">4328</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> </tbody> </td> </tr> <tr> <td class="h" > <a name="4329">4329</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> </table> </td> </tr> <tr> <td class="h" > <a name="4330">4330</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="4331">4331</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =head3 single, simple plot </td> </tr> <tr> <td class="h" > <a name="4332">4332</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="4333">4333</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> plt({ </td> </tr> <tr> <td class="h" > <a name="4334">4334</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'output.file' => 'output.images/single.violinplot.png', </td> </tr> <tr> <td class="h" > <a name="4335">4335</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> data => { # simple hash </td> </tr> <tr> <td class="h" > <a name="4336">4336</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> A => [ 55, @{$z} ], </td> </tr> <tr> <td class="h" > <a name="4337">4337</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> E => [ @{$y} ], </td> </tr> <tr> <td class="h" > <a name="4338">4338</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> B => [ 122, @{$z} ], </td> </tr> <tr> <td class="h" > <a name="4339">4339</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="4340">4340</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'plot.type' => 'violinplot', </td> </tr> <tr> <td class="h" > <a name="4341">4341</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> title => 'Single Violin Plot: Specified Colors', </td> </tr> <tr> <td class="h" > <a name="4342">4342</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> colors => { E => 'yellow', B => 'purple', A => 'green' }, </td> </tr> <tr> <td class="h" > <a name="4343">4343</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> fh => $fh, </td> </tr> <tr> <td class="h" > <a name="4344">4344</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> execute => 0, </td> </tr> <tr> <td class="h" > <a name="4345">4345</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }); </td> </tr> <tr> <td class="h" > <a name="4346">4346</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="4347">4347</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> which makes: </td> </tr> <tr> <td class="h" > <a name="4348">4348</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="4349">4349</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="4350">4350</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =for html </td> </tr> <tr> <td class="h" > <a name="4351">4351</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <p> </td> </tr> <tr> <td class="h" > <a name="4352">4352</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <img width="651" height="491" alt="single violinplot" src="https://github.com/user-attachments/assets/989650fd-c947-45b0-91c8-c7f71c075cf3" /> </td> </tr> <tr> <td class="h" > <a name="4353">4353</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <p> </td> </tr> <tr> <td class="h" > <a name="4354">4354</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="4355">4355</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="4356">4356</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =head3 multiple plots </td> </tr> <tr> <td class="h" > <a name="4357">4357</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="4358">4358</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> plt({ </td> </tr> <tr> <td class="h" > <a name="4359">4359</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> fh => $fh, </td> </tr> <tr> <td class="h" > <a name="4360">4360</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> execute => 0, </td> </tr> <tr> <td class="h" > <a name="4361">4361</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'output.file' => 'output.images/violin.png', </td> </tr> <tr> <td class="h" > <a name="4362">4362</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> plots => [ </td> </tr> <tr> <td class="h" > <a name="4363">4363</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> { </td> </tr> <tr> <td class="h" > <a name="4364">4364</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> data => { </td> </tr> <tr> <td class="h" > <a name="4365">4365</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> E => @e, </td> </tr> <tr> <td class="h" > <a name="4366">4366</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> B => @b </td> </tr> <tr> <td class="h" > <a name="4367">4367</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="4368">4368</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'plot.type' => 'violinplot', </td> </tr> <tr> <td class="h" > <a name="4369">4369</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> title => 'Basic', </td> </tr> <tr> <td class="h" > <a name="4370">4370</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> xlabel => 'xlabel', </td> </tr> <tr> <td class="h" > <a name="4371">4371</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> set_figwidth => 12, </td> </tr> <tr> <td class="h" > <a name="4372">4372</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> suptitle => 'Violinplot' </td> </tr> <tr> <td class="h" > <a name="4373">4373</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="4374">4374</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> { </td> </tr> <tr> <td class="h" > <a name="4375">4375</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> data => { </td> </tr> <tr> <td class="h" > <a name="4376">4376</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> E => @e, </td> </tr> <tr> <td class="h" > <a name="4377">4377</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> B => @b </td> </tr> <tr> <td class="h" > <a name="4378">4378</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="4379">4379</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'plot.type' => 'violinplot', </td> </tr> <tr> <td class="h" > <a name="4380">4380</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> color => 'red', </td> </tr> <tr> <td class="h" > <a name="4381">4381</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> title => 'Set Same Color for All', </td> </tr> <tr> <td class="h" > <a name="4382">4382</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="4383">4383</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> { </td> </tr> <tr> <td class="h" > <a name="4384">4384</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> data => { </td> </tr> <tr> <td class="h" > <a name="4385">4385</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> E => @e, </td> </tr> <tr> <td class="h" > <a name="4386">4386</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> B => @b </td> </tr> <tr> <td class="h" > <a name="4387">4387</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="4388">4388</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'plot.type' => 'violinplot', </td> </tr> <tr> <td class="h" > <a name="4389">4389</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> colors => { </td> </tr> <tr> <td class="h" > <a name="4390">4390</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> E => 'yellow', </td> </tr> <tr> <td class="h" > <a name="4391">4391</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> B => 'black' </td> </tr> <tr> <td class="h" > <a name="4392">4392</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="4393">4393</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> title => 'Color by Key', </td> </tr> <tr> <td class="h" > <a name="4394">4394</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="4395">4395</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> { </td> </tr> <tr> <td class="h" > <a name="4396">4396</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> data => { </td> </tr> <tr> <td class="h" > <a name="4397">4397</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> E => @e, </td> </tr> <tr> <td class="h" > <a name="4398">4398</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> B => @b </td> </tr> <tr> <td class="h" > <a name="4399">4399</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="4400">4400</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> orientation => 'horizontal', </td> </tr> <tr> <td class="h" > <a name="4401">4401</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'plot.type' => 'violinplot', </td> </tr> <tr> <td class="h" > <a name="4402">4402</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> colors => { </td> </tr> <tr> <td class="h" > <a name="4403">4403</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> E => 'yellow', </td> </tr> <tr> <td class="h" > <a name="4404">4404</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> B => 'black' </td> </tr> <tr> <td class="h" > <a name="4405">4405</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="4406">4406</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> title => 'Horizontal orientation', </td> </tr> <tr> <td class="h" > <a name="4407">4407</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="4408">4408</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> { </td> </tr> <tr> <td class="h" > <a name="4409">4409</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> data => { </td> </tr> <tr> <td class="h" > <a name="4410">4410</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> E => @e, </td> </tr> <tr> <td class="h" > <a name="4411">4411</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> B => @b </td> </tr> <tr> <td class="h" > <a name="4412">4412</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="4413">4413</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> whiskers => 0, </td> </tr> <tr> <td class="h" > <a name="4414">4414</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'plot.type' => 'violinplot', </td> </tr> <tr> <td class="h" > <a name="4415">4415</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> colors => { </td> </tr> <tr> <td class="h" > <a name="4416">4416</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> E => 'yellow', </td> </tr> <tr> <td class="h" > <a name="4417">4417</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> B => 'black' </td> </tr> <tr> <td class="h" > <a name="4418">4418</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="4419">4419</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> title => 'Whiskers off', </td> </tr> <tr> <td class="h" > <a name="4420">4420</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="4421">4421</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ], </td> </tr> <tr> <td class="h" > <a name="4422">4422</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ncols => 3, </td> </tr> <tr> <td class="h" > <a name="4423">4423</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> nrows => 2, </td> </tr> <tr> <td class="h" > <a name="4424">4424</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }); </td> </tr> <tr> <td class="h" > <a name="4425">4425</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="4426">4426</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="4427">4427</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =for html </td> </tr> <tr> <td class="h" > <a name="4428">4428</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <p> </td> </tr> <tr> <td class="h" > <a name="4429">4429</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <img width="1211" height="491" alt="violin" src="https://github.com/user-attachments/assets/248df5e4-fd57-45d6-96da-956af0a7dbfb" /> </td> </tr> <tr> <td class="h" > <a name="4430">4430</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <p> </td> </tr> <tr> <td class="h" > <a name="4431">4431</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="4432">4432</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="4433">4433</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =head2 wide </td> </tr> <tr> <td class="h" > <a name="4434">4434</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="4435">4435</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =head3 options </td> </tr> <tr> <td class="h" > <a name="4436">4436</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="4437">4437</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =head3 single, simple plot </td> </tr> <tr> <td class="h" > <a name="4438">4438</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="4439">4439</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =head3 multiple plots </td> </tr> <tr> <td class="h" > <a name="4440">4440</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="4441">4441</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =head1 Advanced </td> </tr> <tr> <td class="h" > <a name="4442">4442</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="4443">4443</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =head2 Notes in Files </td> </tr> <tr> <td class="h" > <a name="4444">4444</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="4445">4445</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> all files that can have notes with them, give notes about how the file was written. For example, SVG files have the following: </td> </tr> <tr> <td class="h" > <a name="4446">4446</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="4447">4447</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> <dc:title>made/written by /mnt/ceph/dcondon/ui/gromacs/tut/dup.2puy/1.plot.gromacs.pl called using "plot" in /mnt/ceph/dcondon/perl5/perlbrew/perls/perl-5.42.0/lib/site_perl/5.42.0/x86_64-linux/Matplotlib/Simple.pm</dc:title>` </td> </tr> <tr> <td class="h" > <a name="4448">4448</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="4449">4449</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =head2 Speed </td> </tr> <tr> <td class="h" > <a name="4450">4450</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="4451">4451</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> To improve speed, all data can be written into a single temp python3 file thus: </td> </tr> <tr> <td class="h" > <a name="4452">4452</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="4453">4453</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> use File::Temp; </td> </tr> <tr> <td class="h" > <a name="4454">4454</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> my $fh = File::Temp->new( DIR => '/tmp', SUFFIX => '.py', UNLINK => 0 ); </td> </tr> <tr> <td class="h" > <a name="4455">4455</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="4456">4456</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> all files will be written to C<< $fh-E<gt>filename >>; be sure to put C<< execute =E<gt> 0 >> unless you want the file to be run, which is the last step. </td> </tr> <tr> <td class="h" > <a name="4457">4457</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="4458">4458</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> plt({ </td> </tr> <tr> <td class="h" > <a name="4459">4459</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> data => { </td> </tr> <tr> <td class="h" > <a name="4460">4460</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Clinical => [ </td> </tr> <tr> <td class="h" > <a name="4461">4461</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> [ </td> </tr> <tr> <td class="h" > <a name="4462">4462</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> [@xw], # x </td> </tr> <tr> <td class="h" > <a name="4463">4463</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> [@y] # y </td> </tr> <tr> <td class="h" > <a name="4464">4464</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ], </td> </tr> <tr> <td class="h" > <a name="4465">4465</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> [ [@xw], [ map { $_ + rand_between( -0.5, 0.5 ) } @y ] ], </td> </tr> <tr> <td class="h" > <a name="4466">4466</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> [ [@xw], [ map { $_ + rand_between( -0.5, 0.5 ) } @y ] ] </td> </tr> <tr> <td class="h" > <a name="4467">4467</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ], </td> </tr> <tr> <td class="h" > <a name="4468">4468</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> HGI => [ </td> </tr> <tr> <td class="h" > <a name="4469">4469</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> [ </td> </tr> <tr> <td class="h" > <a name="4470">4470</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> [@xw], # x </td> </tr> <tr> <td class="h" > <a name="4471">4471</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> [ map { 1.9 - 1.1 / $_ } @xw ] # y </td> </tr> <tr> <td class="h" > <a name="4472">4472</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ], </td> </tr> <tr> <td class="h" > <a name="4473">4473</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> [ [@xw], [ map { $_ + rand_between( -0.5, 0.5 ) } @y ] ], </td> </tr> <tr> <td class="h" > <a name="4474">4474</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> [ [@xw], [ map { $_ + rand_between( -0.5, 0.5 ) } @y ] ] </td> </tr> <tr> <td class="h" > <a name="4475">4475</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ] </td> </tr> <tr> <td class="h" > <a name="4476">4476</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="4477">4477</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'output.file' => 'output.images/single.wide.png', </td> </tr> <tr> <td class="h" > <a name="4478">4478</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'plot.type' => 'wide', </td> </tr> <tr> <td class="h" > <a name="4479">4479</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> color => { </td> </tr> <tr> <td class="h" > <a name="4480">4480</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Clinical => 'blue', </td> </tr> <tr> <td class="h" > <a name="4481">4481</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> HGI => 'green' </td> </tr> <tr> <td class="h" > <a name="4482">4482</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="4483">4483</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> title => 'Visualization of similar lines plotted together', </td> </tr> <tr> <td class="h" > <a name="4484">4484</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> fh => $fh, </td> </tr> <tr> <td class="h" > <a name="4485">4485</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> execute => 0, </td> </tr> <tr> <td class="h" > <a name="4486">4486</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }); </td> </tr> <tr> <td class="h" > <a name="4487">4487</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # the last plot should have C<< execute =E<gt> 1 >> </td> </tr> <tr> <td class="h" > <a name="4488">4488</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> plt({ </td> </tr> <tr> <td class="h" > <a name="4489">4489</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> data => [ </td> </tr> <tr> <td class="h" > <a name="4490">4490</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> [ </td> </tr> <tr> <td class="h" > <a name="4491">4491</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> [@xw], # x </td> </tr> <tr> <td class="h" > <a name="4492">4492</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> [@y] # y </td> </tr> <tr> <td class="h" > <a name="4493">4493</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ], </td> </tr> <tr> <td class="h" > <a name="4494">4494</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> [ [@xw], [ map { $_ + rand_between( -0.5, 0.5 ) } @y ] ], </td> </tr> <tr> <td class="h" > <a name="4495">4495</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> [ [@xw], [ map { $_ + rand_between( -0.5, 0.5 ) } @y ] ] </td> </tr> <tr> <td class="h" > <a name="4496">4496</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ], </td> </tr> <tr> <td class="h" > <a name="4497">4497</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'output.file' => 'output.images/single.array.png', </td> </tr> <tr> <td class="h" > <a name="4498">4498</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'plot.type' => 'wide', </td> </tr> <tr> <td class="h" > <a name="4499">4499</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> color => 'red', </td> </tr> <tr> <td class="h" > <a name="4500">4500</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> title => 'Visualization of similar lines plotted together', </td> </tr> <tr> <td class="h" > <a name="4501">4501</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> fh => $fh, </td> </tr> <tr> <td class="h" > <a name="4502">4502</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> execute => 1, </td> </tr> <tr> <td class="h" > <a name="4503">4503</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }); </td> </tr> </table> </body> </html>