summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/doc/latex/pgfplots/todo.txt
blob: e0d804e0d362f93577cfa2db9ba130417ee639b3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
-------------------------------------------------------------
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