------------------------------------------------------------- BUGS ------------------------------------------------------------- - extra ticks can be disabled by the tick special cases for axis lines (when two axis lines cross each other) - \addplot plot[#1] does not use /pgfplots as search path + eliminate any public reference to the '\\'-lists. They are inconsistent with PGF. + use '{}' for sci 'e' style - looks better + the tick scale labels are inadequate. 1. Formatting 2. maybe they should be disabled at all!? + specifying axis limits for X should also limit those for Y (some sort of clipping) - the text height of every axis x tick should be adjusted to allow tick scale labels on the same vertical alignment -> bug in pgf: text height does not properly respect to the current font!? + the new \pgfkeys framework: + I have re-implemented all options with \pgfkeys. this allows styles and mixing of TikZ/pgfplots options. + BUG: if someone provides FULL keynames, the method WILL FAIL. + the style= option fails. + the 'x=' and 'y=' options fail. + every option which exists in both, pgf and tikz, will fail! + 'legend style' fails + the 'legend style, grid style, x label style etc. options' test fails + axis limits of zero width are not fixed causing division by zero + ytick=\empty is broken again :-( - if a logplot has very small axis ranges, only ONE tick label will be placed. Thats not enough. In such a case, tick labels should be placed at MINOR TICKS [2-9]*10^i. BTW: if someone places tick marks at [1-9]*10^i, the minor ticks should NOT be disabled. Instead, tick positions should be RECOGNISED AS MINOR TICKS (which is not that simple). + die legend[font=] variable ist doch dasselbe wie in dem tikzstyle zu legenden, oder? warum funktioniert es dann anders? + implementiere enlargelimits fuer log-achsen + markers werden rausgeclipped, wenn die achsen TIGHT sind. + man kann keine leeren listen an tick labels uebergeben! + width/height produziert NICHT die gewuenschte breite. Man sollte ne zusatzoption haben, die die labels grundsaetzlich NICHT beruecksichtigt. X Fix the scaling estimations. Problem: I don't know sizes of labels, legends, titles and tick labels. Idea: -Create a temporary picture \hbox{% \begin{tikzpicture}[xshift=...,yshift=...] % skaliere auf (0,0)--(1,1) \draw (0,0) rectangle (1,1) plaziere labels + legende + vllt. ein tick auf jede achse (?) \end{tikzpicture} }% - measure and remember its size - throw it away -> 9.2.2008: ATTEMPT FAILED. Reasons: 1. it is not possible to place a tikzpicture into a tikzpicture. And it can't be because Tikz updates bounding box parameters GLOBALLY. 2. I could use a combination of - scope, - the 'current bounding box' node, - \pgfpointanchor{current bounding box}{ anchor name }, - drawing commands for labels,legend etc. Effect: bounding box is determined correctly. BUT: - bounding box of real picture may be affected, - every output is drawn because nodes can't be 'thrown away'. At least I do not know how. + enlargelimits muss RELATIV nicht ABSOLUT gemacht werden. + es gibt einen fehler in der achsen skalierung, wenn man sehr grosse limits hat (normale achsen) + default ticks muessen besser an achsenlimits angepasst werden -> bei sehr grossen oder sehr kleinen limits schlaegt die derzeitige einschraenkung der step sizes fehl + addplot plot coordinates { (235 , 43252) } ^ funzt nicht wegen dem leerzeichen vor dem komma X verschiebung des ylabels ist komisch, wegen der rotate option + die standard-positionierung der achsenlabels beruecksichtigt nicht die breite der ticklabels - entweder ist es daher zu weit weg oder zu nah + tickpos packt nur die ticks woanders hin, nicht die tick labels + das log-ding prueft nicht auf 0. was soll es dann ueberhaupt tun!? + das log-ding kann 1e7 nicht lesen, nur 1.0e7 + wenn man jetzt ticks angibt, sieht man die rechenfehler angezeigt. das ist doof. Vllt. kann ich ja zugriff auf die normalisierte gleitpunktdarstellung bekommen und so das als 10^i darstellen?? HALT: die ticks WAREN doch mal als normale zahlen gegeben, oder? Die sollte ich nehmen! + bei bel. ticks moechte ich nur ne gewisse anzahl stellen im tick label haben! + beim auto-limit-lesen geht \addplot[color=red,mark=x] plot coordinates { ... } nicht wegen nervigen white spaces. genauer: das whitespace nach ']' verwirrt TeX. NERV. + autoscale option ist falsch benannt. Die muesste enlargecanvas oder so heissen. + die Achsenticks in der y-log-achse werden nicht geclipped + bei nicht-integer-xmin oder ymin sollte der TICK nicht zur 0 hin runden, sondern immer nach unten. Das funktioniert derzeit nicht bei negativen zahlen. + die Achsenticks werden nicht geclipped + die Achsenbeschriftung wird nicht geclipped + halb geloest: muss die sachen in tex-dimensionen parsen... + wenn man [xy]ticks nicht mit 1-abstand waehlt, werden die minor ticks angezeigt + durch skalieren mit [x=2cm] werden die tick-breiten mit skaliert X durch die verwendung der TEX-Register scheinen ungeauigkeiten beim clippen aufzutreten: man sieht sachen, die aus der ungebungsbox rausragen. + diese liste sollte nicht '\\' fuer die interne repr verwenden. + fuehre optionen fuer die legende ein (position, font) + wenn man mit 'font=\large' die gesamt fontgroesse anpasst, werden die legenden bei 'auto' konfiguration nicht mit breiter. Abhilfe vllt.: hole irgendwoher das '\font' argument .... X Die gesamtbreite enthaelt zu viele nur grob einkalkulierte einfluesse! - rechts gibt es einen randbereich; vermutl. durch ticks - links gibt es das ylabel und die y-achsenbeschriftung ------------------------------------------------------------- FEATURES ------------------------------------------------------------- X implement an axis as path-command + implement proper anchors + provide simple options for useful bounding box truncations + Maybe I could perform a restore of the current bounding box at the END of an axis. Restore means: restore to the setting BEFORE the axis. This is useful if - the size of the inner axis - the size of the final axis remains known until after the complete axis. Motivation: the axis as such can have NO contribution to the pictures dimension, and the user can call '\useasboundingbox (inner axis.north east) rectangle (inner axis.south west); or something like that. This affects \pgf@picminx and the other variables, see the manual. + I could create a node which can be referenced and which has the axis' size [ That touches another open problem, see below] + I could use the new 'local bounding box' option of PGF to restrict the bounding box to the axis' size + I also need some sort of number style for log-tick-labels. + move math mode shifts into \prettyprintnumber implementation. + allow the '-plot' commands. It would be a cool feature if '(FIRST_X,0)' could be inserted as move-to operation before every plot. -> one could make funny features with 'fill' in plot styles. - make the legend code more general: allow \addformattedlegendentry{ \node{hallo} \nextcell \node{foo} \nextcell #1} where #1 is the auto-generated small plot-spec image. One could also provide '#2' as just the current plot spec OPTIONS. + prettyprintnumber is not adequate. There are different aims: 1. The user provides + precision + number format (sci, fixed, truncate to int, 'whatever fits best') + the number in any precision or format. Details: + I need \scifloatround + sollte die mantisse einer exponential-darstellung runden + erfordert u.U. renormalisierungen + the fixed point rounding routine needs to distinguish between + MAXIMUM precision, 1.000 -> 1 + FIXED precision 1.000 -> 1.00 + the 'std' format should use + fixed point if -4 < e < precision + scientific in all other cases. + this is copied from 'printf' manual. Motivation: - 0.00013 wastes more space than 1.3e-4 and the latter one may have higher precision. - with precision 3, exponent > precision like 12345 = 1.2345e4, the fixed point repr has as much digits as the sci format. If exponent >> precision, it is better to use scientific notation and round the mantisse to 'precision'. 2. The user says "show the information appropriately". Examples: - "format my axis tick labels so that information is represented well with very few space" - "format my numbers such that absolute values above THRESH1 are formatted with SCI, and absolute numbers below THRESH2 are formatted with SCI, and those within with fixed pt. - "format my numbers relatively to a reference number - I want to see the difference!" That may also be an appropriate choice for axis descriptions... -> these informal requirements should be converted into a precise definition. They should be available as configurable, predefined "display strategies". 3. The user may not only want to specify the NUMBER FORMAT (sci, fixed, ...), but maybe he also wants to CONFIGURE THE GENERATED STRINGS. Examples: - '1.002' vs '1,002' vs '1\cdot 002' , ... - '1\cdot 10^4' vs '1e4' versus '1e+4' versus '1_{4}', .... -> allow such possiblities. Details for the display-methods (they don't round!): - for log-displays: call \shownumberexponential{1}\empty\exponent -> 10^i; 10^{0.702} -> the precision should be used to round the exponent! -> round exponent with \shownumberfixedpt. Well, maybe a separate method like \shownumberlogdisplay\exponent would be more appropriate. - for scientific format: call \shownumberexponential\sign\mantisse\exponent There are different possible methods to display \mantisse: + MAXIMUM precision + FIXED precision The same holds for the exponent: - zero-pad to X digits - minimum space - for "normal" numbers, either with fixed or maximum precision: \shownumberfixedpt\preperiod\postperiod -> this should also be used for \mantisse! My idea is that any input number HAS a period; then I simply need to divide into the part before and after that. -> conflicts with the idea of rounding: the rounded result may be an integer! Maybe I can return the \preperiod and \postperiod parts from the rounding-routines. Ideas: + prettyprintnumber should access a bunch of configuration variables. + these variables should be configurable by a key-value-parser. + there should be a key-value-interface for prettyprintnumber, but it would be best if that one is not necessarily needed. Most applications will not call prettyprintnumber directly; they will configure the number format once and invoke prettyprintnumber without options. At least I think so.... - I could create a tabular-column format for column pretty printing (possibly with alignment) - I guess I can take the manual for printf and re-implement all of its features (together with some of LaTeX like subscript exponentials or so) - document 'legend plot pos' option + Most of my loops are quite inefficient. I have learned how to employ \@ifnextchar (or the PGF-pendant) to create efficient loops on top of TeXs parser: - use \@ifnextchar to check for a TERMINATE token and recurse otherwise. - linear runtime - I fear, my loops have quadratic runtime + there are some clipping paths in the tick-placement loop which can be replacement with simple \ifdim's. I guess clipping is not the cheapest operation. - remember unfiltered (non-logarithmized) input ticks with \listnew and provide them like '\tick' during ticklabel typesetting + Es sollte unbedingt moeglich sein, die TikZ-Styles zu verwenden. Das \axispreset ist reichlich nervig und inkonsistent mit der restlichen nutzung -> optimal: \path (0,0) axis[xlabel=X,width=...] { \addplot plot coordinates {...}; }; or \path (0,0) axis[xlabel=X] { \addplot plot coordinates {...}; } (1,1); and the scaling would create a plot of dimension (1*x,1*y). What do I really need? - Path commands, - style support, - ... ? - provide accessable names for external axis labels, for example \path[use as bounding box] (0,0) rectangle (1,1) (axis x label.south); -> would only use the axis rectangle and the x label as bounding box. + improve tick placement (more) systematically + provide auto tick labels at 5*i if appropriate + implement the legend as tikz-matrix -> width computation works correctly (there is a bug with font scaling) + provide tick labels as a list like axis[tick labels={A,B,1,4,5,$\frac 12$}] -> convert to \listnew, use listpopfront to access elements + provide options for log plot tick formatting: 10^0.703 vs fixed point format + I could provide a global coordinate transformation T(x) = x * 10^{q-m} where 'q' is the desired range of numbers. It depends on TeXs numerical capacities and the desired size (cm) of the plot. The number 'm' is the order of the input data, \abs{x} \in O(10^m). Advantages: - such a transformation is purely based on period shifts (multiplication/division by 10) and is therefor purely TEXT BASED - one can avoid TeXs limitations on numbers - the full plot precision is maintained Disadvantages: - takes some more time, - any \axispath commands need to use the transformation as well - I need to provide a good implementation of T and T^{-1} - needs a lot of care in programming Ideas: - the transformation could be included into my 'filter coordinates' framework. However, one special treatment has to be done because the transformation can only be done as soon as axis limits are known. I guess it would be better to transform BEFORE TikZ touches the first point. - I should use my normalized floating point parser, possibly with some simplifications + implement numerics on floating point repr + less than, + minimum, + format conversions, + arithmetic shifts - Maybe I could be evil and overwrite PGF's number parsing routine(s) (\pgfmathparse?) Advantage: I could apply log to user input; I could apply this transformation transparently -> maybe the number parsing is only performed by TikZ routines, not the lowlevel PGF ones... perhaps thats easier to replace? - I could try to use the plot-stream framework of PGF directly instead of using the 'plot coordinates' command of tikz. Advantage: would be faster. And the additional features can't be used anyway because of my own number parsing routines... + rename manual.pdf to pgfplots.pdf -> allows texdoc pgfplots + alignment: vertikal kann ich jetzt mit baseline. Kann ich horizontales alignment an (0,0) hinbekommen? + axis hide option ? macht das sinn? - axis equal option + legende anders formatierbar? - ausserhalb des (und isoliert von dem) plots? + horizontal? + grid lines + minor + major -> einfach als verlaengerung der kleinen tick lines - hintergrundfarbe des plots auf "weiss" fixierbar -> sinnvoll fuer vortraege, bei denen anderer hintergrund ist - option: GANZER plot oder nur achse - je eine autoplotspeclist fuer jeden achsentyp (d.h. 4 insgesamt) - es gibt scheinbar in PDF viewern die moeglichkeit, fuer den Druck ein anderes dokument/dokumentteile zu verwenden als fuers Bildschirmbetrachten (draft-package bspw?). Kann man das nutzen, um sowohl farbige als auch S/W-plots zu generieren? -> pruefe draftcopy paket - koennte man den kram auch aus (grossen) tabellen rauslesen? Also sowas wie "plot X versus Y aus file Z"? -> DEBUG! Ideen: + abstrakte datenstruktur als liste von spalten, eine spalte ist ne liste von nummern + einlesen: + zeilenweise, haengt an die jeweiligen spalten mit \listpushback coordinaten dran + read first line as header (optionally my $flags line for column formatting advice) + read just strings, no parsing - optimal: '\t' as separator. How can I teach TeX to use '\t' as separator!? - would allow + \addplot plot table[x=X,y=Z] {\table} and - \typesettable[columns=...,format=sci,...,formatting options=...] {\table} + implementation: simple run through column lists -> CONSISTENT data representation, powerful display options + man sollte \addplot mit '+[OPTIONEN]' starten koennen. + ich sollte das enlargelimits deaktivierbar machen! vllt. auch ne option 'tight' + automatisches tick-platzieren koennte verbessert werden -> insbesondere fuer normale plots - fehlerbars waeren nett - es waere schoen, wenn man auf legend extern zugreifen koennte oder diese sogar plotten koennte + es waere nicht schlecht, wenn man die ticklabels bessere angeben koennte z.B. ticklabellist={1\\2\\3\\} oder so - prettyprintnumber: sollte SCI benutzen, wenn underflow + baseline option, die die linke unter ecke als '(0,0)' koordinate annimmt. Wuerde generell sinn machen, oder? - andere plot-befehle - domain option verwenden zum update der limits - kann man logs anwenden? - plot function + plot file + plot table[x=column1,y=column4] - plot (...) -> see tikz.code.tex for how to implement that! - es waere schoen, wenn ich die ANZAHL der sinnvollen ticks angeben wuerde, d.h. TICKS PRO ACHSE anstelle von TICKS PRO UNIT DIFFERENZ - ich haette sehr gerne ein Skript, dass zu jeder figure ein eps und/oder pdf macht, dass dann bitte schoen ordentlich includiert wird. DAS FUNKTIONIERT AUCH; siehe meine entsprechenden bemuehungen in dem skript. PROBLEM: - der support fuer dvipdfm ist lausig. 1. kein korrektes bestimmen der bounding box 2. beim lesen sucht er nach '\includegraphics{zeug.PDF}', was natuerlich NICHT funktioniert, weil das pdf keine bounding box hat. supi. + passe bounding box und x/y-skalierung "sinnvoll" an. + mache ne option "width=" die die GESAMTbreite angibt. + mache "height" option + belege width und height defaultmaessig sinnvoll + ueberlege ein sinnvolles gesamt-skalierungs-konzept. Das, was ich jetzt gebaut habe, mit 'x=SCALE' und/oder 'y=SCALE' ist nicht ausgereift und eher verwirrend. sowas macht man wohl besser mit pgf-skalierungen! + Die 'x=' und 'y=' optionen sollten direkt in setxvec reingeschrieben werden, ohne schwachfug mit skalierung! + wenn ich 'width=BLA' angebe, wird automatisch 'y=1cm' angenommen. Das ist unintuitiv; man erwartet eher, dass defaultheight im aspect ratio mitskaliert wird. + Nur mit der 'x=' bzw. 'y=' option sollte es NACH AUSSEN moeglich sein, direkt einfluss auf die koordinaten zu nehmen. + entscheide automatisch, ob der abstand zwischen ticks an die skalierung angepasst werden sollte. + [xy]min = auto -> berechne die werte numerisch Ideen: + verzoegere das malen der Achse bis \end{axis} + in jedem \addplot: ich koennte irgendwie pruefen, ob ich 'plot coordinates' habe. Sobald ich diesen modus erkannt hab, kann ich koordinate fuer koordinate parsen und jeweils min/max bilden. + ich muesste dann noch den befehl in einem makro konserieren, sodass er spaeter, nach dem verzoegerten achsen malen kommt. OFFEN: was passiert, wenn NICHT plot coordinates benutzt wird? Vllt. die 'domain' variable abfragen? -> jedenfalls koennte ich mir da durchaus was ueberlegen! + [xy]tick = auto in abhaengigkeit von [xy]mode: zeige ticks von floor(xmin)...ceil(xmax) + mache styles: + every plot + every axis (?) + gebe eine liste von verfuegbaren linestyles an, durch die mit jedem plot-befehl durchgecykled werden kann + option, minor ticks ein/auszuschalten - option, die X/Y-Achsen anders zu formatieren. Moeglichkeiten: - Kasten drumrum - je eine Linie mit Pfeil am Ende - Achse nach rechts oder so + aendere die das \addplot makro derart, dass beliebige plot-moeglichkeiten folgen koennen \addplot[OPTIONS] plot coordinates {...}; -> das \addplot ersetzt gewissermaßen das \draw