Downloads

FileVersionReleasedNotes
SharpPlot (Trial)V1.2fNovember 2007Zip file containing a complete free trial version of SharpPlot.
All charts will be watermarked, but otherwise this is just like the registered version.
SharpPlot (Unrestricted)V1.2fNovember 2007Password protected zip file containing an unrestricted version of SharpPlot.
To use this you must buy SharpPlot from this site and agree to the SharpPlot licence

Release 1.2f, November 2007

New capabilities

SilverLight support – charts can now be saved as a XAML canvas which will display correctly in the SilverLight plugin in most common browsers. Hints, Tips and Hyperlinks are actioned by a simple JavaScript routine to handle mouse events on the drawing.

Parity plot style – adds a standard parity-plot capability to Scatter and Contour plots to allow easy comparison of actual behaviour with a theoretical standard. Function Parity tests it.

Custom markers – now take a XAML path as a string, or for very simple polygons a vector of xy pairs giving the co-ordinates of each vertex of the marker relative to the marker origin. The first pair of values as treated as a relative moveto, and subsequent values as lineto pairs. Nested vectors define multiple subpaths. All output formats support the vector markers, either stroked or filled.

Fixed bugs and minor tweaks

Legend formatting – internal call added to allow SharpPlot to get the ideal width for the legend placeholder which must show at least one complete repeat cycle for custom dashed lines.

Legend alignment – a composite chart made up of bars and a scatterplot left-aligned the marker in a vertical key. It should be centred on the width of the coloured blocks used by the barchart.

Frame border – is drawn entirely inside the paper if the gutter is zero. This should preserve the line-width correctly when drawn on screen.


© Causeway Graphical Systems Ltd 1996-2007

SharpPlot – 1.2e Aug 2007

Availability

Available from CUSP site from August 24th 2007.

New capabilities

GetVersion – added as a simple call to find out what we are running (as a string).

UpDown stacked bars – implements the Excel strategy of keeping separate up and down stacks rather than a simple cumulative which can completely hide negative sectors.


Value tags now follow the bottoms of negative bars and ‘hop out’ downwards if the tag in the final sector won’t fit. Stacked charts may give nonsense results if used with a displaced baseline – this only makes sense when all the bars in the first block exceed the displaced baseline! Same for Horizontal bars which stack left/right now.

KeyLimit – allows user to restrict the number of key items flushed at each call to DrawKey. The default value is -1 which writes as many as it can in the space available. Suggested use is to split up keys between several panels if there are many chart elements to be keyed.

KeyIndices – new KeyIndices setting takes an array of (1-origin) index values which allows user to choose exactly the keys to be run by DrawKey (or by default if the key is left alone until the chart is rendered). If ANY keys have been requested this way, then the legend is treated as done, and nothing will emerge automatically when the chart is closed.

Label nudge – both X and Y labels can be nudged now with SetXLabelNudge and SetYLabelNudge which take (x,y) displacements in points. Only applies to ‘standard’ charts for now, so not Polar or Dial. Note that displacement is always +ve towards the chart area, so will be symmetric for left/right axes.

AddComment – adds arbitrary text as annotations to vector output such as EPS or SVG. The comments may be compressed and encoded to prevent possible damage to the output file (for example by including the > character in an SVG comment or a line-end in an EPS comment).

ReadComment – allows the user to recover previously saved notes from all textual chart formats. Comments may be simple text, or compressed and ASCII85 encoded text with a plain-text identifier. Any XML protection is undone, and the saved notes are then decoded and decompressed for you.

Fixed bugs and minor tweaks

Vertical Keys – did not quite line up the text in the default case. Thick dashed lines should make enough space to show the dash-repeat, but in the simple case lines and bars should match! Where keyed lines would differ in length, they now pad to the length of the longest.

Value tags on Horizontal Bars – were allowing rather generous padding, so if written in a small font they could be eliminated a little too early. Fixed – padding is now the width of ! in the current valuetag font rather than a fixed amount in points.

