File Coverage

blib/lib/Matplotlib/Simple.pm
Criterion Covered Total %
statement 57 1827 3.1
branch 0 550 0.0
condition 0 274 0.0
subroutine 19 38 50.0
pod 0 17 0.0
total 76 2706 2.8


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

2406             gospel word counts
2407            

2408              
2409              
2410             =head1 Multiple Plots
2411              
2412             Having a C argument as an array lets the module know to create subplots:
2413              
2414             use Matplotlib::Simple 'plt';
2415             plt({
2416             'output.file' => 'svg/pies.png',
2417             plots => [
2418             {
2419             data => {
2420             Russian => 106_000_000, # Primarily European Russia
2421             German => 95_000_000, # Germany, Austria, Switzerland, etc.
2422             },
2423             'plot.type' => 'pie',
2424             title => 'Top Languages in Europe',
2425             suptitle => 'Pie in subplots',
2426             },
2427             {
2428             data => {
2429             Russian => 106_000_000, # Primarily European Russia
2430             German => 95_000_000, # Germany, Austria, Switzerland, etc.
2431             },
2432             'plot.type' => 'pie',
2433             title => 'Top Languages in Europe',
2434             },
2435             ],
2436             ncols => 2,
2437             });
2438              
2439             which produces the following subplots image:
2440              
2441              
2442             =for html
2443            

2444             pies
2445            

