This is the NEWS file for PHPlot, with release documentation. The project web site is http://sourceforge.net/projects/phplot/ The project home page is http://phplot.sourceforge.net/ Refer the the ChangeLog file for detailed source changes. ----------------------------------------------------------------------------- 2009-12-24 Release 5.1.0 Overview: This is the current stable release of PHPlot. This release fixes a number of bugs and adds some new features. Some of the changes in this release can alter the appearance of plots, so be sure to review the information in this NEWS file and test this release with your application. The PHPlot reference manual has been updated to match this release. The manual is available as a separate download from Sourceforge. The manual is also available for on-line viewing from the project home page. See the ChangeLog file in the release for more about changes and bug fixes. New features in 5.1.0: + A new "contrib" directory has been added for useful add-ons. This currently contains: * prune_labels : Control data label density on X axis. * color_range : Define a gradient map for data colors. + Feature Request 2899921 "Allow different format for data and tick labels" Text angle and format can now be controlled separately for data labels. + Locale loading override New variable locale_override stops PHPlot from getting locale from system. + Translating Coordinates New function GetDeviceXY() to translate world to device coordinates. + New drawing callback New callback 'draw_all', called after all drawing is done. The manual now contains an example of using this new callback and the new GetDeviceXY() function to annotate a plot. Bug Fixes in 5.1.0: #2914403 "Pie + X/Y titles: Undefined property error" X/Y titles are now properly ignored for pie charts. #2908256 "Error: array_sum() should be an array" (drupal) #2916864 "Should at least print legend on pie charts with empty data" Pie charts with invalid data (no Y values > 0) now make an empty plot. #2906436 "Fixes for X Tick Labels vs X Data Labels" Smarter determination of whether to do Tick labels, Data labels, or both. #2900914 "Problem with display of 0 on Y axis" Fixed rounding error that could produce something like Y=8.12345E-16. #2886365 "PHP 5 patch" (Declare all functions and variables in PHP5 style) Most internal PHPlot member functions now have "protected" visibility. #2839547 "SetImageBorderType('none') You can use SetImageBorderType('none') to turn the image border back off. #1795972 "Fix default point shapes" We now have 20 (vs 10) point shapes, with 10 (vs 1) used by default. #1795971 "Fix default data colors" We now have 16 (vs 8) default data colors, no duplicates, all visible. Visible Changes and Possible Incompatibilities: + PHP5 visibility changes (Bug #2886365) Details: Most internal PHPlot member functions now have visibility 'protected', rather than all being public. All member variables are still 'public'. Reason for the change: Use the recommended PHP5 syntax, better OO style. Compatibility: If you were calling a PHPlot internal function that got changed to 'protected', this will break. Please report this. + Fix default point shapes (Bug 1795972) Details: We now have 20 (vs 10) point shapes available, and by default we have 10 (vs 1) different shapes in use. The default size is now 6 pixels for all point shapes. Reason for the changes: Using different shapes helps distinguish the data sets. The existing 10 defined shapes were not enough, since some of them are not centered over the points, too small, or otherwise hard to see. The code to synchronize the point shape and size arrays was broken, and some dubious code to adjust sizes to even numbers needed to be fixed. Compatibility (1): If you have a points or linepoints plot with more than one dataset, and you did not use SetPointShapes() to configure the shapes, them your plot will change from using a diamond for all data sets to using different shapes for up to 10 data sets. Compatibility (2): Fixing the point size/point shape array size bug may slightly change the size of some shapes, but it now works the way it was documented and supposed to work. + Fix default data colors (Bug 1795971) Details: Defined a new set of 16 default data colors. The colors are different and contrast well against the default white background. The first 4 colors were not changed. Reason for the change: The default 8 data colors included two instances of orange, and one color which was invisible on a white background. Compatibility: Colors will change on any plot with more than 4 data sets where you did not use SetDataColors() to set your own data colors. + Re-used old function SetXDataLabelAngle() Details: SetXDataLabelAngle() now does something different. Reason for the change: This name was needed for a new function, to set the angle for the X Data Labels. The old use of this function was not documented, and marked "deprecated" in the code since around 2003-12-07. Compatibility: If you are still using SetXDataLabelAngle() to set both Tick and Data label angles, you need to use SetXLabelAngle() instead. + Separate controls for tick and data labels (Feature Request 2899921) Details: New functions SetXDataLabelAngle(), SetYDataLabelAngle(), SetXDataLabelType(), and SetYDataLabelType() to allow separate control over the angle and format of data labels, versus tick labels. Reason for the change: Allow Data Labels to use different formatting and angle compared to Tick Labels. Compatibility: The default behavior has been set up such that there should be no compatibility issues. For example: Old behavior: SetXLabelType() sets the type for both tick and data labels. New behavior: SetXLabelType() sets the type for tick labels and the default type for data labels. SetXDataLabelType() sets the type for data labels (overrides SetXLabelType). + X Tick Labels vs X Data Labels (Bug 2906436) Details: Regarding SetXTickLabelPos() and SetXDataLabelPos(): If only one of them is called, the behavior is unchanged (only that label type will be displayed). If both are called: Do exactly what was requested. If neither was called: display only data labels if any data labels are non-empty, else display only tick labels. Reason for the change: 1) Fix the long-standing problem behavior that by default PHPlot overlays tick and data labels below the X axis. 2) Fix order dependency between setting the position of tick and data labels. 3) Prepare for future extension of data labels, and allow both tick and data labels to be on if the programmer enables both. Compatibility: There are some cases where your plot will change. (a) Calls neither SetXDataLabelPos() nor SetXTickLabelPos(): Old behavior: Both tick and data labels displayed, possibly overlaid. New behavior: If there are any non-blank data labels, then show only the data labels, not the tick labels. Otherwise, show tick labels. (b) Calls both SetXDataLabelPos() and SetXTickLabelPos(), with other than 'none' for each position: Old behavior: The latter call was effective; earlier one ignored. New behavior: Independent of order, both calls are effective. ----------------------------------------------------------------------------- 2009-06-14 Release 5.0.7 Overview: This is the current stable release of PHPlot. The release adds one new feature, fixes a few bugs, and changes the license under which PHPlot is released. The PHPlot reference manual has been updated to match this release. The manual is available as a separate download from Sourceforge. The manual is also now available for on-line viewing at http://phplot.sourceforge.net See the ChangeLog file for more about changes and bug fixes. Licensing: PHPlot is now released on the terms of the GNU Lesser General Public License, version 2.1. (Previous versions of PHPlot were released under a dual "PHP/GPL" license.) The licensing change was authorized by the original author and copyright holder of PHPlot. New feature in 5.0.7: + Plot area margins can now be partially specified, using either SetMarginsPixels or SetPlotAreaPixels. In previous releases of PHPlot you had to either specify all 4 margins or none. Credit to adoll for this feature. Visible Changes and Possible Incompatibilities: + Y data range can change: As a result of the bug fixes in this release, automatically-calculated Y data ranges can change. If you have missing Y values in your data, and you let PHPlot calculate the Y data range (that is, you do not call SetPlotAreaWorld with a Ymin value), then the lower limit for Y can change. If you have a plot with data-data-error data type, different error values for different points, and let PHPlot calculate the Y data range, then either Y limit can change. Bug Fixes in 5.0.7: + Fix for bug 2803900: SetRGBArray('large') does not work: Corrected an array name usage problem. You can now select the large color map. Also PHPlot no longer overrides use of the PHP include path when loading the large color map, and now reports an error if the file is needed and not found. + Fix for bug 2791502 "Error plots treat missing Y values as 0": Missing Y values now with with data-data-error plots. + Fix for bug 2792860 "Wrong DataLabelLines with missing Y": Data label lines are now suppressed at missing Y values. + Fix for bug 2786350 "Missing Y data results in bad auto-range": Missing Y values are now ignored when calculating the Y data range. Bug report and analysis by mrten. + Fix for bug 2786354 "Incorrect auto-range for data-data-error": The Y data range is now correctly calculated for data-data-error plots when the error values differ from point to point. ----------------------------------------------------------------------------- 2009-01-20 Release 5.0.6 Overview: This is the current stable release of PHPlot. The purpose of this release is to fix additional problems with text spacing and positioning, and introduce some minor new features. The PHPlot reference manual has been updated to match this release. The manual is available as a separate download from Sourceforge. The manual is also now available for on-line viewing at http://phplot.sourceforge.net New features in 5.0.6: + Allow mixing GD and TrueType font text on the same plot You can use the new method functions SetFontGD() and SetFontTTF() to select a font and font type for text element (labels, titles, etc.) For example, you can have TrueType plot titles, and GD-fixed font labels. SetUseTTF() now sets the default text type, TTF or GD. This is fully backward compatible. + Extended label formatting See the reference manual for more information on these. New label formatting types are added: 'printf' (using a user-defined format), and 'custom' (using a callback function). For 'data' type formatting, a prefix and suffix can be added. (PHPlot previously had an undocumented suffix for 'data' type, which still works.) For 'time' formatting, the format can now be specified in the same function call rather than using SetXTimeFormat and SetYTimeFormat. For 'data' formatting, the precision can now be specified in the same function call, rather than using SetPrecisionX and SetPrecisionY. + Better control over line spacing in multi-line labels Line spacing can now be set separately for each text element using an additional argument to SetFont, SetFontGD, and SetFontTTF. The overall SetLineSpacing() value is the default for each text element that does not have a specific line spacing set. PHPlot now interprets the value set for line spacing as the number of pixels only for GD text. For TrueType text, it is a scale factor for the font's built-in line spacing for TrueType text. The equation used is: interline_spacing = line_spacing * font_natural_spacing / 6 where line_spacing is either the global value set with SetLineSpacing or a more specific value set with SetFont(), and font_natural_spacing is the amount of space between lines built-in to the TrueType font. The factor 6 should really be 4 (since PHPlot always used 4 as the default line_spacing, this would give the natural font spacing by default). But the text is too widely spaced with this value, and 6 was chosen to be more compatible for typical font sizes. Visible Changes and Possible Incompatibilities: + Line spacing Multi-line TrueType titles and labels will have different inter-line spacing. Since the text size affects the margin and plot area sizes, this results in slightly different sized features on any plot with multi-line TrueType text. Previous versions of PHPlot used a default 4 pixels for inter-line spacing of multi-line TrueType text, regardless of the font size. PHPlot now uses the 'natural' font inter-line spacing, adjusted by a line spacing parameter (per text type, with a global default). The same change can also increase the size of the legend box slightly. + Internal changes were made to the way font information is stored. Anything that directly references PHPlot internals regarding fonts will break. Usage also changed for the internal functions to size and draw text (ProcessText*, SizeText*) due to font data storage changes. + Changes were made to internal class variables used to store label formatting information. Anything relying on these internals may break. Bug Fixes in 5.0.6: #1932571: Data-Data Plot fails with same X values PHPlot will no longer hang if all X values are the same. But this is interim fix to force the X range to 1 to prevent the hang. Eventually, smarter automatic range code will handle this better. Credit to andyl for finding this. #1891636: Misaligned TTF X Labels PHPlot will now correctly line-up TrueType labels along the X axis. There were small but very noticeable errors before, when the text had descenders or lines with all short letters. ----------------------------------------------------------------------------- 2008-01-13 Released 5.0.5 Overview: This is the current stable release of PHPlot. The emphasis of this release is to improve text positioning, margin calculation, and error handling. Although this is considered a stable release, it has a large amount of changed code compared to the previous release 5.0.4. Two of the more complex components of PHPlot - text and margin calculations - were mostly re-written in this release. You are advised to carefully test your own applications with PHPlot-5.0.5 to see how your plots look. Refer to the README.txt file included in the release for information on reporting problems. Starting with this release, PHPlot no longer supports PHP4, since the PHP group officially declared end-of-life for PHP4 as of 31 December 2007. PHPlot-5.0.5 was tested only with PHP-5.2.5 and we are unlikely to address any issues using PHPlot with older versions of PHP. The PHPlot reference manual has been updated to match this release. The manual is available as a separate download from Sourceforge. The manual is now also now available for on-line viewing at http://phplot.sourceforge.net The callback feature added in 5.0.4 is now documented in the reference manual. It is still considered experimental and subject to change, however. Visible Changes and Possible Incompatibilities: + Dropped support for PHP4. + Eliminated remaining order-dependent behavior related to margins and text. PHPlot should now do nothing at all, except record parameters, until you draw the graph with DrawGraph. I believe this was always the intended behavior of PHPlot, but over time perhaps various pre-calculations and dependencies crept in. Fixing this simplifies processing and should lead to more consistent behavior. + The rewritten margin calculation code now uses actual sizes of all tick and data labels and tick marks, rather than guesses. Margins collapse to remove unused elements, but a minimum margin (currently fixed at 15 pixels) is applied so the plot edges don't get to close to the image edges. The result is that most graphs with auto-calculated margins will change in appearance. It most cases, the margins get slightly smaller. In other cases, earlier releases mis-calculated the margins, so this release will produce much neater margins. + The X and Y titles are now offset out from the plot area, not in from the image area. For auto-calculated margins this should not make any difference, but if you use SetMarginsPixels or SetPlotAreaPixels to set larger margins, the axis titles will move in closer to the plot with this release. + Changes were made to PHPlot internals, including removal of some class variables and functions, and addition of new variables and functions. These are documented in the ChangeLog. Relying on any internal variables or functions in an application using PHPlot is unwise. The following internal functions were removed: SetImageArea() DrawDotSeries() DrawLineSeries() CalcXHeights() CalcYWidths() DrawLabels() InitImage() DrawDashedLine() These were marked 'deprecated', were undocumented and unmaintained. TTFBBoxSize() This was replaced with SizeText(). + Line spacing set with SetLineSpacing() now affects TTF text as well as GD text. Previously, it only affected GD text. The default line spacing happens to be usable for TTF text. + Changes were made to error handling. PHPlot will now trigger a user-level error after producing an error image, instead of exiting. If no error handler has been set, it will exit, as before. But now the error message should also get logged, or written to the standard error stream, depending on the SAPI in use. You can now establish an error handler to catch most PHPlot errors and do some cleanup before exit. + PHPlot no longer accepts some invalid option values (such as a substring of a valid value, or empty strings) passed to functions. If your application aborts in CheckOption with PHPlot-5.0.5 but 'worked' with previous releases, them you were probably using an invalid option value. Bug Fixes in 5.0.5: #945439: x_tick_label_height not set correctly Exact sizes of labels are now used to calculate margins. #1813070: Bad position for multi-line TrueType text Fixed as part of text functions rewrite. Use correct basepoint (lower left of each line) when positioning text lines. #1813071: Wrong title height for multi-line TTF text Fixed as part of text functions rewrite: calculate height of multi-line text correctly. Also now uses the line-spacing setting. #1813474: DrawText alignment arguments wrong Fixed so 'top' and 'bottom' now have the usual meaning: top means align top of text with reference, bottom means align bottom of text. This was switched before. Changed every internal caller to compensate. #1816844: Fix order dependency for setting titles Defer processing of title strings until DrawGraph(), so it doesn't matter if fonts, etc. are set before or after. #1819668: Horiz. align multi-line text: GD vs TTF The text functions were rewritten to draw TTF text line-by-line, like GD text, and correctly align each line. #1823774: Default Font Path and Error Message Error handling has been improved to make sure a message is logged, in addition to the error image, and use error_trigger rather than exit. #1826513: FIXME in DrawLegend: Max label length The actual size needed for legend text is now used. #1827263: Spoiled up pie-chart if $val is close to zero Fixed by skipping over any segment that rounds to 0 degrees of arc. (The GD function uses integer angles only, and 0 degrees means draw a complete circle.) #1836528: Insufficient checking of parameter values Rewrote validator function to reject improper parameter values. #1843012: Make margins, drawing consistent Margin code logic was rewritten and checked for consistency. #1856207: Margin error with 'xaxis'/'yaxis' position Margin space is now allocated for ticks and labels if their position is 'xaxis' or 'yaxis' and the axis is at the plot edge. This is not a perfect fix (the axis could be close but not at the edge). ----------------------------------------------------------------------------- 2007-10-20 Released 5.0.4 Overview: This is the latest stable release of PHPlot. We are abandoning the 'rc' version naming style, because we don't consider these last releases 'release candidate' versions. As we continue to make changes to PHPlot, we are not converging toward a final "5.0" release, however we do consider these releases stable and complete enough for production use. This release fixes a number of problems and introduces a few new features. The PHPlot reference manual has also been updated to match this release. New material has been added documenting some of the PHPlot internals. The manual is available as a separate download from Sourceforge. Code Cleanup: Some code cleanup is going in to this release. It is hoped that these changes will not impact any existing scripts using PHPlot, but will make the PHPlot code itself easier to understand and maintain. PHPlot now avoids making changes outside its own class definition. There are no longer any functions defined outside the class, nor any constants. Three constants (MINY MAXY TOTY) were removed, and 2 functions were removed (see Visible Changes below). Also PHPlot no longer sets the PHP error reporting level to E_ALL. Although we highly recommend setting error reporting to E_ALL in your php.ini file or scripts, it is not right for PHPlot to assume that you want it. Visible Changes and Possible Incompatibilities: Arrays containing color and style information are used with several PHPlot functions to control the plot style array. These functions are: SetPointShapes, SetPointSizes, SetLineWidths, SetLineStyles, SetDataColors, SetDataBorderColors, and SetErrorBarColors. The arrays passed to these functions MUST used sequential integer 0-based indexes. This is what the PHP manual calls "Usual integer indices (starting from zero, increasing by one)". This is the type of array you get in PHP by default if you use array() without specifying key values, or use the empty-bracket assignment operator to add values onto an array. In previous versions of PHPlot, some of these functions would also work with string-indexed or non-sequentially-indexed arrays, but this was not clearly defined. Starting with PHPlot-5.0.4, only arrays with "usual integer indices" work, and other array indexes will cause errors. Some internal-use-only functions have had their usage changed or been removed. If you are using functions that are not documented in the PHPlot Function Reference in the manual, your code may have to be changed. As part of the code cleanup, two functions which were defined outside the PHPlot class were removed: array_pad_array(), and array_merge_php4(). If your code used these, you need to fix your code. The routines which accept a color name, value, or array now check for a valid color name. If you specify a color name which is not in your current color table, PHPlot will draw an error and exit. Previously, PHP would report an index error, continue, and get a 'headers already sent' message. Bug Fixes in 5.0.4: #1813021: Miss-positioned right-justified vertical GD text. Fixed DrawText() to correctly position 90 degree right-justified text drawn in a fixed GD font. This could be seen with 90 degree Y tick labels. #1790441 Removed destructor/shutdown function, and no longer recommend using reference assignment when creating a PHPlot object. This was interfering with memory usage. Credit to annajilly for analysis. #1779115 SetLegendWorld() failed because of undefined variables. The required order dependency was too hard to meet. This is now fixed. You can now use SetLegendWorld anywhere before DrawGraph. #1726810 (feature request, but actually a bug fix) Ignore empty strings as data labels when doing time or data label formatting. These would previously produce errors or bad formatting. Now you can omit labels as needed even with time and data formatting. Credit to exgerhardr for finding this. #1605555 Y data labels used wrong font and not formatted (bar charts only). #1208054 Localization of number formatting in 'data' format type. PHPlot will attempt to format the numbers in a way appropriate to your locale. You can also force the formatting with the new function SetNumberFormat. Credit to David Hernández Sanz. #937944 X/Y Tick counts: PHPlot could draw one two few Y tick counts, and one too many X tick counts. This is not a perfect fix, and more work is needed here, but this fixes an error case in both X and Y values. New Features in 5.0.4: New function SetLegendStyle allows control of the alignment of text and color boxes within the legend. Also allows removing the color boxes. Based on bug #1208054. Credit to David Hernández Sanz. New function SetNumberFormat. See bug report #1208054 above. Callbacks are added. PHPlot can call back your functions while generating the plot. This is experimental, and documented only in the file "Callbacks". Credit to annajilly for the idea and design. ----------------------------------------------------------------------------- 2006-11-13 Released 5.0rc3 Overview: This is an interim release. It has been a long time since the previous release 5.0rc2, and there have been a lot of changes. There are still more changes likely to go in before we have "5.0", but there are enough for now. The PHPlot Reference Manual has also been released, and is available as a separate download from Sourceforge. PHPlot users and developers are strongly encouraged to read the manual. This release does not include the "doc/" and "examples/" directories of previous releases. The Reference Manual contains more complete and up-to-date information and examples, and I am unable to maintain the doc/ and examples/ files while also maintaining the Reference Manual. If you need those files, they can be accessed with the Sourceforge web CVS browser. New Features: The emphasis for this release is bug fixing, so there are few new features. + You can now suppress lines or points on individual plots in a linepoints graph. This feature was added because I needed a graph with several linepoints lines, but also with a solid line showing an "80% goal". Use SetPointShapes with the value 'none' in the array to suppress the point markers for that plot (and only draw the line). Use SetLineStyles with the value 'none' in the array to suppress the line for that plot (and only draw the point markers). [Bug # 1594458] + Bar charts can have data labels above the bar with the value. Turn these on with SetYDataLabelPos('plotin'). This is somewhat experimental, since there isn't a lot of room for labels on top of the bars and you may find the results are not useful. Visible Changes: Here are the more significant changes in this release. These are changes which may affect existing scripts and output from PHPlot. See the ChangeLog file for information about all changes and bug fixes. + A bug fix on bar chart bar borders results in black borders around the bars if shading is turned off. The border was previously covered up, but was supposed to be there. If you need borderless, unshaded bars, you need to use SetDataBorderColors to make the borders the same colors as the bars. [Bug # 1096197] + TrueType font pathname handling was fixed. You no longer need to use SetUseTTF(True). You can either use full paths to the font files with SetDefaultTTFont() and SetFont(), or you can call SetTTFPath() to point to a directory of font files, and then use simple font filenames without paths in SetDefaultTTFont() and SetFont(). [Bug # 1144644 plus several others] + There have been several fixes regarding automatically calculated ranges and scales. The result is that you may see less extra space and fewer tick marks in some cases. + A fix was made to bar and stackedbar graph bar widths in order to get the X axis labels to properly center. As part of the fix, the bar widths now match between the two graph types. (Before this fix, the bars were narrower in bar graphs compared to the same data plotted as a stacked bar.) As a result, bar graph bars will now be drawn with wider bars, and stackedbar graph bars will be narrower. You can adjust this with the new class variable bar_extra_space. [Bug # 1437912] + Dot shapes and sizes were off by 1 or 2 slots in the array of shapes or sizes. After the fix, you may get different dot shapes or sizes per plot line. [Bug # 1096194] Testing: Since its output is visual (graphics), and it has so many interconnected modes and options, PHPlot is difficult to test. But at least we are now trying. I have a collection of PHPlot scripts (currently about 60) and a script to run through them. The script automatically checks that: 1) Nothing was written to the standard error stream; 2) An image file of size greater than 0 was written; 3) Neither the test script nor PHPlot did exit(). This catches cases where PHPlot aborts with DrawError(). The automated test is an easy way to check for serious regression, but you really need to inspect the output files to validate PHPlot. This takes a little time, and it is easy to overlook problems. The real issue is test coverage. Just as we can be sure that future PHPlot releases will pass the test collection, we can also be sure that future bug reports will be written against untested cases. -------------------- 2006-11-08 PHPlot on Sourceforge has a new maintainer: lbayuk -------------------- 2004-10-24 Released 5.0rc2 --------------------