0.21 2024-04-22
- demo now only loads Prima when run, reducing perldl problems
0.20 2023-03-07
- improve handling of Win32 terminal in perldl (#50) - thanks @dk
0.19 2023-02-06
- add missing files to MANIFEST, convert to EUMM for working disttest
0.18 2023-01-23
[MAJOR CHANGES]
- New capability: color map support. PDL::Graphics::Prima has been able to
use color to visualize data, especially heat maps, for quite some time.
However, apart from printing information to the terminal, there was no way
to know what quantities the different colors represented. This meant that
heat maps and other uses of palettes were, at best, only good for relative
comparisons or meticulously crafted plots that depicted the color scaling
on their own. The new changes make it possible (and fairly easy) to render
and quantitatively label a color bar. This is made possible by a significant
extension to the capabilities of Palettes. Note that because Prima itself
uses the term "Palette" in its gradient API, these are called color maps.
[API CHANGES]
- The Simple interface now accepts additional arguments that can be used to
configure all elements of the plot command.
- New plot widget keys default_save_dir and default_save_format. When a user
right-clicks and chooses to save the figure, these settings will be used as
the starting points rather than the defaults of the current directory and
.bmp format.
- Although plotTypes that have historically expected a palette (ppair::Matrix)
will continue to accept them under that keyword, it is now officially
discouraged. The preferred keyword is color_map.
- Palettes no longer have the copy method. Having removed their association
with a given plotType, this seems to be unnecessary capability, and
extending it with the newer features seemed fraught with potential errors.
- Update to newer Prima greatly simplifies the event loop management, but breaks
the old loop management API. Use twiddling() call instead of $twiddling semaphore
[DIFFERENT BEHAVIOR]
- Change zoom-out factor so that a zoom-in/zoom-out pair takes us back to
to starting zoom level.
- When using a Grid datatype, if no palette is explicitly specified, the grid
activates the new plot-wide color map. Activating the color map causes it to
be rendered, which can significantly alter the appearance of the plot.
[DEPENDENCIES]
- updated Prima minimal version to 1.59 for new Dialog namespace names.
[ENHANCEMENTS]
- Palettes have always determined the mapping from values to color using the
minimum and maximum values of the data. They now give you the option of
specifying explicit minimum and maximum values.
- Palettes now accept a scaling parameter that can be any valid scaling type.
Palettes always used to do linear, so basically this means it is now easy
to get logarithmic color palettes.
- Palettes now take a whole range of new (optional) arguments related to
rendering. Only the plot-wide palette---called the color map---is rendered
in the new changes, though it may be possible and useful to render a palette
in a different context. In that case it should be possible to use all of
these to tweak that rendering.
- Palettes now have a property for specifying a color to use if they
encounter bad data. Ideally this color should fall somewhere outside of
the palette's range. The default value, brown, was chosen specifically for
this reason.
- For the above enhancements, note that Palettes that implement their
functionality via a custom "apply" method do not have access to the palette
object, and so do now have access to any of these new parameters.
- It is possible to specify the color map for a dataset or the plot as a whole
via the color_map key. It is possible to specify a color map at each level;
the level closest to the data is the one that is used. Also, only the plot's
color map is rendered.
[NEW FEATURES]
- New module PDL::Graphics::Prima::SizeSpec facilitates expressing, parsing,
and computing pixel equivalents for sophisticated combinations of distances
in terms of multiple, meaningful units of measure.
- PDL::Graphics::Prima::Simple now looks for a prima-simple.ini file for
default settings for simple plots.
0.17 2014-08-25
[BUG FIXES]
- Fixed minor bug in logic for determining if error bars are specified.
Previously I had returned two checks combined with "or", but the return
keyword has higher precedence than the "or" boolean operator! So now it
uses ||. The upshot was that if only lower error bars were specified, the
library determined that no error bars were present.
0.16 2014-08-25
- Fixed Changes file to conform to the spec
0.15 2014-08-25
- Added a $VERSION to each module in the distribution.
0.14 2014-08-25
[API CHANGES]
- Meaningful drawing now happens in the draw_plot method. Changes in the title
drawing revealed a subtle bug in the on_paint method. This bug is most
easily solved by factoring the plot drawing code into its own function.
Subclasses of Prima::Plot that wish to modify how the widget implements its
drawing should override draw_plot, not on_paint.
[DEPENDENCIES]
- The latest version of Prima, v1.40, provides Prima::Drawable::Subcanvas.
This is needed to get proper subfigure drawing for postscript output, as
well as proper EPS output format.
[DIFFERENT BEHAVIOR]
- You can now specify the fill color for the ppair::Histogram plot type via
the backColor or backColors property. Normal rectangles do not appear to
pay any attention to this property, so now a set of bars are drawn with
the backColor before the rectangles are rendered.
- As mentioned in the NEW FEATURES, it is now possible to specify the title
font specification with much greater precision. I have never been very happy
with the default title font or spacing, so with this change I have taken the
liberty of updating it. The font height now scales with the size of the plot
widget, and the title space now scales with the font size, making the title
size and spacing much more sensible for user interaction (i.e. resizing).
This is expected to have negative impacts for animations if not handled
carefully, but those impacts have not been benchmarked yet.
- The rainbow palette now runs for hue values from 0 to 300 instead of 0 to
360. The problem with the original behavior is that the smallest and largest
values were nearly identical, and indistinguishable. However, it also
removes a sixth of the color spectrum from the palette.
- The save-as-postscript dialog now refers to Encapsulated Postscript
files, with the file extension .eps. A default file extension is
appended if the .eps extension is missing. This usually Does What You
Mean, but also means that users cannot use their own file extension when
using the save-as-postscript dialog.
[NEW FEATURES]
- There is a new property for setting the title's font, called titleFont. In
addition to the normal settings, you can also indicate that the font size,
width, and/or height should be percentages of the canvas's width or height,
or a multiple of the canvas's font's feature.
- The titleSpace property is now much more flexible. In addition to the integer
number of pixels for the title space, the property now accepts either a
subref that is expected to compute the titleSpace (in pixels) or a specially
formatted string for a set of pre-canned calculations.
- Added tick labeling callback (thanks Vikas!). Now users can specify an
arbitrary tick labeling function that will be called for each tick that
needs to be labeled, allowing the user to return a string with the desired
label.
- Added pal::RainbowSV to make less-than-bright rainbow palettes easier to
create.
- Added a new Properties dialog box and associated entry to the pop-up menu.
The dialog box lets the user set the title, axis labels, axis extrema,
and axis scaling type. Furthermore, the user can continue manipulating
the plot with their mouse, and the properties will automatically update
to the currently displayed values.
- If you simply want to specify an axis label, you can now specify it as
x => $x_label rather than x => { label => $x_label }
[ENHANCEMENTS]
- Different means for rendering a plot on a raster image are now documented
and tested.
- Added a Changes file.
- Made file output *much* more robust. Postscript and raster file outputs now
give results that look nearly identical or identical compared with the
figure in the original plot window. Also, a window is not created
unnecessarily if the script only uses Prima to create the images.
- Added proper handling of weird/bad values for annotation positions. Now, if
you specify a position that includes 'bad, 'inf', or 'nan', the annotation
machinery will Just Work, by skipping the annotation drawing.
- Postscript output uses a feature of Prima v1.40 to set the postscript
output as EPS. This is important for proper rendering through LaTeX and
on Mac Preview.
[BUG FIXES]
- Fixed png and ps example scripts. These spuriously called PDL::IO::Pic due
some experiments I was running. These changes never should have gone into
the distribution. Oops.
- The twiddle() method of Simple now does nothing if Simple's plot() method is
overwritten. Overwriting the plot() method is supported, but code that
called twiddle() after calling said overwritten plot() would cause the
script to hang with no way to exit the event loop.
- The default apply() method in PDL::Graphics::Prima::Palette now correctly
supplies its arguments to the supplied subref.
- Logarithmic scaling detection works for ds::Grid (fixed assignment typo).
0.13 2013-03-13
[API CHANGES]
- Deprecated lm::Hold to make way for a new limit, lm::NextTick, to be
developed in the future.
- Renamed ds::Set to ds::Dist.
- Removed pset::CDF; see ds::Dist.
[DIFFERENT BEHAVIOR]
- Slightly repositioned the x-axis label so that tails on letters like 'y'
are no longer clipped with postscript output.
[ENHANCEMENTS]
- Made palettes much more robust.
- Numerous property handling improvements.
- Reduced the number of circular dependencies (and therefore memory leaks).
I'm sure there are other circular references, but at least a good many of
them were removed.
- Made annotation datasets more robust.
- Axis Component objects can now have arbitrary names.
- Improved ReadLine detection and integration, and added support for twiddling.
- Improved binning behavior for ppair::Histogram when bin boundaries are
not identical.
- Lots of documentation updates.
[BUG FIXES]
- Fixed non-functioning matrix_plot and imag_plot, which had been broken
since December of 2011!
[NEW FEATURES]
- Added bin types for ds::Dist, including bt::CDF, bt::Linear, bt::Log,
and bt::StrictLog.
- Created ds::Dist, which inherits from ds::Pair and can use all plot types
from that distribution type.
0.12 2013-01-21
[BUG FIXES]
- Included PDL::Graphics::Prima::ReadLine in the MANIFEST file.
0.11 2013-01-20
[BUG FIXES]
- Inherited autoscaling now works with Callback plot type.
[ENHANCEMENTS]
- We now have usable postscript output, though it's not perfect.
0.10 Not Released
- Another version bump gone awry.
0.09 2012-08-06
[BUG FIXES]
- Finally got save-to-image behavior working, thanks to Dmitry!
[ENHANCEMENTS]
- PDL::Drawing::Prima saw an extensive overhaul with the release of PDP v0.07,
one which handles singular as well as plural properties, and correctly
restores the canvas state after the drawing operation is complete. That
allowed me to simplify the canvas property handling in PDL::Graphics::Prima.
It also means that singular properties Just Work now! :-D
0.08 2012-07-01
[ENHANCEMENTS]
- Build.PL is more specific about its requirements.
- Super-simple pairwise api functions now accept single piddles as arguments,
taking them as y-values and creating sequential x-values.
0.07 2012-06-25
[BUG FIXES]
- The Palette suffered a divide by zero bug when sent data with identical
values. Also, empty piddles sent to Palette are now handled more gracefully.
- Linear scaling now handles degenerate input more gracefully. In particular,
when the data is all the same *negative* value, it now gives useful minima
and maxima.
- A recent revision in x autoscaling generated a bug in y autoscaling, such
that y-axes would autoscale even when I explicitly set their min and/or max.
[ENHANCEMENTS]
- The plot constructor now accepts axis objects. Before, it only accepted a
hash with the axis properties.
- Histogram autoscaling now performs the correct threaded calculations.
[NEW FEATURES]
- Added image_plot to the Simple interface.
0.06 Not Released
- I hadn't realized that I had already incremented the version number. Oops.
0.05 2012-03-15
- Minor docs typo fixes and bug fixes
0.04 2012-02-29
- Added dependency on Prima in the Build.PL file
0.03 2012-02-28
- Added dependency on PDL in the Build.PL file
0.02 2012-02-26
- First CPAN release
- Switched to Module::Build
[API CHANGES]
- Changed naming from pt::<Type> to pseq::<Type>.
- Differentiated datasets and introduced short-form dataset constructors.
- Switched name from pseq::<Type> to ppair::<Type>.
- Lots of naming consolidation.
[ENHANCEMENTS]
- Added first tests to check that the modules load.
- Smooth axis movement.
- Improved autoscaling.
[NEW FEATURES]
- Added ds::Func, ds::Image, and ds::Grid.
- Added pimage::Basic and pgrid::matrix.
- Preliminary postscript output.
0.01 2011-12-22
- Added pt::NGons, renamed to pt::Symbols; added lots of derived plot types;
added pt::TrendLines.
- Simple API now includes plot, line_plot, circle plot, triangle_plot,
square_plot, diamond_plot, cross_plot, X_plot, asterisk_plot, hist_plot,
matrix_plot, and func_plot.
- Right-click menu added.
- Postscript and clipboard output added.
0.00_05 2011-10-25
- Windows is now preliminarily supported.
- DataSets are now plotted in asciibetical order, by name.
0.00_04 2011-10-19
- Added PDL::Graphics::Prima::Simple and PDL::Graphics::Prima::Palette.
- Pushed label handling from a plot responsibility to an axis responsibility.
- Implemented collation-based autoscaling.
0.00_03 2011-09-20
- Added pt::Spikes, pt::CallBack, pt::ErrorBars, pt::ColorGrid
- Switched DataSet handling from being a tied array to a tied hash.
- Renamed from Prima::Ex::Graph to PDL::Graphics::Prima and shuffled the files
into a more standard CPAN distribution layout.
- Moved PDL::PP code into PDL::Drawing::Prima
- Added logarithmic scaling
0.00_02 2011-02-03
- First realization as a widget is completed under the name Prima::Ex::Graph.
The primary components of the library included Axis.pm, DataSet.pm,
Graph.pm, Limits.pm, PlotType.pm, Scaling.pm, and pdlprima.pd.
- Plot types included pt::Lines, pt::Blobs, and pt::Histogram
- Scaling.pm included linear scaling, but not yet logarithmic.
0.00_01 2011-01-20
- Basic line plotting, histogram binning and drawing, and axes scaling and
tick drawing were prototyped in per-widget onDraw callbacks. These callbacks
were added systematically to a widget via the endow_widget function.
- Very first plotting interface was a Prima::Drawable method called graph(),
followed shortly by an additional Drawable method called bin()
0.00_00 2011-01-15
- Initially conceived as PDL::PrimaPoly, a set of PDL bindings to Prima's
polyline method. This would eventually grow into PDL::Drawing::Prima.