summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/doc/latex/pgfplots/todo.txt
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/doc/latex/pgfplots/todo.txt')
-rw-r--r--Master/texmf-dist/doc/latex/pgfplots/todo.txt1440
1 files changed, 1386 insertions, 54 deletions
diff --git a/Master/texmf-dist/doc/latex/pgfplots/todo.txt b/Master/texmf-dist/doc/latex/pgfplots/todo.txt
index a38eda7be85..780eb01a8a0 100644
--- a/Master/texmf-dist/doc/latex/pgfplots/todo.txt
+++ b/Master/texmf-dist/doc/latex/pgfplots/todo.txt
@@ -1,19 +1,702 @@
+todo legend:
+'-' means: not yet processed, is still to do
+'+' means: processed
+'X' means: has been checked and deleted
+'~' means: partially processed
+
-------------------------------------------------------------
Testing
-------------------------------------------------------------
last test verifications:
- pgf CVS pgf 2.00
-pgfplotstests 2009-02-16 2009-02-16
-manual 2009-02-16 2009-02-16
-example latex for 1.2 2009-02-16
-example context for 1.2 2009-02-16
-example plain tex for 1.2 2009-02-16
+ pgf CVS pgf 2.00 pgf 2.00+compat=default
+pgfplotstests 2009-12-30 2009-12-30 2009-12-30
+manual 2009-12-29 2009-12-30
+example latex for 1.3 2009-12-30
+example context for 1.3 2009-12-30
+example plain tex for 1.3 2009-12-30
+tests context 2009-12-30
+
+I NEED MORE TESTS!
+The test suite needs to be developed!
+
++ tests for scan line length stuff for all input methods
++ tests for the placement of tick scale labels
++ test whether title placement works as it ought to do in previous versions
+- test 'colormap access=direct'
++ test all z buffer variants
++ test gnuplot and log sampling 3D
+- test log sampling in 3D
++ verify mesh/ordering=colwise
+- test of compat keys
+ -> can they be used as arguments for an axis?
++ test those tickpos num keys! especially in combination with axis line
+ variations. Also test ticklabel pos
+
+-------------------------------------------------------------
+USER INTERFACE DECISIONS
+-------------------------------------------------------------
+
+- the axis line combination styles can't be adjusted for 3D because they are
+ evaluated too early.
+
+-------------------------------------------------------------
+MISC
+-------------------------------------------------------------
+
++ disable pgfplots CVS?
+
+- documentation todo:
+ + table + error bar expr
+ + document examples for 3d LINE plots.
+ + the 'tick label anchor' is something which I do not understand myselfes.
+ It was some ad-hoc fix for something, but for what!?
+ there is a fixme in the manual
+ + document the external lib -- it is now part of pgfplots!
+ also document the file href thing
+ + the '\x mode' key is hard to find. The same holds for 'log basis \x'.
+ + docs of clickable lib is not up to date (for log basis \x)
+ + document the trafo shift of scatter/@pre marker code.
+ + compat mode
+ -> perhaps in preliminary section.
+ + 'variable y'
+ - label placement methods:
+ + '[xyz]label shift',
+ + 'ticklabel cs',
+ + '[xyz]ticklabel cs',
+ + special anchors
+ + 'near ticklabel',
+ + 'near [xyz]ticklabel',
+ + special 'sloped' feature
+ + '/tikz/sloped' for labels,
+ + '/tikz/sloped like [xyz] axis'
+ + every 3d description
+ + every 3d view {<h>}{<v>}/.try
+ + the legend feature for mesh/surf plots:
+ 'every mesh legend' style and the default 'legend image code'
+ + document how to make line plots in 3d
+ - perhaps: display KNOWN key paths in key definitions in gray, not in red?
+ + check if area cycle list is documented
+ + nodes near coords
+ + the 'cube' mark and its parameters 'cube/size [xyz]'
+ + provide a TEXMF config file which sets appropriate limits!
+ + document the anchors which are only local to an axis!
+ - document how to fix problems with overlapping axis labels.
+ + add 3D scatter plot examples
+ + there are still several FIXMEs in the docs
+ + provide sample config file for miktex and document how to enable it
+ -> necessary if someone wants to use the external lib!
+ X document which is the default view of matlab or gnuplot!
+ + document the 'to listener' feature.
+ + \pgfplotsmathviewdepthxyz and \pgfplotsmathfloatviewdepthxyz
+ + document the trafo shift of scatter/@pre marker code.
+ + provide direct pdf link to pgfplotstable.pdf as in hyperref?
+ + check if area cycle list is documented
+ + nodes near coords
+ + the 'cube' mark and its parameters 'cube/size [xyz]'
+ + provide a TEXMF config file which sets appropriate limits!
+ + the 'surf' and 'mesh' plots belong to /pgfplots, not /tikz.
+ + it is not documented how to provide braces exactly in parametric plots
+ + the key prefix checker in docs is broken, see /pgfplots//tikz/sloped like x axis
+ + finish the auto-generation of hyperlinks:
+ + something like |\pgfplotsset{| doesn't work properly:
+ + the argument will become ''
+ + the UI introduces closed braces
+ + replace \declaretext and |...| things by appropriate macros.
+ + disable this expensive stuff during image externalization
+ + generate labels for command keys, commands and environments automatically
+ + check if it is possible to create links within codeexamples automatically or semiautomatically
+ + document the macros
+ + verify that the spacing is not affected by the new labels
+ - the cycle list args could be highlighted -- but leads to bug!
+ + document some important pgf macros somewhere:
+ \pgfmathparse, \pgfmathresult, \node, \matrix, \tikzset, \pgfeov, \pgfkeysvalueof, \pgfkeysgetvalue,
+ /tikz/xshift, /tikz/yshift
+ + it would be interesting to parse coordinates '(...)'.
+ + the \pgfplotsshortxystylekey things need to be adapted.
+ + optimize manual for display speed by reducing complicated 3D plots (interp shadings)
+ -> the old shader=interp values are still there, with comment signs!
+ Check them!
+ + document 'allow reversal of rel axis cs'
+ + document unbounded coords key
+ + document z buffer
+ + document 'plot box ratio={<x>}{<y>}{<z>}' (for 3D axes)
+ + document support for nonuniform colormap specs
+ + |log basis [xyz]| key
+ + scatter src vs point meta
+ + 3D
+ + view and its subkeys az and el
+ + color bars
+ + document that 'shader=interp' produces smaller pdfs, requires less time to
+ typeset in TeX and produces less time to display in acroread.
+ At least for large grids.
+ + \addplot now detects behavior options and style options automatically
+ + there are a lot of reference to behavior (or behaviour) options in the text
+ + document expression plotting in plot table
+ + meta expr (does that need another name!?)
+ + 'axis description cs'
+ + colormap access=map|direct key.
+ + document simplified format of colormaps
+ + changes in alignment
+ + end-of-scanline markers
+ + 'rel axis cs'
+ + API for \pgfplotspointouternormalvectorofaxis
+ + API for
+ + \pgfplotsqpointoutsideofaxis
+ + \pgfplotsqpointoutsideofaxisrel
+ X \pgfplotsqpointoutsideofaxistransformed
+ X \pgfplotspointoutsideofticklabelaxis
+ X API for \pgfplotspointticklabelcs
+ + API for \pgfplotsvalueoflargesttickdimen
+ + API for \pgfplotsticklabelaxisspec
+ + API for \pgfplotspointunit[xyz]
+ + API for \pgfplotsconvertunittocoordinate{[xyz]}{dimen}
+ X API for \pgfplotsqpointxyzabsolutesize
+ + API for \pgfplotsunit[xyz]length
+ + API for \pgfplotsunit[xyz]invlength
+ + API for \pgfplotspointaxisorigin
+ + API for \pgfplotspointdescriptionxy and the q variant
+ + API for \pgfplotspointaxisxy
+ + API for \pgfplotspointrelaxisxy
+ X API for surf shading library
+ -> document the problems with pdf2ps for surf shading! pdf2ps samples
+ that stuff manually instead of producing level3 postscript!
+
+- clickable lib:
+ I have the impression that acroread fires warnings only for the manual - not always when the clickable lib is used. Why!?
+
+-------------------------------------------------------------
+PGF / TikZ Development:
+-------------------------------------------------------------
+ - external lib: 'list and make' does not work together with \include (aux files!) or other file writing things -- at least not if one tries to do that in parallel.
+ + consider the "plot function" patch from Andy Schlaikjer
+ + it seems fadings don't work correctly with externalization!?
+ - include addition of Christophe Jorssen for MD5 checksums in external lib
+ + write new sub-package 'pgfmanual.sty' which contains a good user interface to the manual styles, environments and all that.
+ + external lib: catcode changes inside of pictures do not work properly.
+ - the fpu can't be used inside of paths. That should be fixed.
+ -> the problem is that paths may use \pgfmath... routines directly.
+ -> this should work! At least with the public math macros \pgfmathadd.
+ The \pgfmathadd@ might be implemented differently.
+ + in the manual, the first two arguments of
+ pgfqkeysactivatesinglefamilyandfilteroptions were inverted.
+ + some predefined filters do not process unknown options correctly
+ - external lib in pgf: think whether 'empty image extension' is a bug or a
+ feature.
+ - fix landscape bug (pdflscape) in external lib (PGF)
+ + the pgf math parser has wrong precedence for '-' prefix op:
+ exp(-x^2) is wrong.
+ - pack the default 'system call' for dvips etc into drivers!
+ - active '|' characters result in compilation bugs (\usepackage{program})
+ - 'text height=1em' realisieren mit [node font units]1em
+
+- compatiblity code todo:
+ - the example for plot graphics (with view=0{90}) doesn't work.
+ -> that's the 'exp(0-x^2)' bug which is still in pgf 2.00!
-------------------------------------------------------------
BUGS / FIXES
-------------------------------------------------------------
++ the tick pos stuff works (puh!)
+ However, there is an inconsistency with the axis lines stuff:
+ 'axis lines=left,tick pos=right'
+ will yield almost the same effect as 'axis lines=right'. However, the
+ 'axislinesnum' still assumes it is at the left.
+ Thus, there are potentially some inconsistencies...
+ -> BUT THAT'S LOW PRIORITY
+
++ tick align=outside doesn't seem to affect the ticklabel cs although it
+ probably should (tests in pgfplotstest.axislines.tex).
+ -> check also display styles for labels!
+
+- manual: 'label style' and 'xticklabel style' are not auto-crossrefed
+
++ extra ticks do not work with '3d box=complete'
+
+- the FPU has somewhere spaces; at least it treats them differently from \pgfmathparse.
+
+- I have seen that 'plot table' with very large files can produce pool size problems -- even if the coordinates are all filtered away.
+ In other words: the code can't simply read a file and throw its contents away.
+ The problem appears to be some math parsing using the table/x expr and friends.
+ 'pool size = names of control sequences and file name'
+ -> the math parser could be improved with \ifcsname
+
++ I had just a problem with 'log basis y=2' : the x axis also used basis 2, but minor ticks basis 10.
+ It was the second plot; the first had also log basis x=2
+ -> the problem is the 'log basis ticks' style which changes 'log number
+ format code' globally for the axis.
+
+- axis lines and 3D: some tick lines are not drawn, see manual examples
+
+- check for placement of tick scale label for compat=newest
+ -> I improved them for 2d and 3d
+ -> needs some further checks, I guess
+
+- the every colorbar style is more or less unusable because it is redefined by
+ the 'color horizontal' styles etc. Is there something more intelligent?
+
++ reversed axes:
+ + color bars can't be reversed; the shading disappears
+ + reversed axes and centered axis lines:
+ the label placement style is incompatible.
+ - axis lines=center + reversed axes: the tick labels are placed somewhat
+ too near the axis... see the test in alignment subsection of testcases
+ -> perhaps the "normal vector" points into the wrong direction?
+ -> It is the tick@offset computed in the tick label placement
+ routines. I have implemented special handling for this case, but I
+ do not really understand the problem.
+ FIXME
+ - tickpos is wrong
+
+- coordinate filters for log axis are not as documented: the 'unbounded coords' key won't be processed correctly.
+
+
+- providing zmin/xmax to an axis activates 3D mode, ok -- but lower dimensional input routines appear to fail.
+
+- one can't provide 'scale' as argument to a (3d) axis
+
+
++ axis line variations: they pose problems for
+ a) 3d axes
+ b) reversed axes.
+
+
++ The Adobe Reader crashes on p 68 of the manual (while Foxit shows and
+prints without complaint). 27.11.2009 reported by J. Goebel
+
++ check the old code with 'pgfplotsautoanchor' for tick labels.
+ Is that still up-to-date? NO
+ Perhaps it should be replaced with something better? YES
+
+- |xlabel near ticks| links to |xlabel| in manual
+
+- recently, I used \pgfplots@command@to@string. But: for arguments like `\table' this yields `\table ' including a space. Check if that poses harm.
+
++ the pretty printer appends '{}' to known csnames.
++ the pretty printer appends ')' to |(|
++ the xref to |scatter src| is broken... why?
+
++ \thisrow inside of column creation does not respect aliases
+- \getthisrow still has to be fixed
+
++ the \pgfplotsretval key is uses globally and locally. Fix that.
+ There is also \pgfplotslocretval which should be eliminated.
+ Better: use \pgfplotsretval for local ret vals and
+ \pgfplotsglobretval for global ones. Better still: avoid global return values if possible.
+
+- it may still happen that log-axes get only *one* tick label (in my case 10^{-0.2}). That should never happen.
+ The range is about ymin=4.7e-1, ymax=9.5e-1
+
++ 3D and special axis lines doesn't work at all.
+
++ sanitize 'plot file' by appending '0' coordinates at the end of the current line
+
++ the 'z buffer=auto' key in every mesh is stupid. What if I don't want it!?
+- log samples in plot expression for 3D plots
+- different log bases and gnuplot
++ 3D gnuplot: z buffer fails (see tests)
+
+- I tried placing a named coordinate inside one axis and using it in
+ another. It failed.
+ % CF: The axis is drawn inside of its own picture which will only be shifted if everything has been drawn. That will be the origin of this problem I guess
+
+ Miraculously I can use the coordinate outside axis env. So I have
+ reached the following solution:
+
++ allocate a \newread for input files to avoid compatibility problems with other packages.
+
+- the compatibility things should be enabled automatically for some parts:
+ - 3D
+ - color bars
+ - reversed axes
+
+- plot coordinates doesn't check too well if
+ 1. \addplot3 is used but only two coords are given
+ 2. \addplot is given but three coordinates are provided (also for plot expression)
+
++ gnuplot: set terminal table seems to be deprecated.
+- gnuplot and 3D
+ -> I need a shared interface to prepare the required keys for expression plotting
++ scatter/pre mark styles should OVERWRITE the current setting instead of append. Provide additional keys with suffix '*' which provide the "append" feature.
+
++ if view leads to ||e_i| == 0, this results in an error somewhere (infty
+ occurs)
+
+X change UI of ticklabel cs: provide an option 'ticklabel cs:[<interpreter>]<coord>,<dist>' which specifies how to understand "<coord>". Choices:
+ - 'display'
+ - 'rel coord'
+ - 'abs coord'
+ is that really useful ?
+
++ plot3 table: the scanline detection does not always work (seems to need an empty line as last line)
+
++ the \pgfplotsdeclareborderanchorforticklabelaxis does not work if someone changes the shape! The shape changes occur AFTER my command.
+ -> solution idea: implement some sort of "unknown shape handler"!
+
++ 3D: very long labels are not completely correct: they may run into the axis.
+
+- the compat things are not yet complete: I wanted to check when it is really necessary (for example if 'x dir' is used)
+
++ the 'check tick show thing doesn't work for non-boxed axes!
+
++ BUG IN \jobname with " --->> IS INVALID
++ there is 'samples y' and 'variable y' but 'y domain'!
+
++ ich habe gerade das Problem, dass ich fuer einen Plot nur eine
+ y Achse moechte. Ich habe "axis y line=right" gesetzt. Nur sobald
+ ich "axis x line=none" einfuege, verschwinden die Tickmarken an
+ der y Achse...
+
+- the nodes near coords feature produces unexpected results when used together
+ with markers -> this is due to the default configuration of scatter plots.
+
+
++ provide a meaningful error message when mesh plots fail due to unbounded
+ coords - I don't want to waste time with checks. (could I optimize the
+ checks??)
+
++ I have removed the 'surf' option from \addplot3 {...}; -> check it ! it
+ should be moved to some default style; maybe cycle list or so?
+
++ the auto z buffer may lead to errors if cols and/or rows is empty.
+
++ FPU and '<' operator didn't work!?
+
++ the 'prepare@#1coord' doesn't check for unbounded coords. Besides, it appears
+ to be wrong - maybe I should rewrite it.
+
++ one my recent changes leads to 'meta data 25.000' is unbounded for whatever
+ reasons. Furthermore, \addplot3 {x^2}; lead to a bunch or error messages.
+
++ forget plot and legends do not work
+
+- check whether /pgfplots/ keys are processed properly in legends. This is
+ certainly not the case for the \label/\ref legend!
+ -> which ones are the problem?
+- the ybar style won't be set inside of \label{}
+
+
+- fix the bug-related FIXMEs in src
+ -> collect them:
+ -
+
++ providing 'ybar stacked' to the axis and 'ybar' to each plot seems to cause
+ problems (see test case per Mail)
+ -> that's because the '\addplot' ybar can't distinguish between /tikz and
+ /pgfplots paths!
+ + To stay compatible, I need to make sure that \addplot[ybar] actually uses
+ \addplot[/tikz/ybar]. That's how it is documented.
+
++ colorbar impl:
+ + determine correct height such that it has the same as its parent.
+ + determine all styles which need to be inherited.
+ + fix the style-restore routine! It eats too many '#' chars!
+
+
++ the 'plot table' detection of gnuplot files is buggy - it can fail for example
+ if there are 2 comment lines and 3 columns (with headers)
+
++ the xtick=data feature doesn't check for double occurances.
+
++ It appears the (new) placement of tick scale labels is wrong for 2d axes.
+
++ the '[xyz]ticklabels' key does NOT work any longer! It fails if some of the
+ ticks fall outside of limits.
+
++ the meta stuff is not sanitized: check for NaN or INF.
+
++ z buffer=sort does not respect LOG axes properly!
+
++ z buffer=auto should be added.
+
++ table package and unbalanced columns appears to be buggy.
+ -> need use 'nan'
+
++ I observed problems with the 'title' placement in 3D plots!?
+
+- axis equal for semilog plots is not correct (?)
++ something is wrong with the log basis stuff. Did I mess something up!?
+ + fix this! For reasons of compatibility, it might suffice to modify the
+ clickable lib since the display of the plots is correct (base 10). Any
+ internal UI special cases might still rely on base e (and it might be more
+ efficient to rescale just tick labels!)
+ - document that special handling to reduce confusion!
+
++ context incompatibility: \definecolor is defined differently in context, leading to bugs (occurs for 'mapped color')
+
++
+ \pgfplotsset{every axis/.append style={font=\footnotesize},
+ tick label style={/pgf/number format/1000 sep=},
+ xticklabel={\pgfkeys{/pgf/fpu}%
+ \pgfmathparse{round(exp(\tick))}%
+ \pgfmathprintnumber{\pgfmathresult}}}
+
+ to see the real tick numbers in a semilogxaxis, but when I use the former
+ fake plot as the first of my plots, it behaves as if I hadn't used these
+ options. When written in any other position it works as expected.
+
+ More specifically, this only happens when using xtick=data. If the ticks are
+ specified as a list, the bug doesn't show up.
+
+
++ there is 'ticklabel dist' and 'label shift'. Use the same naming convention!
+
++ 'shader=interp' still does not support 'ordering=colwise'
+
++ 'view={0}{90}' does not set label styles correctly
+
+- backwards compatibility problem:
+ axis descriptions can't contain /pgfplots/ styles any longer! This is a key
+ path issue :-(
+
++ the clickable lib output is shifted somehow (at least for log plots). It
+ appears it does not respect the new alignment stuff properly.
+
++ the 3d labels still need a good initial style - and a user interface to set
+ it.
+ idea: 'every 3d axis' is a style which can set axis descriptions or tikz keys.
+ + all descriptions styles need to be set up before they are used.
+ + changes to these styles may only be done when the axis' dimension (d=2 or
+ d=3) is clear - and the associated initial styles are installed. Then,
+ modifications may be applied.
+ Idea: implement all that stuff when 'every axis' is used. But that has
+ '/tikz/' has default search path...
+
+- I fear plot gnuplot may not reflect the latest changes - at least not for 3D!
+ - log basis
+ - plots R^1 -> R^3 (parametric)
+ + plots R^2 -> R^3 (parametric)
+ -> may require 'u' and 'v'
+ - using other variable names (see 'set dummy')
+ + ydomain is not set
+
++ the \x, \y, \z etc. macros in the table expression plotter should be
+ eliminated! They pose name conflicts.
+
++ the '/tikz/variable' key can't be provided as argument to an axis (missing
+ family)
+
++ the tick scale labels need to be placed with 'ticklabel cs'. That's difficult,
+ but necessary.
+ + 2D
+ needs to be improved!
+ + 3D
+
++ the color bar is an "axis description" -- but it can't be placed like other
+ axis descriptions!
+
+- BACKWARDS COMPATIBILITY BREAKDOWNS:
+ 1. reversed axes with "manual hacks":
+ - the description cs won't be reversed for negative axes,
+ - the anchors won't be reversed for negative axes,
+ - the 'ticklabel pos' key is no longer reversed for reversed axes,
+ 2. Skewed axes
+ - the description cs won't be skewed for skewed axes (and it should not),
+ 3. the tick label positioning may not work as before.
+ - possible solution: write the required "activation" option into every code example!
+
+- the backwards-compatibility issue can be solved by
+ - a '/pgfplots/labels near ticks' style whichs sets [xy]label style
+ - a '/pgfplots/labels absolute' style for the "classical" default
+ - small text below (above?) every code example
+ "% preamble: \pgfplotsset{labels near ticks,width=7cm}"
+- the "reversed axis" backwards compatibility problem could be solved by
+ a special mode which restores the old, deprecated handling of
+ - anchors,
+ - description cs,
+ - tick label positioning,
+ - ...
+ this could be checked easily: if x<0pt (or y<0pt), the backwards compatibility modes must
+ be enabled otherwise it is an error.
+- Ideas:
+ restore ALL OLD features and provide them using a compatibility interface!
+ - The compatibiltiy interface operates using pgfkeys and simply exchanges
+ implementations with \let.
+ - I should derive conditions which require a choice between compatibility
+ mode and normal mode.
+ + UI:
+ compatibility/<feature name>=before 1.3|newest
+ compatibility=before 1.3|newest (a style which sets all)
+ + I suppose this affects
+ + \pgfplotspointdescriptionxy
+ + the "real" anchors
+
++ I need a solution to rotate labels correctly and make alignment in a good way
+ -> probably the "sloped" method of pgf?
+
+
++ I fear the 'plot gnuplot[<opts>]' thing does not properly process <opts>.
+
++ what happens if 'point meta [min,max]' is provided inside of \addplot?
+
++ it appears the recent changes update the bounding box - disabling overlay for
+ tick labels
+
++ the 'legend image code' is again buggy! Try ybar! This here is the reason: one
+ can't set draw/fill mode from within a scope!
+ \begin{tikzpicture}
+ \scope[fill=blue,draw=red]
+ \path (0,0) circle (10pt);
+ \endscope
+ \end{tikzpicture}
+
+
++ the 'x={(x1,x2)}' option(s) are buggy: the complete vector length needs to be
+ scaled by the datascaling routine, not the single components.
+
++ ticklabel interval stuff doesn't work properly
+
++ potential problem with stacked y bar and semilogyaxis, see bug report per Mail
+
++ stacked plots do not sanitize the input arguments: it may happen that too few
+ (or too much) coordinates are given.
+
++ Memory limitations in MikTeX:
+ see http://blog.antiblau.de/2009/04/21/speicherlimits-von-miktex-erhoehen/
+
++ shader=faceted must be provided after 'surf'. That's not what I wanted.
+ ideas to fix the problem:
+ 1. introduce a further 'mode' which enables drawing and/or
+ filling for meshmode.
+ So, 'mesh' would set fill to false and the fill color is irrelevant.
+ For 'surf', the state could depend on the current shader - either
+ only the fill color or both, fill and draw color will be used.
+
++ BUG: empty axes and one of my newer changes (bblowerleft) conflicts.
+
+- BUG: in empty axes, 'xtick=\empty' is ignored.
+
+- finish impl of ticklabel pos.
+ I should use the same thing for tickpos as well.
+ And: the default arg processing which uses ticklabel pos = tickpos needs to be
+ fixed.
+ the 2D axes are wrong.
+
+
+- The automatic tick labeling sometimes produces inconsistent or confusing
+ labels:
+ 1. engineering and fixed number style are mixed up.
+ 2. If range of an axis is so small that the labels differ only on the third
+ decimal, still only two decimals are used.
+
++ axis y line=right, FAILS to produce correctly placed tick
+ labels -> only in manual!?
+
++ ymin=0.9 is ok while ymin=.9 is not ok -- update number parser.
+
++ legends are currently broken!
+
++ the tick labels on axis boundaries are often missing. I suppose this is due to
+ rounding inaccuracies or '<' instead of '<='. check that!
+
++ new alignment: origin anchors for unfinished axis is not updated.
+
+- 3D: axis equal implementation might not be correct (at least not for view
+ special cases)
+
+X perhaps the ASCIIHexEncode would be a useful addition for the pdftex driver of
+ surfshading as well...?
+ no, it isn't. pdf2ps still generates huge sampled postscript files.
+
+- 3D:
+ error bars and
+ stacked plots
+ need to be updated.
+
+- the \thisrow commands in the table package does not (always) respect aliases!
+
++ check for the @non@legend@options - I suppose they are deprecated now and
+ waste computation time.
+
++ the new key processing which skips every /tikz option in \addplot might not be
+ correct - there are several plot related exceptions like /tikz/id etc which
+ SHOULD be processed. Make sure I have all of them.
+ Besides: what happens if someone uses /tikz/draw explicitly? I am not sure if
+ that hurts...
++ the recent search path construction WILL also set tikz options during
+ \addplot.
+ There won't be any paths during \addplot - but I am not sure if there can be
+ any scoping problems related to the graphics state.
+ -> that stuff produces problems with /tikz/ybar vs. /pgfplots/ybar!
+
+
+
++ the view argument should be similar to gnuplot /matlab. I fear I have
+ exchanged some of the directions.
+ In matlab, the argument is '{yaw}{pitch}' instead of '{pitch}{yaw}'
+ Furthermore, the rotation axes are different. view={0}{0} in matlab shows
+ the x axis horizontally and the z axis vertically - the view direction is
+ (0,1,0) -- for me, this would be (0,0,1).
+
++ pdf2ps still fails for interp shader - it has a limitcheck exception. Perhaps
+ the number of bits is too large for ps?
+ -> a very small stupid test with 8 bits per coordinate and 8 bits per cdata
+ worked
+
+- interp shader is displayed transparently in evince
+
++ clickable plot lib produces visual artefacts in acroread
+ -> the 'hidden' flag appears to be incompatible with figure environments!?
+ - fixed in recent hyperref drivers of pdftex; was actually a bug of hyperref
+
+- 3D: the use of \addplot3 and \addplot is not sanitized properly
+ Possibilities:
+ - used \addplot when \addplot3 should have been used
+ - used \addplot3 where \addplot should have been used.
+ What can happen here!? Shouldn't this work in every case?
+
+
++ the 'current axis' node is not defined until the first axis descriptions are
+ drawn. That should be fixed by defining the low-weight shape before processing
+ the stored path commands.
+
++ The following fails:
+ \addplot+[
+ black] plot coordinates { (0,0) (1,1) };
+
+- The "xtick" value is not applied unless there is a coordinate in the x range:
+ -> that's the handling of empty figures...
+
+ not working:
+
+ \begin{axis}[xtick=0]
+ \end{axis}
+
+ not working:
+
+ \begin{axis}[xmin=-5,xmax=5,xtick=0]
+ \end{axis}
+
+ not working:
+
+ \begin{axis}[xmin=-5,xmax=5,xtick=0]
+ \addplot coordinates { (-10, 0) };
+ \end{axis}
+
+
+ working:
+
+ \begin{axis}[xmin=-5,xmax=5,xtick=0]
+ \addplot coordinates { (0, 0) };
+ \end{axis}
+
+- think about basic level commands for the axis lines -- this should also allow
+ \pgfpathclose !
+
+
+- the arguments to plot file[#1] and plot table[#1] are not consistent with
+ rest. They need to be treated as behavior options (maybe in a different key
+ path).
+- check behavior options provided to table[] and file[] and so - is that
+ correct?
+
+
++ the \ref command should be \protect'ed in LaTeX captions
+
++ the ticklable dist feature NEEDS anchors.
+
+
- the plot mark code invokes a lot of math parsing routines - which is a waste
of time in my opinion. All expressions etc. have already been parsed.
Potential for optimization!
@@ -27,6 +710,13 @@ BUGS / FIXES
- no, it works only partially:
draw=none or fill=none works as expected.
But 'blue' disables filling!?
+ - Possible fix:
+ Overwrite \filltrue \fillfalse, \drawtrue, \drawfalse:
+ they should set a further boolean '\drawbooleanhasbeenset' and
+ '\fillbooleanhasbeenset'.
+ -> Replace the \pgfusepathqfillstroke if and only if the respective
+ booleans have been set *explicitly*. If they are unchanged, fall back to
+ a "reasonable" default.
+ provide example for colormap changes - that should also verify the correctness
@@ -38,32 +728,22 @@ BUGS / FIXES
+ improve docs for scatter plots:
+ 'only marks' is also a scatter plot!
-- check behavior options provided to table[] and file[] and so - is that
- correct?
-
+ something with the table package appears to be buggy!?
+ the plot table[] search path is not good - it should include /pgfplots
-- introduce backwards compatibility with old pgfmathfloat.code.tex file
++ introduce backwards compatibility with old pgfmathfloat.code.tex file
[ not interesting for pgfplots 1.2, only for pgfplots 1.1 !]
+ there is a bug related with empty axes - I suppose in conjunction with the
tickmin/max feature (it won't be reset properly)
-- the arguments to plot file[#1] and plot table[#1] are not consistent with
- rest. They need to be treated as behavior options (maybe in a different key
- path).
-
-- there is a space too much in some behavior messages (occured in test
+X there is a space too much in some behavior messages (occured in test
processing)
X introduce backwards compatibility with old pgfmathfloat.code.tex file
-- the pgf math parser has wrong precedence for '-' prefix op:
- exp(-x^2) is wrong.
-
- the auto-generated tick labels for non-unit-distance log axes could be better.
+ verify that the domain key always accepts the extended data range
@@ -75,9 +755,6 @@ X introduce backwards compatibility with old pgfmathfloat.code.tex file
+ the stacked plots impl is not yet in logical coords - that means it
won't work with non-standard unit vectors!
-- fix version stuff in package header
-- introduce CVS Header Variables in every sourcefile
-
+ The floating point math routines should be put into a separate library.
Provide compatibility support for that in pgfplots!
@@ -156,12 +833,12 @@ X scaled ticks is not properly implemented for log axes
- In 3D case axis [xyz] line != box, there is just ONE hyperplane.
My implementation works only if either ALL are box or ALL are 'middle'.
-- 3D case : which hyperplane gets tick LABELS?
++ 3D case : which hyperplane gets tick LABELS?
The current implementation based on '[xzy]ticklabel pos' is not sufficient
-- 3D case: something fails with disabledatascaling
++ 3D case: something fails with disabledatascaling
-- 3D case : grid lines work correctly, but they are not satisfactory.
++ 3D case : grid lines work correctly, but they are not satisfactory.
I'd like grid lines in the background only.
- 3D case : tick/grid lines are on top of the axis lines. This leads to
@@ -193,6 +870,35 @@ X scaled ticks is not properly implemented for log axes
+ the clickable library does *not* work inside of figure environments
+ -> yes. That's fixed; was a bug in hyperref.
+ - I could try to re-implement it without insdljs.
+ Ideas:
+ - the document catalog's names dictionary needs to '/JavaScript
+ [(<arbitrary script name>) <dictionary with JS>]' entry.
+ The <dictionary with JS> contains document level javascript.
+ - it is very simple to generate these entries for my case.
+ Unfortunately, this may be incompatible with 'insdljs' or other tools
+ which write DLJS.
+ - I am not sure why the floating figures of TeX produce an
+ incompatibility here. It appears the 'hidden' flag in the form fields
+ are the problem - if that is the case, I'd need to reimplement the
+ form annotations (which could be more difficult).
+
+- javascript stuff does not work if the complete figure is rotated (sidewaysfigure).
+
+- javascript: incompatiblity with external library:
+ 1. filenames: \jobname contains characters with incompatible catcodes and
+ that funny insdljs package tries to assemble macros with these
+ characters.
+ -> fixed; I simply use pgfplotsJS as temporary file name.
+ 2. the images as such have corrupted forms
+ -> Can be fixed if
+ \usepackage{eforms}
+ is used BEFORE loading pgf. The reason: \begin{Form} and the shipout-hackery
+ of the pgf externalization bite each other.
+ \begin{Form} must come before the shipout hackery of pgf.
+ 3. \includegraphics does not preserve PDF forms.
+
@@ -219,21 +925,6 @@ X error recovery: it is sometimes almost impossible to find errors in
+ bug in insdljs: workaround introduced.
+ bug in my code fixed
-- javascript stuff does not work if the complete figure is rotated (sidewaysfigure).
-
-- javascript: incompatiblity with external library:
- 1. filenames: \jobname contains characters with incompatible catcodes and
- that funny insdljs package tries to assemble macros with these
- characters.
- -> fixed; I simply use pgfplotsJS as temporary file name.
- 2. the images as such have corrupted forms
- -> Can be fixed if
- \usepackage{eforms}
- is used BEFORE loading pgf. The reason: \begin{Form} and the shipout-hackery
- of the pgf externalization bite each other.
- \begin{Form} must come before the shipout hackery of pgf.
- 3. \includegraphics does not preserve PDF forms.
-
- the interrupt bounding box feature should still update the data bounding box.
Otherwise, transformations may fail.
@@ -399,21 +1090,663 @@ X Fix the scaling estimations.
X verschiebung des ylabels ist komisch, wegen der rotate option
++ that first/last coord detection doesn't work for 3D
-------------------------------------------------------------
FEATURES
-------------------------------------------------------------
+- \addplot coordinates {\macro};
+
+- precise width calculation idea:
+ - Problem: total width depends on width of axis descriptions
+ - width of axis descriptions depends on position of axis descriptions
+ - position of axis descriptions depends on width of axis
+ - width of axis depends on width of axis descriptions
+ -> non-linearly coupled system.
+ - Idea: introduce a loop.
+ - details:
+ 1. place axis descriptions + the axis rectangle into a box.
+ 1.1 Measure box'es width, throw it away if it is too bad. Keep it and stop iteration otherwise.
+ 2. recompute the complete scaling.
+ 3. go back to step 1.) and iterate
+ -> one or two iterations should be enough .
+ -> it's not necessary to recompute the prepared and stored plots. Just keep them in main memory until the scaling is fixed.
+
+- bar plots:
+ - bar interval plot handler which *assumes* uniform distances. This allows to eliminate the last, superfluos grid point (because it can be generated automatically as replication x_last + h for known h)
+ - in fact, I could also implement
+ x_last + h_last
+ and introduce a new name like 'bar interval*' or something like that
+
+- Mails from Stefan Ruhstorfer:
+ 2.
+ Gruppierte Säulendiagramme sind nach meinem Wissenstand nur dann möglich wenn man in der Axis-Definiton die Bedindung ybar angibt. Ich finde diese Ausrichtung sehr unflexible, da ich sehr oft über das Problem stolpere, dass ich in meinem gruppierten Säulendiagramm noch eine waagrechte Linie oder ähnlichs einzeichnen möchte um z.B. meine obere Toleranzgrenze einzuzeichnen. Bis jetzt mache ich das über den normalen \draw Modus, was auch ausgezeichnet funktioniert. Jedoch habe ich dann das Problem, dass ich keinen schönen Legendeintrag mehr bekomme. Hier häte ich 2 Vorschläge. Zum einen die Legende "freier" zu gestalten. Also so, dass man beliebig (ggf. auch ohne Plot) ein Legendenelement hinzufüen kann und vllt. noch das zugehörige Symbol festlegen kann. (Bis jetzt habe ich das Problem, das ich mit tricksen zwar meine Obere Tolerangrenze in die Legende bekomme, dann jedoch mit einem Säulenzeichnen davor).
+ Der andere Vorschlag ist, dass Säulendiagramm anders zu definiern. So das ich auch noch einen Plot hinzufügen kann, der mir eine waagrechte Linie ohne zu tricksen einzeichnen lässt.
+
+
+ 3. Eine Gruppierung von stacked bars ist nach meinem Wissen nicht möglich. Es ist zwar schwer sich ein Anwendungsgebiet dafür vorzustellen, aber wenn sie danach mal suchen (speziell im Excelbereich) werden sie sehen, dass viele Leute so eine Funktion benutzen.
+
+ -> siehe auch folgemails mit Beispielskizzen
+ -> beachte: Fall 2.) erfordert mehr arbeit als lediglich 'line legend', weil ybar ja den koordinatenindex verarbeitet!
+
+- 3D + axis line variants: someone might prefer GRID LINES as for the boxed case
+ combined with axis line=left...
+
+- the table package uses a lot of logs -- but it can't change the log basis.
+
+- automatically choose a predefined scaling style depending on width/height (?)
+
+- my elementary data structures always use \string to support macros as data structure names. I fear this might be ineffective.
+ Perhaps its better to check if the argument is a macro (at creation time, thus only once) and call \edef#1{\string#1} to assign some sort of name to it.
+ This will invoke \string only once. Is this faster?
+
+- implement 'point meta=symbolic command:<cmd>' and 'point meta=command:<cmd>'
+ the command should assign '\pgfplotsretval'
+
++ It would be a valueable addition if the external lib would be available for the next stable release.
+
++ the scatter/classes feature needs a legend.
+
+- the following keys should process their argument with \pgfmathparse:
+ - [xyz]tick,
+ - min/max
+ - tickmin/max
+ - meta min/max
+ - domain/ y domain,
+ - error bar arguments,
+ - without FPU: width/height/ view
+ -> check optimizations of the math parser!
+ -> check if I can activate the FPU during the survey phase!
+
+- check y tick scale label for 2nd y axis
+
++ provide a '3d box' boolean which draws the full box.
+ -> should use the correct drawing sequence (foreground/backgraound)
+ -> should use the decoration things
+
++ there is no possibility to provide a background color for the axis only
+ (should be a fill/draw style for the clip area).
+
++ -> perhaps 'plot box aspect ratio=<x> <y> <z>' ?
+ And I still have the stretch-to-fill thing as in matlab.
+
++ finish the 'unbounded coords=jump' method.
+ Ideas:
+ + mesh plots should use a special method here:
+ + they should proceed as usual - and eliminate complete patches
+ with special treatment.
+ + the use of shader=interp should throw an exception in case of
+ unbounded coords.
+ ~ all other plots work reasonably well with it, I suppose.
+ + plot graphics should throw an exception as well.
+ + should the user filter results be filtered by 'unbounded coords' as
+ well?? They are not unbounded - they have been discarded...
+
+- idea to improve rel. accuracy: do not simply invoke 'pgfmath@basic@...' but
+ allow an arbitrary suffix. Maybe one could allow to use the FP package.
+
++ reverse axis=true ideas for 3D:
+ + this flips the normal vector in some sense. Since the "foreground"
+ algorithm simply queries the sign of the normal vectors, I only need to
+ check for a "-1" in the right places. If I am not mistaken, changes in the
+ following components should be enough:
+ - decision which is foreground/background
+ - 'ticklabel cs' and 'rel axis cs'
+ -> these may require a design decision! What does the "0" coordinate
+ mean: the lower limit or the lower part of the figure?
+
++ z buffer implementation ideas:
+ + reverse: is already implemented
+ + reverse x:
+ A_ij := a_{i,n-j}
+ for ordering=rowwise: trivial: reverse rowwise
+ for ordering=colwise: same technique as for transposal: collect
+ colvectors in fast applist; reverse this colvectors
+ + reverse y: the same with exchanged roles.
+ + auto: I need to know:
+ + How are the coordinates sorted?
+ If ascending in x and ascending in y, everything is ok. Otherwise, I
+ need to remember signs.
+ -> it should suffice to check the FIRST and LAST coordinate to get
+ these signs!
+ + If both are ascending: I can decide per axis if coordinate reversal is
+ necessary:
+ If "0vv" is background -> ok, change nothing.
+ If "0vv" is foreground -> reverse in x.
+ The same should also work for y -> allows very fast decision.
+
+
++ I have the following request. Is it possible to also provide a domain
+key for file and table plots. I have a file containing data points
+where only the points in a certain range shall be plotted. I first
+thought that filters might be a solution, but it seems that they apply
+to the whole axis, not only to one specific plot.
+
++ I have a suggestion for the next release of the pgfplots package.
+Now it seems to be so, that the major tick lines are drawn before the minor tick
+lines, which can lead to unwanted results, if somebody redefines the color of
+the minor grid only. So it would be better to draw then the other way round.
+Does somebody else agree?
+- that's not solved yet! Try it out for grid lines!
+
++ the UI to provide point meta is complicated.
+ Why
+ point meta=explicit,table/meta={<colname>}
+ instead of
+ point meta=\thisrow{<colname>} ??
+ [ ADDED SANITY CHECK AND ERROR MESSAGE]
+
+ The reason is technical: My code separates the table reading and the
+ coordinate processing. I'd like to discard this separation.... but I hesitate
+ to do so because this might lead to scoping problems...
+ Work-around idea: check if the '\thisrow' macro occurs and set then
+ 'explicit,table/meta=...' accordingly.
+
+- log plots: minor tick num would be useful here! If tick labels are placed at
+ '1e-5, 1e0', minor tick num= 4 would lead to the minor tick lines at
+ '1e-4,1e-3,1e-2,1e-1' which is useful.
+ So:allow minor tick num for log axes.
+ ->
+ need to adjust the check for "uniform log ticks"
+
+- is there a way to get the current row/col index during \addplot?
+
+- plot shell:
+ - It would be nice if the standard shell interpreter could be replaced.
+ Idea:
+ \pgfkeys{/pgfplots/plot shell/interpreter/.code 2 args={sh #1 > #2}}
+ then in the code
+ \pgfkeysvalueof{/pgfplots/plot shell/interpreter/.@cmd}{#1.sh}{#1.out}\pgfeov
+ - the \pgfshell macro is quite general and could be added to pgf (as
+ suggested by you, Stefan). However, this would also need modifications in
+ tikz.code.tex to get some sort of high-level user interface.
+ I find plot shell very useful, and it could be added easily. My
+ suggestion:
+ Either write a high level user interface for tikz or rename the command
+ to \pgfplotsshell and put it into pgfplotscoordprocessing.code.tex.
+ In the meantime, I added it to pgfplotscoordprocessing.code.tex (bottom).
+ - there is a potential difficulty with the '\addplot table shell' command
+ (which is a good solution!): the semicolon in this routine will have a
+ fixed catcode. But packages like babel with french language will change it
+ to active, so french people can't use \addplot table shell. The solution
+ is technical and I am not proude of my own anyway... we'll just have to
+ think about one.
+ - documentation for the 'table shell' feature is missing yet.
+ - I am not sure if the replication of /tikz/prefix and /tikz/id is helpful
+ or confusing....
+
+
+
++ provide a possibility to get the maximum tick width (for use in ticklabel cs)
+
+- > Is it possible to shade the area between two curves, using pgfplots, such as
+ > in this example: http://www.mathworks.com/matlabcentral/fileexchange/13188
+ > The only shading I could find is between one curve and the x axis... Shading
+ > between curves seems to be possible, but only with stacked curves. Is is
+ > possible to disable stacking somehow, but keep the \closedcycle behavior?
+
++ provide a possibility to draw gaps. Maybe using nan or inf coordinates?
+ Currently, NaNs and infs are skipped and pgfplots simply interpolates over
+ the gaps. Perhaps it would be better to explicitly form a gap? I am not sure
+ about that, but it appears to be a good idea. Requires a lot of special
+ handling
+
++ provide a 'y variable' key?
+
++ provide other log bases
+
++ implement colorbars. I have a running prototype; it just needs some tuning.
+ Ideas:
+ + place it as a separate axis besides the original one.
+ + make sure that named nodes like 'current axis' stay correct - as if there
+ was no extra axis.
+ + provide all required variables locally in pgfkeys - the meta limits and
+ style arguments etc.
+ + I need to communicate:
+ + the current color map,
+ + styles for ticks, tick labels and axis lines (?)
+ (at least the tikz ones?)
+ + create a style for the new axis.
+
+- re-implement sampling loops. I should discard the compatibility with \foreach
+ internally in order to gain accuracy! Maybe it is necessary to invoke
+ different loops - one for tikz \foreach (samples at) and one "standard"
+ sampling routine.
+
+- 3D: assume default plot type when used with \addplot3 without plot style
+ (perhaps a special cycle list)
+
+
++When working with markers on the plots, the nomenclature is inconsistent. There
+is 'mark size', 'mark=*' and 'only marks', but 'no markers'.
+
++I created several cycle lists to be consistent in different types of plots. For
+example I have a cycle list with markers and no lines for raw data points and a
+cycle list with only lines in corresponding color. Now if I want to have raw
+data points and fits in one axis, I cannot use these. Ok, I could make a
+cyclelist where raw data and fit styles take turns, but this would break down
+when I have more than one fit for a set of raw data. This is probably something
+that has to go into pgf, but would it be possible to add a easy way
++ to switch to different cycle list between two addplots,
+- and to navigate in it (go to a specific position in the cycle list, go n steps back/forth)?
+
++When I first tried to combine plots with only symbols and plots with only a
+line in one plot, I had difficulties to figure out how to do it. Having worked
+with pgf before, I intuitively tried to activate no marks/only marks for the
+whole axis and then override it explicitly for some plots, by adding [only
+marks/no marks] to addplot.
+
++I would find it convenient, if there was a key to indicate legend placement,
+for example 'legend position=south west' as shorthand for 'legend
+style={at={(0.05,0.05)},anchor=south west}' or something similar.
+
+
+- replace \pgfpointscale with a 'q' version -> it invokes the expensive math parser.
+
+- optimization ideas:
+ - pgfmultipartnode evaluates every anchor twice
+ - implement a cache for expensive, repeated math operations like 'view'
+ directions or common results of 1/||e_i|| .
+ - search for unnecessary math parser invocations; replace with 'q' versions
+ if possible.
+ - implement a hierarchical generalization of the 'applist' container (a tree
+ applist of arbitrary length)
+ - eliminate the deprecated 'non-legend-option' processing.
+ - remove the different (empty) paths of the axis node -- it appears they are
+ not necessary and waste only time and mem.
+ - try implementing an abstract 'serialize' and 'unserialize' method - it
+ might be faster to re-process input streams instead of generating
+ preprocessed coordinate lists.
+ - try to reduce invocations of pgfkeys
+ - optimize the filtered pgfkeys invocations - the filter is slower than
+ necessary!
+ - eliminate the 'veclength' invocations for single axes - they can be
+ replaced with "inverse unit length * (max-min)"
+ - the key setting things can be optimized with \pgfkeysdef
+ - create the /pgfplots/.unknown handler (.search also=/tikz) once and remember it.
+ - the (new) tick label code might be very expensive:
+ - check for (unnecessary) calls to \pgfpointnormalised -- the normal
+ vectors are already normalised!
+ - check the cost for bounding box size control of the tick labels --
+ maybe this can be optimized away if it is not used. But this decision
+ is not easy.
+
++ provide a simpler method to replace the '\cdot' in tick scale labels with a
+ different sign, for example '\times'.
+
+- provide a feature for bar plots which add the bar value as node on top of the
+ bar.
+ Idea: provide some sort of "every coordinate path" - an optional feature which
+ has access to both, the logical coordinates and the low level path coordinates
+ and can do something. One application would be to place nodes "above" of the
+ low level coordinate and use number formatting routines to display the number.
+ This shouldn't be difficult (with the exception of logs ... or user
+ transformations... hm.).
+ -> think about it.
+ -> log can be visualized with 10^{<tick>} as before!
+ -> the 'inv trafo' can be applied if and only if needed. Idea: provide macros
+ like '\x', '\y' and '\z'. This should do it.
+
+- use the new \pgfplotspointoutsideofticklabelaxis things to place axis labels.
+ -> this needs a further variant which allows 'relative' axis coordinates
+ (0=lower limits, 1=upper limit and everything between)
+
+- I need a clean interface to distinguish between R^1 -> R^3 and R^2 -> R^3
+ visualization.
+ Maybe a boolean 'matrixinput' or something like that?
+ -> the 'mesh' plot handler is also useful for line visualization!
+ - the '/pgfplots/mesh' key could set matrixinputtrue
+ - a style 1dmesh or so could set the plot handler and disable meshmode?
+ Of course, I could also try to evaluate the 'rows' and 'cols' values.
+ If cols=1, I have line visualization.
+
++ allow changes to `legend image code' in plot styles. Maybe the 'legend image
+ code' or some other preparation commands can be remembered explicitly such
+ that they are set before 'legend image code' is already running?
+
+- legends need a better key path to process pgfplots plot handlers.
++ I need legends for mesh/surface plots.
+
+- the tick anchor=auto feature could work like this:
+ - "use paraxial whenever possible - unless the user requests "tikz"
+ explicitly or implicitly".
+ - "explicit" request: the user says "tick anchor=tikz".
+ - "implicit" request: the user says "anchor=..." for a tick label.
+ - realization:
+ - use \scope to set the tick label styles, overwrite
+ '/tikz/anchor' inside of this scope's pgfkeys statement.
+ -> that doesn't work. I NEED to adjust 'every node'.
+ - move the processing of 'tick anchor' inside of that scope
+ - effect: 2D axes will also be processed by means of 'paraxial' (unless the
+ user doesn't want it).
+ -> reversed axes work automatically!
+
++ provide the axis bounding box as coordinate system (for description placement).
+
+
+- provide a \pgfplotspathcube command as generalization from the cube marker.
+ The cube command should work similar to pathrectangle or rectanglecorners.
+
+- write a public math interface which provides access to axis internals like
+ limits, the 'dimen-to-coordinate' method and so on.
+ -> it might be useful to use pgfmathparse for any numerical input argument as
+ well.
+
++ write public interface \pgfplotsdepthofxyz#1#2#3
+- consider renaming that one to pgfmath... or pgfplotsmath... ?
+
++ reverse legend
+ -> CF: implementation of Tom Cashman per mail
+
+- what about in-text-input of tables like
+ \pgfplotstableread\data{<data>....<data>}{\macro}
+ \pgfplotstableread\data{<data>....<data>} to listener \listener
+
+- I have just added '* expr' for plot table.
+ ideas todo:
+ + implement it for plot table structure as well,
+ - document plot file such that users know how to add expressions, or, even
+ better, automatically switch to plot table if someone uses x expr..
+
+- maybe some sort of 'point meta=map' would be interesting.
+ The idea is to provide a mapping
+ (x,y,z,singlemeta,additionalinfo) -> f_1,f_2,f_3,f_4,f_5,...,f_n
+ and each f_n has a name and a value.
+ The additionalinfo could be further rows in a table or the current plot
+ context. Then, each f_i could be a symbol, maybe a number or something like
+ that. There should be one designated f_i which is used as "the" cdata source
+ and which is mapped to [0,1000].
+
+- optimize the z buffer=sort impl of mesh mode: use preallocation (doesn't yield
+ much, but at least a bit)
+
++ it could be interesting to provide customizations to the cube marker. For
+ example different lengths for each side... could be used as basis for a 3D bar
+ plot implementation.
+
+- there are applications in which BOTH untransformed meta AND transformed meta
+ are required. In this case, the untransformed meta should be provided in a
+ more convenient way - perhaps as fixed point number?
+
+- in scatter point public interface: it would be interesting to know if we are
+ currently processing the first/last coordinate. is that information available?
+
++ write default styles for "string coordinates" which maps a set of
+user defined strings somehow into a numeric range (using a simple
+dictionary)
+
+- It is certainly possible to write some sort of CELL-BASED 'mesh/surf' shader -
+ a combination of 'flat corner' and cell based rectangles:
+ - every coordinate denotes a CELL instead of a corner,
+ - the "shader" maps the cdata into the colormap to determine the cell color
+ - details?
+ - to get well-defined cells, I have to enforce either a non-parametric
+ lattice grid or do a LOT of additional operations (?).
+ - alternative: define N*M cells by N+1 * M+1 points.
+ - perhaps a combination of both?
+ -> that's more or less the same as 'flat mean' up to the further
+ row/column pair
+ - it would be generally useful to have an "interval" or "cell" mode:
+ the idea is that every input coordinate defines an interval (1d) or a cell
+ (2d). To define the last cell, one needs to add one "mesh width" somehow.
+ I just don't know where:
+ - the artificial cell should be processed with the normal streams -
+ including limit updates, stacking etc.
+ - the artificial cell needs to know when the end-of-stream occurs.
+ For 1d plots, that may be possible. For 2D plots, this information
+ requires a valid 'cols' key.
+ - I suppose it would be best to patch @stream@coord.. at least for the
+ 'cell' mode.
+ - Idea:
+ - the \pgfplots@coord@stream@coord implementation realizes the
+ cell-mode: after every 'cols' coordinate, a further one is
+ replicated. This needs the "last mesh width".
+ Furthermore, it needs to accumulate a row vector, the "last row".
+ This last row is need during stream@end to replicate the further
+ row:
+ - the \pgfplots@coord@stream@end implementation has to realize the
+ last step of cell mode: the replication of a further row. It also
+ has to realize the implementation of 'interval' mode (replication
+ of last coordinate).
+ My idea is to simply use an applist for this row accumulation. The
+ format should be compatible with \pgfplots@coord@stream@foreach@NORMALIZED.
+ That doesn't produce problems, even when the end command is invoked within
+ a foreach@NORMALIZED loop - because the loop has already ended.
+
+
+
+
+- I have a funny idea to replace the memory intensive and slow TeX based data
+ structures: I could write coordinate streams into a file like LaTeX's .aux
+ file - and re-read it. The file performs the coordinate loop automatically in
+ such a case. Key question: what's more expensive: \input or the optimized
+ macro append? There may be an even-point at which one should switch the low
+ level data structure.
+ - One could introduce some kind of in-macro caching: write to file every 100
+ elements or so.
+ This would be the applistX with the same L1 and L2 caches - but the main
+ memory would be a file instead of a macro.
+ - maybe it is sufficient to use concatenate up to N three-level-deep
+ applistX, each with a fixed size? This should work as well. The global
+ number of macros required for such an implementation would be 3*N. If each
+ macro contains several thousand points, this would be better than nothing -
+ and simpler than a tree. But it doesn't have good asymptotics, I agree.
+
+
+
++ pdf supports REAL lattice shadings! See pdf reference 1.7, section 4.6.3.
+ It is possible to write the coordinates on a lattice and colors for each coordinate;
+ resulting in a correctly interpolated shading. I suppose this uses a z buffer.
+ The only problem: it requires binary integer input. The integers are then
+ mapped linearly into the real space using the /Decode array.
+ If I could somehow write binary data into pdf streams, this would work
+ properly.
+ + Notes to finish that thing:
+ - the plot expression sampling could automatically respect the 'z buffer
+ emul' -> and clear the variable afterwards (optimization)
+ + finish low level interface
+ + write ps driver
+
+
+
+
+- provide a public basic level API to pgfplotstable:
+ - access, iterate and read table elements
+ - manipulate elements
+
++ binary input subroutines:
+ use a simply scaling for dimen registers. The scaling should be such it maps
+ [-16384,16384] -> <range for N bytes>
+ properly, i.e. it is just an integer division. The resulting integer can be
+ encoded using the available linear map functionality.
+
+
++ is there a (small?) possibility to write an efficient z buffer? To order the
+ drawing operations for mesh/surf plots?
+ -> Idea: for surface plots, it should be completely sufficient to start
+ drawing at the correct edge; in the correct direction.
+ Thus, the required operations to get a correct "z buffering" is either
+ + to reverse the sequence (i.e. to reverse rows and cols),
+ + to reverse the rows
+ simple a posteriori impl: iterate through sequence, pushfront every
+ row element. When row complete: pushback onto the final list.
+ + to reverse the cols
+ simpel a posteriori impl: iterate through sequence, pushback every
+ row element. When row complete: pushfront onto final list.
+ + ok, I have implemented sorting and depth information.
+ Ideas:
+ + for scatter plots: simply sort coordinates,
+ - for 3d bar plots (to be implemented): sort by (x,y,0) coordinates
+ + for (1d/2d) mesh plots: sort fragments (lines or rectangular
+ patches) according to the depth information of one corner,
+ + for any single-colored plot handler (lineto, curveto etc): to NOT
+ change the sequence.
+ -> perhaps I can return both, the sorted AND the unsorted sequence
+ if one has markers and single-colored plot handlers.
+ + don't use the enumeration pattern here; use '\let' to set the z
+ buffering technique (if possible).
+
++ provide better styles for 3D plots:
+ + enlarge [xy] limits=false,
+ + view={45}{-30}
+
++ Ideas for 3D axes:
+ + I could introduce '\addmesh' (or a 'mesh=true|false' option).
+ -> this activates R^2 -> R^3 visualisation.
+ -> \addplot is then always R^1 -> R^{2,3}
+ + only \addplot3 {<expr>} is different: it should default to (x,y,<expr>)
+ using a mesh.
+ + mesh input:
+ + for plot expression: sample a matrix
+ + for coordinates, file, table:
+ + describe how the linear sequence shall be mapped into a matrix
+ + requires the matrix' size and a flag 'ordering=rowwise|colwise'
+ + in principle, the matrix size is controlled by the samples key.
+ But since we are describing a mapping here, we should (maybe)
+ introduce a further key like |resulution={x}{y}| ...
+ + I need a |samples y| key anyway.
+ + visualization:
+ + case 'only marks': easy, just as before.
+ + all other cases:
+ + visualizations like surface and mesh are relatively simple:
+ we can iterate through the matrix (for example row-by-row)
+ and we ONLY need to access the CURRENT AND LAST ROW to
+ draw the required things.
+ -> Idea: provide an abstract datastructure which provides fast
+ access and efficient storage for the last visited row!
+ The best would be an array, but I should keep in mind that
+ arrays may be too inefficient with respect to TeX storage.
+ + I can implement 'flat shading' (piecewise constant). Idea:
+ + use rectangular elements
+ + query the colormap for one of the four corner points
+ + simply draw+fill the element with that color.
+ + framework: either the same as for scatter plots, or maybe
+ I can use the pgf basic- or system layer for the color
+ commands. This is potentially faster.
+
++ Notes for how to finish the 3D axes visualisation:
+ + a 3D axis consist of several different parts (all of them are now more or
+ less ready).
+ They are:
+ + three axis vectors which determine the 2D projection.
+ + Input methods:
+ + |view| key (preferred)
+ X explicit |x,y,z| vectors
+ X |x,y,z| vectors given in the correct relative size.
+ -> simply scale them uniformly to get the desired width and
+ height
+ + A method to scale those axis vectors to get the desired dimensions.
+ + A decision for how to plot the axes:
+ + a complete box.
+ + only three surfaces visualized (the "back" of the axes)
+ + A decision which of the (available!) axis lines shall be used for
+ tick lines and tick labels.
+ Of course, this depends on the choice in (3.).
+ Input methods:
+ + automatic placement. This is the preferred method.
+ this requires
+ a) a decision which axis line gets the tick labels
+ b) a decision whether tick labels are "right of" or whatever
+ the chosen axis line.
+ X user defined placement: the user EXPLICITLY provides the desired
+ axis.
+ X The point (4b) above shall be modifyable by a user interface.
+ + An easily usable user interface to place axes descriptions like
+ labels and title.
+ Possible choices:
+ + Placement relative to axes vectors.
+ + Placement relative to a two-dimensional coordinate system,
+ relative to the VIEWPORT ("left of figure", "right of figure",
+ "above figure")
+ + Placement "parallel" to the axes which got tick labels
+ + "really" parallel? -> badly rotated text
+ + just "near" the respective axis line?
+
+ - Some more implementation notes:
+ + If one of the 2D x,y,z vectors has length 0, the respective axes
+ should be hidden.
+ + a normal 2D axes should be considered to be an efficient special case
+ of a three dimensional axes - hide the special treatment as far as
+ possible.
+ + the routine which computes default tick positions needs
+ veclength*(max-min). Verify that.
+ + provide new keys:
+ + [xyz]ticklabel anchor=auto,paraxial,tikz
+ + [xyz]ticklabel dist=<dimen>
+ + with 'auto':
+ + non orthogonal axis => same as paraxial
+ + 3D => same as paraxial
+ + all other cases => same as tikz
+ + with 'paraxial':
+ + my new stuff (with the '*dist' keys as parameters)
+ + with 'tikz':
+ + as before: 'at='<tick position> and the anchor determines the
+ alignment.
+ + I still need anchors for 'paraxial'
+ + for axes labels:
+ Idea: use Tikz's '\node[pos=0.5]' feature
+ + prepare two coordinates and a path (user configurable) which
+ connects them
+ + place the label on the path, for example using pos=0.5
+ + the path could be (depending on the tick label position which is
+ either LEFT or RIGHT) -- |- -| or something like that.
+ + Ideas how to get those axes / surfaces which are on the back/front of
+ the 2d projection:
+ + I need the 3d (!) view direction. For 'view=', the 3d view
+ direction is directly available, for explicitly provided axis
+ vectors, it should be possible to compute it using cross products
+ and embedding in 3d (at least I hope so)
+ + now, given the 3d view direction and the three 3d axis vectors, I can
+ compute scalar products to check whether the view axis and the
+ axis vector point into the same direction. If I am not mistaken,
+ the following case distinctions hold:
+ v * e_x > 0 => the surface attached at the lower end of e_x is
+ FRONT, the surface attached at the upper end of e_x is BACK.
+ This should hold for e_y and e_z as well. Furthermore, the 3d axis
+ vectors are just unit vectors (if I suppose that only the view is
+ rotated)
+ + given the flags "FOREGROUND=[0|1]" for each axis line / axis
+ surface, I can also deduce
+ + which lines shall be drawn (or, in case of a complete box,
+ *when* they shall be drawn - as foreground or as background),
+ + which lines shall contain tick labels
+ + which lines shall contain axis labels
+
+ the FPU uninstall command can be assembled ONCE (globally). No need to do that
multiple times.
-- What about something like '/pgfplots/table/x expr={<math expression>}' ?
++ What about something like '/pgfplots/table/x expr={<math expression>}' ?
-> I could still use the lazy eval framework of pgfplotstable, i.e.
\thisrow{} commands, \pgfplotstablerow, \pgfplotstablecol etc.
The \prevrow and \nextrow features won't be possible (?)
- improve support for multiple ordinates
-- improve support for negative axes
+- improve support for negative (reversed) axes
+ - 'x dir =-1' -> scale automatically
+ - x=-5.5cm, yticklabel pos=right, yticklabel style=left
+ could be a style (combined with x dir)
+ - the anchor names are now strange - they are mirrored :-(
+ \begin{tikzpicture}
+
+ \begin{axis}[
+ title={Test},
+ xlabel={Time [s]},
+ ylabel={Segment},
+ x=0.9cm, y=-0.9mm,
+ %xlabel style={at={(0.5,1)}},
+ %ylabel style={yshift=-6pt},
+ %title style={at={(0.5,0)}},
+ %xticklabel style={yshift=-6mm},
+ %xticklabel pos=top,
+ ]
+
+ \addplot plot coordinates {(0,30) (3,0) };
+ \end{axis}
+ \end{tikzpicture}
+ - furthermore tick scale labels should be shifted
+
+
+ improve plot expression
+ accuracy
@@ -444,7 +1777,7 @@ FEATURES
- define a 'cycle list' style which simply inserts different colors into the
predefined style (thus, markers are fixed, colors vary). One could also think
about a complementary style.
- -> even better: I could prodive up to three different lists which can be
+ -> even better: I could provide up to three different lists which can be
combined.
Example: colorlist, markerlist, linespeclist
-> iterate through all possible combinations!
@@ -501,27 +1834,27 @@ X the coordinate preparation routines should assign global registers. This would
- provide 'only each nth coordinate' or so as style on top of 'x filter'.
-- 3D axes: my axis is "heavy weighted".
++ 3D axes: my axis is "heavy weighted".
Possible improvements:
- - draw exactly 3 axis lines (unless one really wants the complete box).
- - draw only one tick line per tick, in a direction which "looks well"
+ + draw exactly 3 axis lines (unless one really wants the complete box).
+ + draw only one tick line per tick, in a direction which "looks well"
(one of the two possible directions).
this would also avoid double placing of tick labels in corners.
- - attach tick labels generally at the end of tick lines. Provide a
+ + attach tick labels generally at the end of tick lines. Provide a
distance option configuring the distance.
-> my idea:
- - for "normal" orthogonal axes (i.e. view={0,0}), the tick labels
+ + for "normal" orthogonal axes (i.e. view={0,0}), the tick labels
are positioned directly at tick positions using proper anchors.
- - for "non-standard" axes (skewed, rotated, 3D), tick labels are placed
+ + for "non-standard" axes (skewed, rotated, 3D), tick labels are placed
at anchor 'center'; but the 'at' position it computed by pgfplots:
it is positioned parallel to the surfaces' 'b' axes at a predefined
distance.
- - user interface: [xy]ticklabel pos in
+ + user interface: [xy]ticklabel pos in
{left,right,top,bottom,auto,paraxial:<distance>}
-> 'auto' implements the behavior above; all other choices are user
defined.
- - automatically decide WHICH axis lines shall be drawn.
- - see http://mathworld.wolfram.com/EulerAngles.html
+ + automatically decide WHICH axis lines shall be drawn.
+ + see http://mathworld.wolfram.com/EulerAngles.html
+ implement simply style 'scatter classes'.
+ sanity checking feature: try if 'pgfmathfloattofixed' results in a known
@@ -676,12 +2009,11 @@ X perhaps I can use pdf line annotations to improve clickable lib?
Those family macros can be optimized (sure ?).
- provide access to axis limits and data bounding box.
-
-- It would be useful to get access to axis coordinates, for example in 'circle (XXX)'
+ It would be useful to get access to axis coordinates, for example in 'circle (XXX)'
+ axis equal option
-- consider 'plot image[xmin=,xmax=,ymin=,ymax=] {<graphics>};
++ consider 'plot image[xmin=,xmax=,ymin=,ymax=] {<graphics>};
-> load external plot image!? Only useful for matlab, if matlab would allow 100%
control over bounding box. Unfortunately, it doesn't.