Key position – was not allowing for extra-long tickmarks or X-labels with very large linespacing. Either could occur on charts with a deep hierarchy of time-related labels. Fixed.

Vertical key – was looking for double-column layout much too soon, and restricting the width allowed for text with a few long keys to less than half what it should be. Fixed.

Metafile output – extra arguments added to RenderMetafile and SaveImage to allow complete control over the final format. You can now determine the EmfType which is generated in addition to the image type. Also textual HTML tags like <sup>2</sup> were not being handled for this output type. Fixed.

Clipping support added for eps,svg,pdf,raster and dummied in vml which appears not to handle it for inline content.

This cleans up the ends of thick (angled) lines which can otherwise bulge out of the chart region even though the line is ended at the edge of the allowed area. Augments the current strategy of segmenting lines at the chart edge.


eps output – custom dashed lines now get butt caps to avoid the dashes merging up when the line gets thick.

Label wrapping – inside labels were using the margin width as a wrapping target. Fixed.

Legend positioning – placing the legend box with DrawKey(x,y) had some issues when the top of the box got close to the top of the chart area and there was a small top margin. Also the bottom of the box was not quite accurately positioned if bottom alignment was used. Fixed.

ExactFit – was fitting the ‘far end’ but insisting that the bottom tick was rounded back to a whole tick interval. Now it leaves it alone for integer data so you can have ticks at (1,3,5,7) by setting the interval to 2 and the range to 1,n.

Clamped lines – if the line left the chart upwards and never returned, the clamped line should extend to the last X-value and a filled surface should run to here also. Similarly for the first point. Fixed.


Keys, Labels – both now accept a comma-delimited simple string as an alternative to the string[] format. If your labels have commas, then you MUST still pass the array as before.

Getters added – for all fonts, backgrounds and lines. Return the full set of elements as object[] to allow an application to query the current settings easily and offer the user a dialogue with the default values prefilled.

LineStyle – dash repeat pattern for custom linestyles takes double[] as well as int[] now to allow very fine control.

Linegraphs – lines are drawn from right to left so the dash-repeat looks good at the right-hand end which is where the user tends to see it best. This also requires the constructor for custom lines to flip the pattern. We should also flip the pattern of Pen objects passed for use in custom lines – todo!

Duplicate ticksXTickStyle and YTickStyle now include ‘Duplicate’ which adds the ticks on the ‘far side’ but without the extra labels you get with duplicated axes. Only of obvious value with framed axes.

Framed Axes – are now special-cased and drawn with a simple Rect which tidies up the corners and simplifies the vector output. Common case of Plain XY axes which join at (0,0) is also now drawn as a single connected Poly.

Clipping – segmentation algorithm was fooled if both the first and last points fell outside the same boundary. Fixed by the usual trick of adding a couple of guard points in the middle of the target then chopping them after doing the algorithm. Also the segmentation dropped a part line which crossed directly from below the bottom to above the top (or outside left to outside right) – fixed.


© Causeway Graphical Systems Ltd 1996-2007

SharpPlot – 1.2d Jan 2007

Availability

Available from CUSP site from January 31st 2007.

New capabilities

Date labels – dates in the format YYYYMMDD are accepted as X-values (in addition to OLE dates) and correctly formatted as labels for the X-axis. However it was not possible to pass an array of numeric dates as the argument to SetXLabels and have the date formatter applied to them automatically. You can now do thie (e.g. for barcharts of monthly values) but you must set the format string such as “MM YYYY” before setting the labels, as the conversion is handled by the Set function here.

Value tags – ValueStyle ‘ShowAllTags’ turns off the checking on space so collisions can happen. Apparently Business Objects does this and some users like it! Oh well. Maybe one day we move the tags out of the side of the bars and use spider lines like piecharts. This will do for today.

Axis labels on 3D charts – both X and Y labels now support the AngledLabels style which writes the labels midlined on a projection of the corresponding gridline. Because of the perspective projection these lines are not quite parallel, so it probably makes no sense to allow the user to set an explicit angle here.