2446              
2447              
2448             C, C, C, C, C, C, C, C, C, C, and C all match the methods in matplotlib itself.
2449              
2450             =head2 Options
2451              
2452             C and C are both implemented at the plot, rather than subplot, level. See Matplotlib's documentation for more clarity.
2453              
2454             =head1 Color Bars (colorbars)
2455              
2456             Colarbar args attempt to match matplotlib closely
2457              
2458             =for html
2459            
2460            
2461            
OptionDescriptionExample
2462            
----------------------
2463            
cbdrawedgesWhether to draw lines at color boundariescbdrawedges => 1
2464            
cblabelThe label on the colorbar's long axiscblabel => 1
2465            
cblocationof the colorbar None or {'left', 'right', 'top', 'bottom'}
2466            
cborientation# None or {vertical, horizontal}
2467            
cbpadpad : float, default: 0.05 if vertical, 0.15 if horizontal; Fraction of original Axes between colorbar and new image Axes
2468            
cb_logscalePerl true (anything but 0) or false (0)
2469            
shared.colorbarshare colorbar between different plots: specify plot indices'shared.colorbar' => [0,1]
2470            
2471            
2472              
2473             =head1 Size/Dimensions of output file
2474              
2475             =for html
2476            
2477            
2478            
OptionDescriptionExample
2479            
----------------------
2480            
scalescale/multiply the size of the output figurescale => 2.4
2481            
scalexscale/multiply the x-axis onlyscalex => 2.4
2482            
scaleyscale/multiply the y-axis onlyscalex => 1.4
2483            
2484            
2485              
2486             =head1 Examples/Plot Types
2487              
2488             Consider the following helper subroutines to generate data to plot:
2489              
2490             sub linspace { # mostly written by Grok
2491             my ($start, $stop, $num, $endpoint) = @_; # endpoint means include $stop
2492             $num = defined $num ? int($num) : 50; # Default to 50 points
2493             $endpoint = defined $endpoint ? $endpoint : 1; # Default to include endpoint
2494             return () if $num < 0; # Return empty array for invalid num
2495             return ($start) if $num == 1; # Return single value if num is 1
2496             my (@result, $step);
2497            
2498             if ($endpoint) {
2499             $step = ($stop - $start) / ($num - 1) if $num > 1;
2500             for my $i (0 .. $num - 1) {
2501             $result[$i] = $start + $i * $step;
2502             }
2503             } else {
2504             $step = ($stop - $start) / $num;
2505             for my $i (0 .. $num - 1) {
2506             $result[$i] = $start + $i * $step;
2507             }
2508             }
2509             return @result;
2510             }
2511            
2512             sub generate_normal_dist {
2513             my ($mean, $std_dev, $size) = @_;
2514             $size = defined $size ? int $size : 100; # default to 100 points
2515             my @numbers;
2516             for (1 .. int($size / 2) + 1) {# Box-Muller transform
2517             my $u1 = rand();
2518             my $u2 = rand();
2519             my $z0 = sqrt(-2.0 * log($u1)) * cos(2.0 * 3.141592653589793 * $u2);
2520             my $z1 = sqrt(-2.0 * log($u1)) * sin(2.0 * 3.141592653589793 * $u2); # Scale and shift to match mean and std_dev
2521             push @numbers, ($z0 * $std_dev + $mean, $z1 * $std_dev + $mean);
2522             } # Trim to exact size if needed
2523             @numbers = @numbers[0 .. $size - 1] if @numbers > $size;
2524             @numbers = map {sprintf '%.1f', $_} @numbers;
2525             return \@numbers;
2526             }
2527             sub rand_between {
2528             my ($min, $max) = @_;
2529             return $min + rand($max - $min)
2530             }
2531              
2532             =head2 Barplot/bar/barh
2533              
2534             Plot a hash or a hash of arrays as a boxplot
2535              
2536             =head3 Options
2537              
2538             =for html
2539            
2540            
2541            
OptionDescriptionExample
2542            
----------------------
2543            
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'}
2544            
edgecolor:mpltype:color or list of :mpltype:color, optional; The colors of the bar edgesedgecolor => 'black'
2545            
key.orderdefine the keys in an order (an array reference)'key.order' => ['Sun','Mon','Tue','Wed','Thu','Fri','Sat'],
2546            
linewidthfloat or array, optional; Width of the bar edge(s). If 0, don't draw edges. Only does anything with defined edgecolorlinewidth => 2,
2547            
logbool, default: False; If *True*, set the y-axis to be log scale.log = 'True',
2548            
stackedstack the groups on top of one another; default 0 = offstacked => 1,
2549            
widthfloat only, default: 0.8; The width(s) of the bars. width will be deactivated with grouped, non-stacked bar plotswidth => 0.4,
2550            
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],}
2551            
yerrsame as xerr, but better with bar
2552            
2553            
2554              
2555             an example of multiple plots, showing many options:
2556              
2557             =head3 single, simple plot
2558              
2559             use Matplotlib::Simple 'plt';
2560             plt({
2561             'output.file' => 'output.images/single.barplot.png',
2562             data => { # simple hash
2563             Fri => 76, Mon => 73, Sat => 26, Sun => 11, Thu => 94, Tue => 93, Wed => 77
2564             },
2565             'plot.type' => 'bar',
2566             xlabel => '# of Days',
2567             ylabel => 'Count',
2568             title => 'Customer Calls by Days'
2569             });
2570              
2571             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="2572">2572</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2573">2573</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="2574">2574</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="2575">2575</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="2576">2576</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="2577">2577</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2578">2578</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2579">2579</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="2580">2580</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="2581">2581</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="2582">2582</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="2583">2583</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="2584">2584</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="2585">2585</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="2586">2586</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="2587">2587</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="2588">2588</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="2589">2589</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="2590">2590</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="2591">2591</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="2592">2592</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="2593">2593</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="2594">2594</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="2595">2595</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="2596">2596</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="2597">2597</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="2598">2598</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="2599">2599</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="2600">2600</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="2601">2601</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="2602">2602</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="2603">2603</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="2604">2604</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="2605">2605</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="2606">2606</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="2607">2607</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="2608">2608</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="2609">2609</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="2610">2610</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="2611">2611</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="2612">2612</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="2613">2613</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="2614">2614</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="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"> 1943 => { </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"> UK => 7.9, </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"> US => 61.4, </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"> USSR => 22.5, </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"> Germany => 34.9 </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"> 1944 => { </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"> UK => 7.4, </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"> US => 80.5, </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"> USSR => 27.0, </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"> Germany => 31.4 </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"> }, </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"> 1945 => { </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"> UK => 5.4, </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"> US => 83.1, </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"> USSR => 25.5, </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"> Germany => 11.2 #Rapid decrease due to war's end <br /> </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"> }, </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"> }, </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"> stacked => 0, </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"> title => 'Hash of Hash Grouped Unstacked Barplot', </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"> width => 0.23, </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"> xlabel => 'r"$\it{anno}$ $\it{domini}$"', # italic </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"> ylabel => 'Military Expenditure (Billions of $)' </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"> }, </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"> { # grouped bar plot </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"> 'plot.type' => 'bar', </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"> data => { </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"> 1941 => { </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"> UK => 6.6, </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"> US => 6.2, </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"> USSR => 17.8, </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"> Germany => 26.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"> }, </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"> 1942 => { </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"> UK => 7.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"> US => 26.4, </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"> USSR => 19.2, </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"> Germany => 29.7 </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"> }, </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"> 1943 => { </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"> UK => 7.9, </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"> US => 61.4, </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"> USSR => 22.5, </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"> Germany => 34.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"> }, </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"> 1944 => { </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"> UK => 7.4, </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"> US => 80.5, </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"> USSR => 27.0, </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"> Germany => 31.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"> }, </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"> 1945 => { </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"> UK => 5.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"> US => 83.1, </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"> USSR => 25.5, </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"> Germany => 11.2 #Rapid decrease due to war's end </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"> }, </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"> }, </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"> stacked => 1, </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"> title => 'Hash of Hash Grouped Stacked Barplot', </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"> xlabel => 'r"$\it{anno}$ $\it{domini}$"', # italic </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"> ylabel => 'Military Expenditure (Billions of $)' </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"> }, </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"> {# grouped barplot: arrays indicate Union, Confederate which must be specified in options hash </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"> data => { # 4th plot: arrays indicate Union, Confederate which must be specified in options hash </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"> 'Antietam' => [ 12400, 10300 ], </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"> 'Gettysburg' => [ 23000, 28000 ], </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"> 'Chickamauga' => [ 16000, 18000 ], </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"> 'Chancellorsville' => [ 17000, 13000 ], </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"> 'Wilderness' => [ 17500, 11000 ], </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"> 'Spotsylvania' => [ 18000, 12000 ], </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"> 'Cold Harbor' => [ 12000, 5000 ], </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"> 'Shiloh' => [ 13000, 10700 ], </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"> 'Second Bull Run' => [ 10000, 8000 ], </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"> 'Fredericksburg' => [ 12600, 5300 ], </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"> 'plot.type' => 'barh', </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"> color => ['blue', 'gray'], # colors match indices of data arrays </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"> label => ['North', 'South'], # colors match indices of data arrays </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"> xlabel => 'Casualties', </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"> ylabel => 'Battle', </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"> title => 'barh: hash of array' </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"> }, </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"> { # 5th plot: barplot with groups </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"> data => { </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"> 1942 => [ 109867, 310000, 7700000 ], # US, Japan, USSR </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"> 1943 => [ 221111, 440000, 9000000 ], </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"> 1944 => [ 318584, 610000, 7000000 ], </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"> 1945 => [ 318929, 1060000, 3000000 ], </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"> }, </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"> color => ['blue', 'pink', 'red'], # colors match indices of data arrays </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"> label => ['USA', 'Japan', 'USSR'], # colors match indices of data arrays </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"> 'log' => 1, </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"> title => 'grouped bar: Casualties in WWII', </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"> ylabel => 'Casualties', </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"> 'plot.type' => 'bar' </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"> }, <br /> </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"> { # nuclear weapons barplot </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"> 'plot.type' => 'bar', </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"> data => { </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"> 'USA' => 5277, # FAS Estimate </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"> 'Russia' => 5449, # FAS Estimate </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"> 'UK' => 225, # Consistent estimate </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"> 'France' => 290, # Consistent estimate </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"> 'China' => 600, # FAS Estimate </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"> 'India' => 180, # FAS Estimate </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"> 'Pakistan' => 130, # FAS Estimate </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"> 'Israel' => 90, # FAS Estimate </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"> 'North Korea' => 50, # FAS Estimate </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"> }, </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"> title => 'Simple hash for barchart with yerr', </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"> xlabel => 'Country', </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"> yerr => { </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"> 'USA' => [15,29], </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"> 'Russia' => [199,1000], </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"> 'UK' => [15,19], </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"> 'France' => [19,29], </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"> 'China' => [200,159], </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"> 'India' => [15,25], </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"> 'Pakistan' => [15,49], </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"> 'Israel' => [90,50], </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"> 'North Korea' => [10,20], </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"> }, </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 => '# of Nuclear Warheads', </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"> 'log' => 'True', # linewidth => 1, </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"> ], </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"> ncols => 3, </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"> nrows => 4 </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"> }); </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">   </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"> which produces the plot: </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">   </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"> =for html </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"> <p> </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"> <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="2754">2754</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="2755">2755</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </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">   </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"> =head3 colors for each hash key defined by hash </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">   </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"> plt({ </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"> plots => [ </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"> { </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"> color => { </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"> A => 'red', B => 'green', C => 'blue' </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"> }, </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"> data => { </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"> A => 1, B => 2, C => 3 </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"> }, </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"> 'plot.type' => 'bar' </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"> { </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"> color => { </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"> A => 'red', B => 'green', C => 'blue' </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"> }, </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"> data => { </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"> A => 1, B => 2, C => 3 </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"> }, </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"> 'plot.type' => 'barh' </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"> }, </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"> ], </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"> ncols => 2, </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"> 'output.file' => '/tmp/key.colors.bar.svg', </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">   </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"> which produces the plot </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"> =for html </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"> <p> </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"> <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="2790">2790</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="2791">2791</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </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"> =head2 boxplot </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">   </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"> Plot a hash of arrays as a series of boxplots </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">   </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"> =head3 options </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"> =for html </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"> <table> </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"> <tbody> </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"> <tr><td>Option</td><td>Description</td><td>Example</td></tr> </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"> <tr><td>--------</td><td>-------</td><td>-------</td></tr> </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"> <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="2805">2805</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="2806">2806</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="2807">2807</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="2808">2808</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="2809">2809</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="2810">2810</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="2811">2811</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="2812">2812</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="2813">2813</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="2814">2814</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </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"> =head3 single, simple plot </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"> my $x = generate_normal_dist( 100, 15, 3 * 10 ); </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"> my $y = generate_normal_dist( 85, 15, 3 * 10 ); </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"> my $z = generate_normal_dist( 106, 15, 3 * 10 ); </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">   </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"> single plots are simple </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"> use Matplotlib::Simple 'barplot'; </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"> boxplot({ </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"> 'output.file' => 'output.images/single.boxplot.png', </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"> data => { # simple hash </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"> E => [ 55, @{$x}, 160 ], </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"> B => [ @{$y}, 140 ], </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"> # A => @a </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"> }, </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"> title => 'Single Box Plot: Specified Colors', </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"> colors => { E => 'yellow', B => 'purple' }, </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"> fh => $fh, </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"> execute => 0, </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"> }); </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"> which makes the following image: </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">   </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"> =for html </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"> <p> </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"> <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="2844">2844</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="2845">2845</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </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">   </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"> =head3 multiple plots </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">   </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"> plt({ </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"> 'output.file' => 'output.images/boxplot.png', </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"> execute => 0, </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"> fh => $fh, </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"> plots => [ </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"> { </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"> data => { </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"> A => [ 55, @{$z} ], </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"> E => [ @{$y} ], </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"> B => [ 122, @{$z} ], </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"> title => 'Simple Boxplot', </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"> ylabel => 'ylabel', </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"> xlabel => 'label', </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"> 'plot.type' => 'boxplot', </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"> suptitle => 'Boxplot examples' </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"> { </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"> color => 'pink', </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"> data => { </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"> A => [ 55, @{$z} ], </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 => [ @{$y} ], </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 => [ 122, @{$z} ], </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"> title => 'Specify single color', </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"> ylabel => 'ylabel', </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"> xlabel => 'label', </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"> 'plot.type' => 'boxplot' </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"> }, </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"> { </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"> colors => { </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"> A => 'orange', </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"> E => 'yellow', </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"> B => 'purple' </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"> data => { </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"> A => [ 55, @{$z} ], </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"> E => [ @{$y} ], </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"> B => [ 122, @{$z} ], </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"> title => 'Specify set-specific color; showfliers = False', </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"> ylabel => 'ylabel', </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"> xlabel => 'label', </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"> 'plot.type' => 'boxplot', </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"> showmeans => 'True', </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"> showfliers => 'False', </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"> set_figwidth => 12 </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"> }, </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"> colors => { </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 => 'orange', </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 => 'yellow', </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 => 'purple' </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"> data => { </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"> A => [ 55, @{$z} ], </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"> E => [ @{$y} ], </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"> B => [ 122, @{$z} ], </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"> }, </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"> title => 'Specify set-specific color; showmeans = False', </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"> ylabel => 'ylabel', </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"> xlabel => 'label', </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"> 'plot.type' => 'boxplot', </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"> showmeans => 'False', </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"> }, </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"> { </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"> colors => { </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"> A => 'orange', </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"> E => 'yellow', </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"> B => 'purple' </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"> }, </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"> data => { </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"> A => [ 55, @{$z} ], </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"> E => [ @{$y} ], </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"> B => [ 122, @{$z} ], </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"> }, </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"> title => 'Set-specific color; orientation = horizontal', </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"> ylabel => 'ylabel', </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"> xlabel => 'label', </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"> orientation => 'horizontal', </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"> 'plot.type' => 'boxplot', </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"> }, </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"> colors => { </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"> A => 'orange', </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"> E => 'yellow', </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"> B => 'purple' </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"> }, </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"> data => { </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"> A => [ 55, @{$z} ], </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"> E => [ @{$y} ], </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"> B => [ 122, @{$z} ], </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"> }, </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"> title => 'Notch = True', </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"> ylabel => 'ylabel', </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"> xlabel => 'label', </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"> notch => 'True', </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"> 'plot.type' => 'boxplot', </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"> }, </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"> { </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"> colors => { </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"> A => 'orange', </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"> E => 'yellow', </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"> B => 'purple' </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"> }, </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"> data => { </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"> A => [ 55, @{$z} ], </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"> E => [ @{$y} ], </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"> B => [ 122, @{$z} ], </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"> }, </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"> title => 'showcaps = False', </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"> ylabel => 'ylabel', </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"> xlabel => 'label', </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"> showcaps => 'False', </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"> 'plot.type' => 'boxplot', </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"> set_figheight => 12, </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"> }, </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"> ], </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"> ncols => 3, </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"> nrows => 3, </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"> }); </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">   </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"> which makes the following plot: </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">   </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"> =for html </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"> <p> </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"> <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="2977">2977</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="2978">2978</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </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"> =head2 Colored Table </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">   </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"> =head3 options </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">   </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"> =head3 Single, simple plot </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">   </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"> the bond dissociation energy table can be plotted: </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">   </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"> # 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="2989">2989</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="2990">2990</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="2991">2991</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="2992">2992</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </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"> C => { </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"> Br => 276, C => 347, Cl => 339, F => 485, H => 413, I => 240, </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"> N => 305, O => 358, S => 259 </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"> Cl => { </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"> Br => 218, Cl => 239 </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"> }, </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"> F => { </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"> I => 280, Br => 237, Cl => 253, F => 154 </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"> }, </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"> H => { </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"> Br => 363, Cl => 427, F => 565, H => 432, I => 295 </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"> }, </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"> I => { </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"> Br => 175, Cl => 208, I => 149 </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"> N => { </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"> Br => 243, Cl => 200, F => 272, H => 391, N => 160, O => 201 </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"> }, </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"> O => { </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"> Cl => 203, F => 190, H => 467, I => 234, O => 146 </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"> }, </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"> 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"> Br => 218, Cl => 253, F => 327, H => 347, S => 266 </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"> }, </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"> Si => { </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"> C => 360, H => 393, O => 452, Si => 340 </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"> } </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"> and the plot itself: </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"> colored_table({ </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"> 'cblabel' => 'kJ/mol', </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"> 'col.labels' => ['H', 'F', 'Cl', 'Br', 'I'], </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"> data => \%bond_dissociation, </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"> execute => 0, </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"> fh => $fh, </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"> mirror => 1, </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"> 'output.file' => 'output.images/single.tab.png', </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"> 'row.labels' => ['H', 'F', 'Cl', 'Br', 'I'], </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"> 'show.numbers'=> 1, </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"> set_title => 'Bond Dissociation Energy' </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"> }); </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">   </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"> which makes the following image: </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">   </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"> =for html </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"> <p> </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"> <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="3044">3044</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="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">   </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"> =head3 Multiple Plots </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"> plt({ </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"> 'output.file' => 'output.images/tab.multiple.png', </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"> execute => 0, </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"> fh => $fh, </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"> plots => [ </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"> data => \%bond_dissociation, </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"> 'output.file' => '/tmp/single.bonds.svg', </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"> 'plot.type' => 'colored_table', </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"> set_title => 'No other options' </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"> }, </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"> data => \%bond_dissociation, </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"> cblabel => 'Average Dissociation Energy (kJ/mol)', </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"> 'col.labels' => ['H', 'C', 'N', 'O', 'F', 'Si', 'S', 'Cl', 'Br', 'I'], </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"> mirror => 1, </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"> 'output.file' => '/tmp/single.bonds.svg', </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"> 'plot.type' => 'colored_table', </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"> 'row.labels' => ['H', 'C', 'N', 'O', 'F', 'Si', 'S', 'Cl', 'Br', 'I'], </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"> 'show.numbers'=> 1, </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"> set_title => 'Showing numbers and mirror with defined order' </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"> }, </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"> { </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"> data => \%bond_dissociation, </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"> cblabel => 'Average Dissociation Energy (kJ/mol)', </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"> 'col.labels' => ['H', 'C', 'N', 'O', 'F', 'Si', 'S', 'Cl', 'Br', 'I'], </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"> mirror => 1, </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"> 'output.file' => '/tmp/single.bonds.svg', </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"> 'plot.type' => 'colored_table', </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"> 'row.labels' => ['H', 'C', 'N', 'O', 'F', 'Si', 'S', 'Cl', 'Br', 'I'], </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"> 'show.numbers'=> 1, </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"> set_title => 'Set undefined color to white', </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"> 'undef.color' => 'white' </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"> ncols => 3, </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"> set_figwidth => 14, </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"> suptitle => 'Colored Table options' </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"> }); </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"> which makes the following plot: </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">   </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"> =for html </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"> <p> </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"> <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="3095">3095</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="3096">3096</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </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"> =head2 hexbin </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">   </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 a hash of arrays as a hexbin </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"> see https://matplotlib.org/stable/api/I<as>gen/matplotlib.pyplot.hexbin.html </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"> =head3 options </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">   </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"> =for html </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"> <table> </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"> <tbody> </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"> <tr><td>Option</td><td>Description</td><td>Example</td></tr> </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"> <tr><td>--------</td><td>-------</td><td>------- </td></tr> </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"> <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="3111">3111</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="3112">3112</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="3113">3113</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="3114">3114</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="3115">3115</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="3116">3116</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="3117">3117</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="3118">3118</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="3119">3119</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="3120">3120</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="3121">3121</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="3122">3122</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="3123">3123</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </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"> =head3 single, simple plot </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"> plt({ </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"> data => { </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"> E => generate_normal_dist(100, 15, 3*210), </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"> B => generate_normal_dist(85, 15, 3*210) </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"> 'output.file' => 'output.images/single.hexbin.png', </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"> 'plot.type' => 'hexbin', </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"> set_figwidth => 12, </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"> title => 'Simple Hexbin', </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"> }); </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">   </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"> which makes the following plot: </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">   </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"> =for html </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"> <p> </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"> <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="3142">3142</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="3143">3143</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </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"> =head3 multiple plots </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"> plt({ </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"> fh => $fh, </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"> execute => 0, </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"> 'output.file' => 'output.images/hexbin.png', </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"> plots => [ </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"> { </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"> data => { </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"> E => @e, </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"> B => @b </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"> }, </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"> 'plot.type' => 'hexbin', </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"> title => 'Simple Hexbin', </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"> }, </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"> { </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"> data => { </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"> E => @e, </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"> B => @b </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"> }, </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"> 'plot.type' => 'hexbin', </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"> title => 'colorbar logscale', </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"> cb_logscale => 1 </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"> }, </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"> cmap => 'jet', </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 => @e, </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 => @b </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"> 'plot.type' => 'hexbin', </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"> title => 'cmap is jet', </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"> xlabel => 'xlabel', </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"> }, </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"> data => { </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"> E => @e, </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"> B => @b </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"> }, </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"> 'key.order' => ['E', 'B'], </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"> 'plot.type' => 'hexbin', </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"> title => 'Switch axes with key.order', </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"> { </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"> data => { </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"> E => @e, </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"> B => @b </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"> }, </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"> 'plot.type' => 'hexbin', </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"> title => 'vmax set to 25', </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"> vmax => 25 </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"> }, </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"> { </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"> data => { </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"> E => @e, </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"> B => @b </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"> }, </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"> 'plot.type' => 'hexbin', </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"> title => 'vmin set to -4', </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"> vmin => -4 </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"> }, </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"> { </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"> data => { </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"> E => @e, </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"> B => @b </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"> }, </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"> 'plot.type' => 'hexbin', </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"> title => 'mincnt set to 7', </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"> mincnt => 7 </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"> }, </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"> { </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"> data => { </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"> E => @e, </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"> B => @b </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"> }, </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"> 'plot.type' => 'hexbin', </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"> title => 'xbins set to 9', </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"> xbins => 9 </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"> }, </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"> { </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"> data => { </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"> E => @e, </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"> B => @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"> }, </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"> 'plot.type' => 'hexbin', </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"> title => 'ybins set to 9', </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"> ybins => 9 </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"> }, </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"> { </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"> data => { </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"> E => @e, </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"> B => @b </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"> }, </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"> 'plot.type' => 'hexbin', </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"> title => 'marginals = 1', </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"> marginals => 1 </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"> }, </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"> { </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"> data => { </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"> E => @e, </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"> B => @b </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"> }, </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"> 'plot.type' => 'hexbin', </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"> title => 'xscale.hexbin = 1', </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"> 'xscale.hexbin' => 'log' </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"> }, </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"> { </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"> data => { </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"> E => @e, </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"> B => @b </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"> }, </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"> 'plot.type' => 'hexbin', </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"> title => 'yscale.hexbin = 1', </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"> 'yscale.hexbin' => 'log' </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"> }, </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"> ], </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"> ncols => 4, </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"> nrows => 3, </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"> scale => 5, </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"> suptitle => 'Various Changes to Standard Hexbin: All data is the same' </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"> }); </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"> which produces the following image: </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">   </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"> =for html </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"> <p> </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"> <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="3271">3271</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="3272">3272</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </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">   </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"> =head2 hist </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"> Plot a hash of arrays as a series of histograms </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">   </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"> =head3 options </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"> =for html </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"> <table> </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"> <tbody> </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"> <tr><td>Option</td><td>Description</td><td>Example</td></tr> </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"> <tr><td>--------</td><td>-------</td><td>-------</td></tr> </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"> <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="3286">3286</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="3287">3287</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="3288">3288</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="3289">3289</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="3290">3290</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="3291">3291</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="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"> =head3 single, simple plot </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">   </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"> use Matplotlib::Simple 'hist'; </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"> </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"> my @e = generate_normal_dist( 100, 15, 3 * 200 ); </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"> my @b = generate_normal_dist( 85, 15, 3 * 200 ); </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"> my @a = generate_normal_dist( 105, 15, 3 * 200 ); </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"> </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"> hist({ </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"> fh => $fh, </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"> execute => 0, </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"> 'output.file' => 'output.images/single.hist.png', </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"> data => { </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"> E => @e, </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"> B => @b, </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"> A => @a, </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"> } </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">   </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"> which makes the following simple plot: </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">   </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">   </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"> =for html </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"> <p> </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"> <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="3318">3318</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="3319">3319</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </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 multiple plots </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"> plt({ </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"> fh => $fh, </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"> execute => 0, </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"> 'output.file' => 'output.images/histogram.png', </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"> set_figwidth => 15, </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"> suptitle => 'hist Examples', </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"> plots => [ </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"> { # 1st subplot </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"> data => { </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"> E => @e, </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"> B => @b, </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"> A => @a, </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"> 'plot.type' => 'hist', </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"> alpha => 0.25, </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"> bins => 50, </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"> title => 'alpha = 0.25', </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"> color => { </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"> B => 'Black', </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"> E => 'Orange', </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"> A => 'Yellow', </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"> }, </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"> scatter => '[' </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"> . join( ',', 22 .. 44 ) . '],[' # x coords </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"> . join( ',', 22 .. 44 ) # y coords </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"> . '], label = "scatter"', </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"> xlabel => 'Value', </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"> ylabel => 'Frequency', </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"> }, </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"> { # 2nd subplot </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"> data => { </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"> E => @e, </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"> B => @b, </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"> A => @a, </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"> 'plot.type' => 'hist', </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"> alpha => 0.75, </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"> bins => 50, </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"> title => 'alpha = 0.75', </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"> color => { </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"> B => 'Black', </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"> E => 'Orange', </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"> A => 'Yellow', </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"> }, </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"> xlabel => 'Value', </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"> ylabel => 'Frequency', </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"> }, </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"> { # 3rd subplot </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"> add => [ # add secondary plots/graphs/methods </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"> { # 1st additional plot/graph </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"> data => { </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"> 'Gaussian' => [ </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"> [40..150], </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"> [map {150 * exp(-0.5*($_-100)**2)} 40..150] </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"> ] </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' => 'plot', </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"> 'set.options' => { </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"> 'Gaussian' => 'color = "red", linestyle = "dashed"' </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"> } </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"> } </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"> ], </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"> data => { </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"> E => @e, </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"> B => @b, </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"> A => @a, </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"> }, </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"> 'plot.type' => 'hist', </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"> alpha => 0.75, </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"> bins => { </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"> A => 10, </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"> B => 25, </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"> E => 50 </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"> }, </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"> title => 'Varying # of bins', </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"> color => { </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"> B => 'Black', </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"> E => 'Orange', </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"> A => 'Yellow', </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"> }, </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"> xlabel => 'Value', </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"> ylabel => 'Frequency', </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"> }, </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"> {# 4th subplot </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"> data => { </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"> E => @e, </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"> B => @b, </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"> A => @a, </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"> }, </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"> 'plot.type' => 'hist', </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"> alpha => 0.75, </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"> color => { </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"> B => 'Black', </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"> E => 'Orange', </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"> A => 'Yellow', </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"> }, </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"> orientation => 'horizontal', # assign x and y labels smartly </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"> title => 'Horizontal orientation', </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"> ylabel => 'Value', </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"> xlabel => 'Frequency', # 'log' => 1, </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"> }, </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"> ], </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"> ncols => 3, </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"> nrows => 2, </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">   </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">   </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"> =for html </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"> <p> </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"> <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="3433">3433</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="3434">3434</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </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">   </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"> Make a 2-D histogram from a hash of arrays </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">   </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"> =head2 hist2d </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"> =head3 single, simple plot </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">   </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"> plt({ </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"> 'output.file' => 'output.images/single.hist2d.png', </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"> data => { </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"> E => @e, </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"> B => @b </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"> }, </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"> 'plot.type' => 'hist2d', </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"> title => 'title', </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"> execute => 0, </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"> fh => $fh, </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"> }); </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">   </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"> makes the following image: </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">   </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">   </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"> =for html </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"> <p> </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"> <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="3460">3460</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="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">   </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"> the range for the density min and max is reported to stdout </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">   </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"> =head3 options </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"> =for html </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"> <table> </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"> <tbody> </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"> <tr><td>Option</td><td>Description</td><td>Example</td></tr> </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"> <tr><td>--------</td><td>-------</td><td>-------</td></tr> </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"> <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="3473">3473</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="3474">3474</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="3475">3475</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="3476">3476</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="3477">3477</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="3478">3478</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="3479">3479</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="3480">3480</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="3481">3481</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="3482">3482</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="3483">3483</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="3484">3484</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="3485">3485</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="3486">3486</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="3487">3487</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </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"> =head3 multiple plots </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">   </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"> plt({ </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"> fh => $fh, </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"> execute => 1, </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"> ncols => 3, </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"> nrows => 3, </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"> suptitle => 'Types of hist2d plots: all of the data is identical', </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"> plots => [ </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"> { </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"> data => { </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"> X => $x, # x-axis </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"> Y => $y, # y-axis </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"> }, </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"> 'plot.type' => 'hist2d', </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"> title => 'Simple hist2d', </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"> data => { </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"> X => $x, # x-axis </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"> Y => $y, # y-axis </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"> 'plot.type' => 'hist2d', </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"> title => 'cmap = terrain', </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"> cmap => 'terrain' </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"> }, </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"> { </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"> cmap => 'ocean', </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"> data => { </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"> X => $x, # x-axis </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"> Y => $y, # y-axis </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"> }, </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"> 'plot.type' => 'hist2d', </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"> title => 'cmap = ocean and set colorbar range with vmin/vmax', </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"> set_figwidth => 15, </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"> vmin => -2, </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"> vmax => 14 </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"> }, </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"> { </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"> data => { </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"> X => $x, # x-axis </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"> Y => $y, # y-axis </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"> 'plot.type' => 'hist2d', </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"> title => 'density = True', </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"> cmap => 'terrain', </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"> density => 'True' </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"> }, </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"> { </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"> data => { </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"> X => $x, # x-axis </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"> Y => $y, # y-axis </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"> 'plot.type' => 'hist2d', </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"> title => 'key.order flips axes', </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"> cmap => 'terrain', </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"> 'key.order' => [ 'Y', 'X' ] </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"> }, </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"> { </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"> cb_logscale => 1, </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"> data => { </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"> X => $x, # x-axis </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"> Y => $y, # y-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"> }, </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"> 'plot.type' => 'hist2d', </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"> title => 'cb_logscale = 1', </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"> }, </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"> { </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"> cb_logscale => 1, </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"> data => { </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"> X => $x, # x-axis </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"> Y => $y, # y-axis </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"> }, </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"> 'plot.type' => 'hist2d', </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"> title => 'cb_logscale = 1 with vmax set', </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"> vmax => 2.1, </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"> vmin => 1 </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"> }, </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"> { </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"> data => { </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"> X => $x, # x-axis </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"> Y => $y, # y-axis </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"> }, </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"> 'plot.type' => 'hist2d', </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"> 'show.colorbar' => 0, </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"> title => 'no colorbar', </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"> }, </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"> { </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"> data => { </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"> X => $x, # x-axis </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"> Y => $y, # y-axis </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"> 'plot.type' => 'hist2d', </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"> title => 'xbins = 9', </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"> xbins => 9 </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"> ], </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"> 'output.file' => 'output.images/hist2d.png', </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"> }); </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">   </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"> makes the following image: </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">   </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"> =for html </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"> <p> </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"> <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="3594">3594</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="3595">3595</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </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">   </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"> =head2 imshow </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"> Plot 2D array of numbers as an image </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">   </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"> =head3 options </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">   </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"> =for html </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"> <table> </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"> <tbody> </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"> <tr><td>Option</td><td>Description</td><td>Example</td></tr> </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"> <tr><td>--------</td><td>-------</td><td>------- </td></tr> </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"> <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="3609">3609</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="3610">3610</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="3611">3611</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="3612">3612</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="3613">3613</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="3614">3614</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="3615">3615</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="3616">3616</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="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"> =head3 single, simple plot </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">   </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"> my @imshow_data; </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"> foreach my $i (0..360) { </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"> foreach my $j (0..360) { </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"> push @{ $imshow_data[$i] }, sin($i * $pi/180)*cos($j * $pi/180); </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"> } </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"> } </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"> plt({ </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"> data => \@imshow_data, </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"> execute => 0, </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"> fh => $fh, </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"> 'output.file' => 'output.images/imshow.single.png', </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"> 'plot.type' => 'imshow', </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"> set_xlim => '0, ' . scalar @imshow_data, </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"> set_ylim => '0, ' . scalar @imshow_data, </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"> }); </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">   </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"> which makes the following image: </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">   </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"> =for html </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"> <p> </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"> <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="3642">3642</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="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">   </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"> =head3 multiple plots </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">   </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"> plt({ </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"> plots => [ </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"> { </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"> data => \@imshow_data, </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"> 'plot.type' => 'imshow', </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"> set_xlim => '0, ' . scalar @imshow_data, </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"> set_ylim => '0, ' . scalar @imshow_data, </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"> title => 'basic', </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"> }, </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"> { </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"> cblabel => 'sin(x) * cos(x)', </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"> data => \@imshow_data, </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"> 'plot.type' => 'imshow', </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"> set_xlim => '0, ' . scalar @imshow_data, </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"> set_ylim => '0, ' . scalar @imshow_data, </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"> title => 'cblabel', </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"> }, </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"> { </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"> cblabel => 'sin(x) * cos(x)', </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"> cblocation => 'left', </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"> data => \@imshow_data, </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"> 'plot.type' => 'imshow', </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"> set_xlim => '0, ' . scalar @imshow_data, </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"> set_ylim => '0, ' . scalar @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"> title => 'cblocation = left', </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"> }, </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"> { </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"> cblabel => 'sin(x) * cos(x)', </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"> data => \@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"> add => [ # add secondary plots </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"> { # 1st additional plot </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"> data => { </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"> 'sin(x)' => [ </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"> [0..360], </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"> [map {180 + 180*sin($_ * $pi/180)} 0..360] </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"> ], </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"> 'cos(x)' => [ </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"> [0..360], </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"> [map {180 + 180*cos($_ * $pi/180)} 0..360] </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"> 'plot.type' => 'plot', </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"> 'set.options' => { </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"> 'sin(x)' => 'color = "red", linestyle = "dashed"', </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"> 'cos(x)' => 'color = "blue", linestyle = "dashed"', </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"> } </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"> ], </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"> 'plot.type' => 'imshow', </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_xlim => '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"> set_ylim => '0, ' . scalar @imshow_data, </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"> title => 'auxiliary plots', </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"> ], </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"> execute => 0, </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"> fh => $fh, </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"> 'output.file' => 'output.images/imshow.multiple.png', </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"> ncols => 2, </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"> nrows => 2, </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"> set_figheight => 6*3,# 4.8 </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"> set_figwidth => 6*4 # 6.4 </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"> }); </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">   </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"> which makes the following image: </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">   </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">   </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"> =for html </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"> <p> </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"> <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="3716">3716</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="3717">3717</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </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">   </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"> =head3 Secondary Structure Prediction (DSSP) </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">   </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"> 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="3722">3722</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="3723">3723</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </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"> plt({ </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"> cbpad => 0.01, # default 0.05 is too big </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"> data => [ # imshow gets a 2D array </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"> [' ', ' ', ' ', ' ', 'G'], # bottom </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"> ['S', 'I', 'T', 'E', 'H'], # top </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"> 'plot.type' => 'imshow', </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"> stringmap => { </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"> 'H' => 'Alpha helix', </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"> 'B' => 'Residue in isolated β-bridge', </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"> 'E' => 'Extended strand, participates in β ladder', </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"> 'G' => '3-helix (3/10 helix)', </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"> 'I' => '5 helix (pi helix)', </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"> 'T' => 'hydrogen bonded turn', </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"> 'S' => 'bend', </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"> ' ' => 'Loops and irregular elements' </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"> }, </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"> 'output.file' => 'output.images/dssp.single.png', </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"> scalex => 2.4, </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"> set_ylim => '0, 1', </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"> title => 'Dictionary of Secondary Structure in Proteins (DSSP)', </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"> xlabel => 'xlabel', </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"> ylabel => 'ylabel' </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"> }); </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">   </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">   </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"> =for html </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"> <p> </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"> <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="3753">3753</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="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"> or for multiple plots, where the colorbar can be spread across multiple plots now: </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">   </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"> plt({ </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"> cbpad => 0.01, # default 0.05 is too big </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"> plots => [ </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"> { # 1st plot </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"> data => [ </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"> [' ', ' ', ' ', ' ', 'G'], # bottom </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"> ['S', 'I', 'T', 'E', 'H'], # top </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"> ], </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"> 'plot.type' => 'imshow', </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"> set_xticklabels=> '[]', # remove x-axis labels </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"> set_ylim => '0, 1', </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"> stringmap => { </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"> 'H' => 'Alpha helix', </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"> 'B' => 'Residue in isolated β-bridge', </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"> 'E' => 'Extended strand, participates in β ladder', </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"> 'G' => '3-helix (3/10 helix)', </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"> 'I' => '5 helix (pi helix)', </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"> 'T' => 'hydrogen bonded turn', </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"> 'S' => 'bend', </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"> ' ' => 'Loops and irregular elements' </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"> }, </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"> title => 'top plot', </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"> ylabel => 'ylabel' </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"> }, </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"> { # 2nd plot </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"> data => [ </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"> [' ', ' ', ' ', ' ', 'G'], # bottom </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"> ['S', 'I', 'T', 'E', 'H'], # top </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"> ], </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"> 'plot.type' => 'imshow', </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"> set_ylim => '0, 1', </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"> stringmap => { </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"> 'H' => 'Alpha helix', </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"> 'B' => 'Residue in isolated β-bridge', </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"> 'E' => 'Extended strand, participates in β ladder', </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"> 'G' => '3-helix (3/10 helix)', </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"> 'I' => '5 helix (pi helix)', </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"> 'T' => 'hydrogen bonded turn', </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"> 'S' => 'bend', </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"> ' ' => 'Loops and irregular elements' </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"> title => 'bottom plot', </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"> xlabel => 'xlabel', </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"> ylabel => 'ylabel' </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"> } </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"> ], </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"> nrows => 2, </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"> 'output.file' => 'output.images/dssp.multiple.png', </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"> scalex => 2.4, </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"> 'shared.colorbar' => [0,1], # plots 0 and 1 share a colorbar </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"> suptitle => 'Dictionary of Secondary Structure in Proteins (DSSP)', </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"> }); </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">   </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"> which makes the following plot: </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">   </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">   </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"> =for html </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"> <p> </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"> <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="3817">3817</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="3818">3818</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </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">   </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"> =head2 pie </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"> =head3 options </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">   </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"> =head3 single, simple plot </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">   </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"> plt({ </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"> 'output.file' => 'output.images/single.pie.png', </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"> data => { # simple hash </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"> Fri => 76, </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"> Mon => 73, </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"> Sat => 26, </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"> Sun => 11, </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"> Thu => 94, </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"> Tue => 93, </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"> Wed => 77 </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"> }, </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"> 'plot.type' => 'pie', </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"> title => 'Single Simple Pie', </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"> fh => $fh, </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"> execute => 0, </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">   </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"> which makes the image: </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">   </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"> =for html </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"> <p> </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"> <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="3849">3849</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="3850">3850</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </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">   </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"> =head3 multiple plots </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"> plt({ </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"> 'output.file' => 'output.images/pie.png', </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"> plots => [ </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"> { </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"> data => { </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"> 'Russian' => 106_000_000, # Primarily European Russia </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"> 'German' => </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"> 95_000_000, # Germany, Austria, Switzerland, etc. </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"> 'English' => 70_000_000, # UK, Ireland, etc. </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"> 'French' => 66_000_000, # France, Belgium, Switzerland, etc. </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"> 'Italian' => 59_000_000, # Italy, Switzerland, etc. </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"> 'Spanish' => 45_000_000, # Spain </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"> 'Polish' => 38_000_000, # Poland </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"> 'Ukrainian' => 32_000_000, # Ukraine </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"> 'Romanian' => 24_000_000, # Romania, Moldova </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"> 'Dutch' => 22_000_000 # Netherlands, Belgium </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"> }, </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"> 'plot.type' => 'pie', </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"> title => 'Top Languages in Europe', </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"> suptitle => 'Pie in subplots', </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"> }, </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"> { </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"> data => { </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"> 'Russian' => 106_000_000, # Primarily European Russia </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"> 'German' => </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"> 95_000_000, # Germany, Austria, Switzerland, etc. </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"> 'English' => 70_000_000, # UK, Ireland, etc. </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"> 'French' => 66_000_000, # France, Belgium, Switzerland, etc. </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"> 'Italian' => 59_000_000, # Italy, Switzerland, etc. </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"> 'Spanish' => 45_000_000, # Spain </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"> 'Polish' => 38_000_000, # Poland </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"> 'Ukrainian' => 32_000_000, # Ukraine </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"> 'Romanian' => 24_000_000, # Romania, Moldova </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"> 'Dutch' => 22_000_000 # Netherlands, Belgium </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"> 'plot.type' => 'pie', </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"> title => 'Top Languages in Europe', </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"> autopct => '%1.1f%%', </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"> }, </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"> data => { </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"> 'United States' => 86, </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"> 'United Kingdom' => 33, </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"> 'Germany' => 29, </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"> 'France' => 10, </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"> 'Japan' => 7, </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"> 'Israel' => 6, </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"> }, </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"> title => 'Chem. Nobels: swap text positions', </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"> 'plot.type' => 'pie', </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"> autopct => '%1.1f%%', </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"> pctdistance => 1.25, </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"> labeldistance => 0.6, </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"> } </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"> ], </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"> fh => $fh, </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"> execute => 0, </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"> set_figwidth => 12, </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"> ncols => 3, </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">   </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">   </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"> =for html </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"> <p> </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"> <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="3919">3919</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="3920">3920</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </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">   </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"> =head2 plot </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">   </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"> plot either a hash of arrays or an array of arrays </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">   </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"> =head3 single, simple </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">   </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"> data can be given as a hash, where the hash key is the label: </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">   </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"> plt({ </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"> fh => $fh, </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"> execute => 0, </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"> 'output.file' => 'output.images/plot.single.png', </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"> data => { </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"> 'sin(x)' => [ </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"> [@x], # x </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"> [ map { sin($_) } @x ] # y </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"> ], </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"> 'cos(x)' => [ </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"> [@x], # x </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"> [ map { cos($_) } @x ] # y </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"> ], </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"> }, </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"> 'plot.type' => 'plot', </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 => 'simple plot', </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"> set_xticks => </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"> "[-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="3948">3948</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="3949">3949</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="3950">3950</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="3951">3951</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="3952">3952</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </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"> }); </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">   </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"> or as an array of arrays: </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"> plt({ </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"> fh => $fh, </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"> execute => 0, </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"> 'output.file' => 'output.images/plot.single.arr.png', </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"> data => [ </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"> [ </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"> [@x], # x </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"> [ map { sin($_) } @x ] # y </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"> ], </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"> [@x], # x </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"> [ map { cos($_) } @x ] # y </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"> ], </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"> 'plot.type' => 'plot', </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"> title => 'simple plot', </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"> set_xticks => </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"> "[-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="3975">3975</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="3976">3976</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="3977">3977</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="3978">3978</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="3979">3979</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ], </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"> }); </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"> both of which make the following "plot" plot: </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">   </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">   </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"> =for html </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"> <p> </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"> <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="3988">3988</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="3989">3989</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </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">   </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"> =head3 multiple sub-plots </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">   </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"> which makes </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">   </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"> my $epsilon = 10**-7; </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"> my (%set_opt, %d); </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"> my $i = 0; </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"> foreach my $interval ( </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"> [-2*$pi, -$pi], </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"> [-$pi, 0], </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"> [0, $pi], </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"> [$pi, 2*$pi] </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"> ) { </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"> my @th = linspace($interval->[0] + $epsilon, $interval->[1] - $epsilon, 99, 0); </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"> @{ $d{csc}{$i}[0] } = @th; </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"> @{ $d{csc}{$i}[1] } = map { 1/sin($_) } @th; </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"> @{ $d{cot}{$i}[0] } = @th; </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"> @{ $d{cot}{$i}[1] } = map { cos($_)/sin($_) } @th; </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"> if ($i == 0) { </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"> $set_opt{csc}{$i} = 'color = "red", label = "csc(θ)"'; </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"> $set_opt{cot}{$i} = 'color = "violet", label = "cot(θ)"'; </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"> } else { </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"> $set_opt{csc}{$i} = 'color = "red"'; </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"> $set_opt{cot}{$i} = 'color = "violet"'; </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"> } </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"> $i++; </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"> } </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"> $i = 0; </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"> foreach my $interval ( </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"> [-2 * $pi, -1.5 * $pi], </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"> [-1.5*$pi, -0.5*$pi], </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"> [-0.5*$pi, 0.5 * $pi], </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"> [0.5 * $pi, 1.5 * $pi], </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"> [1.5 * $pi, 2 * $pi] </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"> ) { </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"> my @th = linspace($interval->[0] + $epsilon, $interval->[1] - $epsilon, 99, 0); </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"> @{ $d{sec}{$i}[0] } = @th; </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"> @{ $d{sec}{$i}[1] } = map { 1/cos($_) } @th; </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"> if ($i == 0) { </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"> $set_opt{sec}{$i} = 'color = "blue", label = "sec(θ)"'; </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"> $set_opt{tan}{$i} = 'color = "green", label = "tan(θ)"'; </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"> } else { </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"> $set_opt{sec}{$i} = 'color = "blue"'; </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"> $set_opt{tan}{$i} = 'color = "green"'; </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"> @{ $d{tan}{$i}[0] } = @th; </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"> @{ $d{tan}{$i}[1] } = map { sin($_)/cos($_) } @th; </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"> $i++; </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"> } </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"> mkdir 'svg' unless -d 'svg'; </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"> 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="4042">4042</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="4043">4043</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="4044">4044</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="4045">4045</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="4046">4046</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="4047">4047</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="4048">4048</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="4049">4049</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="4050">4050</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="4051">4051</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="4052">4052</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="4053">4053</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="4054">4054</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ] </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"> }, </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"> 'plot.type' => 'plot', </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.options' => { </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"> 'sin(θ)' => 'color = "orange"' </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"> }, </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"> set_xticks => $xticks, </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"> set_xlim => "-2*$pi, 2*$pi", </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"> xlabel => 'θ', </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"> ylabel => 'sin(θ)', </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"> }, </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"> { # sin </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"> data => { </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"> 'cos(θ)' => [ </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"> [@x], </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"> [map {cos($_)} @x] </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"> ] </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"> }, </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"> 'plot.type' => 'plot', </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.options' => { </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"> 'cos(θ)' => 'color = "black"' </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"> }, </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_xticks => $xticks, </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_xlim => "-2*$pi, 2*$pi", </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"> xlabel => 'θ', </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"> ylabel => 'cos(θ)', </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"> }, </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"> { # csc </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"> data => $d{csc}, </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"> 'plot.type' => 'plot', </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"> 'set.options' => $set_opt{csc}, </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"> set_xticks => $xticks, </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"> set_xlim => "-2*$pi, 2*$pi", </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"> set_ylim => "$min,$max", </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"> 'show.legend' => 0, </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"> vlines => [ # asymptotes </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"> "-2*$pi, $min, $max, color = 'gray', linestyle = 'dashed'", </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"> "-$pi, $min, $max, color = 'gray', linestyle = 'dashed'", </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"> "0, $min, $max, color = 'gray', linestyle = 'dashed'", </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"> "$pi, $min, $max, color = 'gray', linestyle = 'dashed'", </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"> "2*$pi, $min, $max, color = 'gray', linestyle = 'dashed'", </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"> ], </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"> xlabel => 'θ', </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"> ylabel => 'csc(θ)', </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"> { # sec </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"> data => $d{sec}, </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"> 'plot.type' => 'plot', </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"> 'set.options' => $set_opt{sec}, </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"> set_ylim => "$min,$max", </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"> 'show.legend' => 0, </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"> vlines => [ # asymptotes </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"> "-1.5*$pi, $min, $max, color = 'gray', linestyle = 'dashed'", </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"> "-.5*$pi, $min, $max, color = 'gray', linestyle = 'dashed'", </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"> ".5*$pi, $min, $max, color = 'gray', linestyle = 'dashed'", </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"> "1.5*$pi, $min, $max, color = 'gray', linestyle = 'dashed'", </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"> # "2*$pi, $min, $max, color = 'gray', linestyle = 'dashed'", </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"> xlabel => 'θ', </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"> ylabel => 'sec(θ)', </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"> }, </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"> { # csc </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"> data => $d{cot}, </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"> 'plot.type' => 'plot', </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.options' => $set_opt{cot}, </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"> set_xticks => $xticks, </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"> set_xlim => "-2*$pi, 2*$pi", </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"> set_ylim => "$min,$max", </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"> 'show.legend' => 0, </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"> vlines => [ # asymptotes </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"> "-2*$pi, $min, $max, color = 'gray', linestyle = 'dashed'", </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"> "-$pi, $min, $max, color = 'gray', linestyle = 'dashed'", </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"> "0, $min, $max, color = 'gray', linestyle = 'dashed'", </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"> "$pi, $min, $max, color = 'gray', linestyle = 'dashed'", </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"> "2*$pi, $min, $max, color = 'gray', linestyle = 'dashed'", </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"> ], </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"> xlabel => 'θ', </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"> ylabel => 'cot(θ)', </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"> }, </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"> { # sec </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"> data => $d{tan}, </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"> 'plot.type' => 'plot', </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"> 'set.options' => $set_opt{tan}, </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"> set_xticks => $xticks, </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"> set_xlim => "-2*$pi, 2*$pi", </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"> set_ylim => "$min,$max", </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"> 'show.legend' => 0, </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"> vlines => [ # asymptotes </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"> "-1.5*$pi, $min, $max, color = 'gray', linestyle = 'dashed'", </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"> "-.5*$pi, $min, $max, color = 'gray', linestyle = 'dashed'", </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"> ".5*$pi, $min, $max, color = 'gray', linestyle = 'dashed'", </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"> "1.5*$pi, $min, $max, color = 'gray', linestyle = 'dashed'", </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"> # "2*$pi, $min, $max, color = 'gray', linestyle = 'dashed'", </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"> ], </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"> xlabel => 'θ', </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"> ylabel => 'tan(θ)', </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"> }, </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"> ], # end </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"> ncols => 2, </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"> nrows => 3, </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"> set_figwidth => 8, </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"> suptitle => 'Basic Trigonometric Functions' </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"> }); </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">   </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"> =for html </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"> <p> </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"> <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="4164">4164</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="4165">4165</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </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">   </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"> =head2 scatter </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">   </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"> =head3 single, simple plot </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">   </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"> scatter({ </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"> fh => $fh, </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"> data => { </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"> X => [@x], </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"> Y => [map {sin($_)} @x] </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"> }, </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"> execute => 0, </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"> 'output.file' => 'output.images/single.scatter.png', </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"> }); </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">   </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"> makes the following image: </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">   </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">   </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"> =for html </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"> <p> </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"> <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="4187">4187</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="4188">4188</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </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">   </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"> =head3 options </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">   </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"> =head3 multiple plots </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">   </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"> plt({ </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"> fh => $fh, </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"> 'output.file' => 'output.images/scatterplots.png', </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"> execute => 0, </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 => 2, </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"> ncols => 3, </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"> set_figheight => 8, </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"> set_figwidth => 16, </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"> suptitle => 'Scatterplot Examples', # applies to all </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"> plots => [ </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"> { # single-set scatter; no label </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"> data => { </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"> X => @e, # x-axis </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"> Y => @b, # y-axis </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"> Z => @a # color </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"> title => '"Single Set Scatterplot: Random Distributions"', </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"> color_key => 'Z', </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"> 'set.options' => 'marker = "v"' </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"> , # arguments to ax.scatter: there's only 1 set, so "set.options" is a scalar </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"> text => [ '100, 100, "text1"', '100, 100, "text2"', ], </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"> 'plot.type' => 'scatter', </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"> }, </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"> { # multiple-set scatter, labels are "X" and "Y" </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"> data => { </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"> X => { # 1st data set; label is "X" </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"> A => @a, # x-axis </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"> B => @b, # y-axis </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"> W => { # 2nd data set; label is "Y" </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"> A => generate_normal_dist( 100, 15, 210 ), # x-axis </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"> B => generate_normal_dist( 100, 15, 210 ), # y-axis </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"> }, </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"> 'plot.type' => 'scatter', </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"> title => 'Multiple Set Scatterplot', </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"> 'set.options' => </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"> { # arguments to ax.scatter, for each set in data </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"> X => 'marker = ".", color = "red"', </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"> W => 'marker = "d", color = "green"' </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"> }, </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"> { # multiple-set scatter, labels are "X" and "Y" </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"> data => { # 8th plot, </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"> X => { # 1st data set; label is "X" </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"> A => @e, # x-axis </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"> B => @b, # y-axis </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"> C => @a, # color </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"> }, </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"> Y => { # 2nd data set; label is "Y" </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"> A => generate_normal_dist( 100, 15, 210 ), # x-axis </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"> B => generate_normal_dist( 100, 15, 210 ), # y-axis </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"> C => generate_normal_dist( 100, 15, 210 ), # color </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"> }, </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"> }, </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"> 'plot.type' => 'scatter', </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"> title => 'Multiple Set Scatter w/ colorbar', </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"> 'set.options' => { # arguments to ax.scatter, for each set in data </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"> X => 'marker = "."', # diamond </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"> Y => 'marker = "d"' # diamond </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"> }, </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"> color_key => 'Z', </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"> } </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"> ] </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"> }); </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"> which makes the following figure: </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">   </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">   </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"> =for html </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"> <p> </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"> <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="4266">4266</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="4267">4267</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </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">   </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"> =head2 violin </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 a hash of array refs as violins </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">   </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"> =head3 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">   </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"> =for html </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"> <table> </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"> <tbody> </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"> <tr><td>Option</td><td>Description</td><td>Example</td></tr> </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"> <tr><td>--------</td><td>-------</td><td>-------</td></tr> </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"> <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="4281">4281</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="4282">4282</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="4283">4283</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="4284">4284</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="4285">4285</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="4286">4286</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="4287">4287</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </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"> =head3 single, simple plot </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">   </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"> plt({ </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"> 'output.file' => 'output.images/single.violinplot.png', </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"> data => { # simple hash </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"> A => [ 55, @{$z} ], </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"> E => [ @{$y} ], </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"> B => [ 122, @{$z} ], </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"> }, </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"> 'plot.type' => 'violinplot', </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"> title => 'Single Violin Plot: Specified Colors', </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"> colors => { E => 'yellow', B => 'purple', A => 'green' }, </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"> fh => $fh, </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"> execute => 0, </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">   </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"> which makes: </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">   </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"> =for html </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"> <p> </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"> <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="4310">4310</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="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">   </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"> =head3 multiple plots </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">   </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"> plt({ </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"> fh => $fh, </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"> execute => 0, </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"> 'output.file' => 'output.images/violin.png', </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"> plots => [ </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"> { </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"> data => { </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"> E => @e, </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"> B => @b </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"> }, </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"> 'plot.type' => 'violinplot', </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"> title => 'Basic', </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"> xlabel => 'xlabel', </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"> set_figwidth => 12, </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"> suptitle => 'Violinplot' </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"> { </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"> data => { </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"> E => @e, </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"> B => @b </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"> }, </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"> 'plot.type' => 'violinplot', </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"> color => 'red', </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"> title => 'Set Same Color for All', </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"> { </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"> data => { </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"> E => @e, </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"> B => @b </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"> }, </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"> 'plot.type' => 'violinplot', </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"> colors => { </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"> E => 'yellow', </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"> B => 'black' </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"> title => 'Color by Key', </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"> }, </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"> { </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"> data => { </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"> E => @e, </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"> B => @b </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"> }, </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"> orientation => 'horizontal', </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"> 'plot.type' => 'violinplot', </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"> colors => { </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"> E => 'yellow', </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"> B => 'black' </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"> }, </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"> title => 'Horizontal orientation', </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"> }, </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"> { </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"> data => { </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"> E => @e, </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"> B => @b </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"> }, </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"> whiskers => 0, </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"> 'plot.type' => 'violinplot', </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"> colors => { </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"> E => 'yellow', </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"> B => 'black' </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"> }, </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"> title => 'Whiskers off', </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"> }, </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"> ncols => 3, </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"> nrows => 2, </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"> }); </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"> =for html </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"> <p> </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"> <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="4387">4387</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="4388">4388</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </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">   </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"> =head2 wide </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">   </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"> =head3 options </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">   </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"> =head3 single, simple plot </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"> =head3 multiple plots </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">   </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"> =head1 Advanced </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"> =head2 Notes in Files </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">   </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"> 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="4403">4403</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </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"> <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="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"> =head2 Speed </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"> To improve speed, all data can be written into a single temp python3 file thus: </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">   </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"> use File::Temp; </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"> my $fh = File::Temp->new( DIR => '/tmp', SUFFIX => '.py', UNLINK => 0 ); </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"> 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="4414">4414</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </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"> plt({ </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"> data => { </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"> Clinical => [ </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"> [@xw], # x </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"> [@y] # y </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"> [ [@xw], [ map { $_ + rand_between( -0.5, 0.5 ) } @y ] ], </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"> [ [@xw], [ map { $_ + rand_between( -0.5, 0.5 ) } @y ] ] </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"> HGI => [ </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"> [@xw], # x </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"> [ map { 1.9 - 1.1 / $_ } @xw ] # y </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"> ], </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"> [ [@xw], [ map { $_ + rand_between( -0.5, 0.5 ) } @y ] ], </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"> [ [@xw], [ map { $_ + rand_between( -0.5, 0.5 ) } @y ] ] </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"> }, </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"> 'output.file' => 'output.images/single.wide.png', </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"> 'plot.type' => 'wide', </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"> color => { </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"> Clinical => 'blue', </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"> HGI => 'green' </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"> }, </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"> title => 'Visualization of similar lines plotted together', </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"> fh => $fh, </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"> execute => 0, </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"> }); </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"> # the last plot should have C<< execute =E<gt> 1 >> </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"> plt({ </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"> data => [ </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"> [ </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"> [@xw], # x </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"> [@y] # y </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"> [ [@xw], [ map { $_ + rand_between( -0.5, 0.5 ) } @y ] ], </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"> [ [@xw], [ map { $_ + rand_between( -0.5, 0.5 ) } @y ] ] </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"> ], </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"> 'output.file' => 'output.images/single.array.png', </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"> 'plot.type' => 'wide', </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"> color => 'red', </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"> title => 'Visualization of similar lines plotted together', </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"> fh => $fh, </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"> execute => 1, </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"> }); </td> </tr> </table> </body> </html>