Z-Axis scaling – automatic tickmarks now allow for the perspective projection of the Z-axis which generally results in less crowded ticks for charts where the viewpoint leaves this axis very foreshortened by the perspective effect.

Stepchart – adds support for style ‘Horizontal’ which simply flips the axes around. Handy for population pyramids with irregular age bands.

MapCoords – new utility to take x and y values (in chart-axis co-ordinates) and translate the numbers to points suitable for placing Notes and Keys with Absolute positioning. This may be more convenient when placing text to annotate data values.

Bugs corrected

Date/Time style – the 14/Nov fix had the side-effect of Flooring OLE dates which knocked out the Time element rather effectively. Fixed!

Stepcharts – vertical value labels only aligned correctly on style ‘surface’. Now work the same way if the chart is unfilled, or if risers are drawn.

Barcharts – a single group with several bars would put a tick on every bar rather than a single tick on the whole group. Now only switches to a tick per bar if the number of supplied labels matches the number of bars in the group.

Date/Time style – if you set en explicit array of XTicks as OADate values this mistakenly divided the numbers by 24 (correct for Time style but not for Date|Time). Fixed.


© Causeway Graphical Systems Ltd 1996-2007

Release 1.2c, November 2006

New capabilities

Vector plots are now fully integrated and supported. They have a variety of uses, typically in drawing current flows on weather maps or in creating PERT charts. There are some examples in the Tutorials section of the online manual, but just for interest, here is a slightly novel example taken from the 2006 World Cup soccer tournament ...


Also new in this release is DrawImage which can be used to add bitmap artwork (typically a company logo) to any plot. The final (less visible) improvement is that PDF output now supports font subsetting, and compresses the data using the publicly available DeFlate compression scheme which is supported by Acrobat Reader. Typically this reduces charts saved as PDF to around 20% of their previous size.

Other recent updates

DrawTable – now accepts arrays of strings, allowing the caller to format the data before creating the table. Also, this was eliminating empty cells rather than just skipping past them, possibly mis-aligning the rest of the row. Fixed.

DrawVectors – will plot a scatter of arrows (for current-flow charts) or any kind of directed graph involving nodes and connections. Takes the start and end-points of a set of vectors and draws them as independent lines with optional nodes or arrowheads. Value tags are written along the lines, centred above. SplitBy may be used to draw the lines in multiple colours and generate a key for them.

NewPage – adds an option to reset all properties (defaults to true) and also clears the table of key placeholders – keys cannot carry across pages.

Auto-ranging for ‘Duration’ style – values are minutes, but we try to get ticks to the nearest quarter-hour when the range allows it – which gives much tidier scaling. ResetKey – removes any accumulated placeholders from the key definitions.

Font scaling – ResetFrame was not rescaling the footnote font – fixed.

SaveImage as Metafile – was using the inbuilt Save method which saves a raster image wrapped as a metafile. Now it gets the vector version as a memory stream and saves that instead, which gives much better scaling, for example when used in a Word document.

RenderImagemap – was using ‘alt=’ for the tips on each link, which works in IE but not in Firefox – changed to use ‘title=’ which works in both. Setting the status text to implement hints seems not to work in Firefox, which is odd as it works fine in Netscape-3, so more research may be required.

DrawImage – allows existing artwork (bitmap or metafile) to be added either to the chart background (probably a company logo) or as additional markers to the completed chart. The caller may give a bitmap object or filename and optional uri and size. The bitmap is required for embedded formats and the uri is used to make the link for web graphics. The artwork will be sized (preserving aspect if only the width is given) using points or chart co-ordinates depending at what stage it is drawn.

Towers – test for “it’s a column chart” was a bit too simple so sp.DrawTowerChart on a simple vector of numbers could step outside its bounding box and mess up the Xlabels. Fixed.

Release 1.2b, May 2006

New features

Altitude shading is now available with Contour plots and also for response surfaces fitted to 3D Cloud charts.


Data can now be shaded with user-settable colors to generate ‘false color’ plots of temperature data, or to map any 3rd dimension as a given color scheme. The example illustrates the price of houses plotted as a landscape showing the relationship of price to age and floor area. The scalebar is also added as a style for the Bubblechart:


The circles representing the price may be scaled radially, as an alternative to the default scaling by area. Scale marks are drawn at the ZAxis tickmarks, which will be computed from the data, but may be set by the user.

Other updates in this build

Xlabels on Column chart – were slipped one label to the right. Also the labels should always centre-align in the case of an isometric chart. Fixed.

Column chart – scalar data (a simple line of towers) should make a shelf just deep enough for the bars, not a proper Y-axis. Fixed.

Indexed data – was rebasing the X-values to 100 as well as the y-values in an xy-plot. Fixed.

ScatterPlot – now accepts a category variable on the X-axis (so you can plot Yield vs Farm) for both integer and floating-point y-values. Moot point whether we need category data on the y-axis also here!

CloudChart – accepts category data on the x and y axes (but not the z-axis).

Label formatter – for historical reasons this signals wrapping with ‘XXXXXXXX;’ but it now tolerates formats like ‘xxxxxxxxx\n’ in addition (a newline embedded in the string simply embeds a newline in the output as before).

DrawMultiple – no longer does BoxPlot as a type. The new argument style for BoxPlot would really mess up the overloads required.

NewCell – was resetting the scale every cell in a cellular plot, giving some very interesting artwork in the Wise Eel’s Bridge example. Fixed.

KeyDefinition struct – now defaults FillStyle to Solid if omitted from the constructor.

Tracechart – notices XYPlot style now. Allows X-values as first element of array.

Autorange – with XAxis style ‘Date,Time’ we were dividing the specified Xrange by 24, so a range like 35414.5 35419 was ending up as dates around 1904. Fixed.

Horizontal bars – categorised data was not being labelled correctly when there were zero values in stacked barcharts. Fixed.

Aggregations – combining Grouping and Splitting to make a stacked bar from ‘database’ data was losing track of the missing values in the original dataset. The rule now is that an aggregate composed entirely of missing data is now flagged as ‘missing’ and its value tags etc will not be drawn.

Automatic datumlines – were generated more than once if you plotted more than one barchart on the same set of axes. Fixed.

Vertical value labels – did not respect ‘Middle’ style on barcharts. Fixed.

Curves style – a small error in the conversion of Polylines to Bezier curves could give odd ‘overshoot’ effects when successive segments differed greatly in length. Did not show up in timeseries plots, but could draw some very odd contour lines. Fixed.

DrawBubbleChart – now allows ‘Radial’ scaling, which may be more suitable for unfilled markers and notes existing Marker Scale so you can just make them ALL bigger in proportion.

Adds style ‘ScaleBar’ which draws a nominal Z-axis in the right margin with bubbles scaled at each Z-tickmark. These are labelled using the ZLabel formatter and drawn with the Key font.

Scatter plots – value tags note the actual marker size to offset the tag above the marker correctly with scaled markers.

Text insertion patterns like X~~X<b>XXXX</b> were failing on multiline labels. The pattern must be applied before the label is split at newlines. Fixed.

Spanned labels were merging duplicates on the innermost rank. Fixed.

Explicit tick placement failed for exactly 2 tick positions, as the values were confused with (major,minor) interval settings. Fixed.

XBarChart – was incorrectly forcing an extra final (as well as initial) tick on the X-axis. Fixed.

Keys – automatic keys (set without explicit keyframe) now wrap the text much more intelligently. Hopefully with this behaviour and KeyNudge for fine adjustments, we can forget KeyFrame unless the layout is very fussy about key placement.

Data in rows – enhanced slightly to allow a simple barchart to cycle through colours one per BAR rather than one per GROUP. The X-ticks are drawn with one tick (and X-label) at each bar, even though they would logically form a single group. Keys work groupwise as normal, and so each bar has a legend entry. Group gap is ignored, and ‘gap’ sets the inter-bar spacing in this case. Use DataStyle = DataStyles.Rows to set this behavior.

Angled captions – the PDF output was rounding the transform matrix too soon, and losing precision in the angle as a result. Fixed. Also the placement of angled multi-line captions on 3D charts was not as pretty as it should be – also fixed.


Release 1.1, December 2005

Formatters – numeric and text pictures both now use the ~ to suppress the matching digit in the input.

Dates – date formatter accepts newlines (dodges the limitation in the .Net ToString method) and also we tolerate dates as vectors of 19530321 numbers (YYYYMMDD as integers) as well as OLE dates. Many timeseries still use this style for the date column.

Wrapping text – YLabels and YCaption (Atend style) now wrap automatically into the available margin width if no formatter is given. The only other auto-wraps are headings, subheads, footnotes and the ‘atend’ Xcaption where the width is also known.

YLabels – moved a little right when set ‘between’ tick marks which improves the visual style of horizontal barcharts and also allows a touch more wrapping width.

Headings – were actually centering between the Y-axis and the right edge of the frame. They should centre over the chart which normally looks close enough that the discrepancy was never spotted. Until now. Note that headings wrap across the entire page (less a small gutter) but the subhead wraps within the axes as it may be dropped down within the chart area.

Value tags – can now be ‘angled’ (default rotation at 34deg) and left-aligned at the data point (or running from the centre of the top of the bar). Multi-line tags are stacked ‘upwards’ to sit nicely above the data here.

Key frame – keys with an explicit frame and style ‘boxed’ now draw around the text, which is wrapped into the width available if required. Autofit works as before, but may be constrained differently, as the wrapped text may force more vertical space to be used. You can still use the key format picture to set a smaller width.

Value tags – tags with style ‘inside’ on horizontal barcharts were misplaced. This error was introduced when porting from GraplNet to SharpPlot and only applies to tags on bars with negative values. Fixed.

HBars – horizontal barcharts with ALL -ve values and a ‘free’ X-Axis extended the bar to the zero-point rather than the rightmost tickmark. Fixed.

Autoranging – we are careful not to generate half-integer ticks for integer data that spans a small range (say 3 2 2 4 3) – this now extends to powers of 10 in the obvious way.

BoxPlot – reworked to match the style of Grapl. Rather than setting up the criteria as categories with SplitBy we now pass them in directly as arguments. Much simpler to see what is going on and should be a lot easier to code. Several examples changed to match and a lot more tests added.

Tickmarks – both axes tidied up at the ends for the ‘exploded’ case or any other example when there is not a crossing axis or overhanging axis line available. In all these cases the first or last tickmark moves inward by half the line-weight to make a clean join.

YCaptions – were wrapped when ‘atend’ using the margin width, even when you specified an explicit Y-axis position. This case now looks at the nearer edge and allows twice this distance as the wrapping width.

Captions, labels, headings and footers all have a “NoWrap” style added so that you can turn off automatic wrapping if it becomes a nuisance. Typically whan you have already wrapped the text before passing it to SharpPlot.

Labels on the top axis of a pair of Duplicate Xaxes were not ‘thinned’ to match the labels on the lower axis. Also the tickmarks could get stuck to the lower axis for horizontal barcharts with duplicate Xaxes. Fixed.

HBars – barcharts which could go either left or right from a centre axis got badly confused when the user had given text value labels. Now the missing value boolean is passed down along with ALL the bars (one each for left and right) so everything is processed in synch.

Baseline – was not being applied consistently on both chart orientations. Also the interaction with intercept axes was not well-defined. Now the rule is:

Duration formatting – X or Y style Duration will trigger base-60 formatting. No assumptions are made about the units, except that base 60 is used for magnitudes and : as the separator. Use ValueTagstyle=Duration to have the same formatting applied to value labels.

Piecharts – with VML extrusion the sorting for ‘Farthest first’ failed when the last segment wrapped over from 5:00 to the end. Fixed. Also JavaScript handlers set for specific segments were not re-targetted correctly (simple vectors of hints etc were OK). Fixed.

Multi-threading – in some cases it was possible for two instances of SharpPlot to interfere when running on the same process in different threads. This has now been fixed.


Release 1.03, September 2004

Bugs fixed in the first production version.