Zeitachse duennt sich selbst aus, statt Monatsnamen zusammenzudruecken
Zwoelf Monatsnamen brauchen rund 340 px. In einer Drittelkarte bei 1400 px sind knapp 300 da — "Aug", "Sep" und "Okt" standen ohne Luecke aneinander und lasen sich als ein Wort. Die Ursache war eine Schwelle, die nur die Datenmenge kannte: Erst ab mehr als zwoelf Punkten wurde ueberhaupt ausgeduennt. Genau zwoelf Monate lagen darunter und wurden alle gezeichnet, egal wie schmal die Karte war. Jetzt zwei Stufen, und die zweite haengt an der Breite statt an der Menge: Ueber zwoelf Werten weiterhin fest jede n-te Beschriftung — das ist eine Entscheidung ueber die Reihe und darf nicht vom Bildschirm abhaengen. Darunter entscheidet Recharts zur Laufzeit (preserveStartEnd mit minTickGap) und laesst weg, was nicht passt, haelt dabei aber die erste und letzte Beschriftung; ohne die waere der Zeitraum nicht mehr ablesbar. Ergebnis: bei 1920 px stehen alle zwoelf Monate mit Luft, bei 1400 px zeigt dieselbe Karte Jan, Maer, Mai, Jul, Sep, Dez. Diagramme mit wenigen Punkten (fuenf Kalenderwochen im Auftragseingang) bleiben unveraendert vollstaendig. Die Regel liegt jetzt als achsenIntervall() in chartTheme.ts, weil sie zwei Diagramme betrifft. Der Zeitverlauf hatte den Fall schon behoben, das Saeulendiagramm nicht — genau so laeuft so etwas auseinander. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QPeZNwSeU7qG3RRCwaxEZX
This commit is contained in:
1 parent
84ce322a19
commit
e998231fed
3 files changed
+53
-25
No files matched your search
@@ -267,6 +267,38 @@ export function nettesRaster(
|
||||
*/
|
||||
export const MAX_ACHSENLABELS = 12;
|
||||
|
||||
/**
|
||||
* Mindestabstand zwischen zwei Beschriftungen der Zeitachse, in Pixeln.
|
||||
*
|
||||
* 12 px entspricht Carbons `$spacing-04`. Weniger ist keine Frage des
|
||||
* Geschmacks: Bei rund 8 px beruehren sich "Nov" und "Dez" bereits, und die
|
||||
* Achse liest sich als ein einziges Wort.
|
||||
*/
|
||||
export const MIN_TICK_ABSTAND = 12;
|
||||
|
||||
/**
|
||||
* Wie stark die Zeitachse ihre Beschriftungen ausduennt.
|
||||
*
|
||||
* Zwei Stufen, weil zwei verschiedene Dinge sie zum Kollidieren bringen:
|
||||
*
|
||||
* **Viele Punkte.** Ueber MAX_ACHSENLABELS Werten wird fest jede n-te
|
||||
* Beschriftung gezeigt. Das ist eine Entscheidung ueber die Lesbarkeit der
|
||||
* Reihe und darf nicht von der Kartenbreite abhaengen — sonst zeigt dieselbe
|
||||
* Reihe auf zwei Bildschirmen verschiedene Stuetzstellen.
|
||||
*
|
||||
* **Wenige Punkte in einer schmalen Karte.** Zwoelf Monatsnamen brauchen rund
|
||||
* 340 px. Eine Drittelkarte hat bei 1400 px knapp 300 — dort standen "Aug",
|
||||
* "Sep" und "Okt" ohne Luecke aneinander. Diese Faelle haengen an der Breite
|
||||
* und nicht an der Datenmenge, deshalb entscheidet sie Recharts zur Laufzeit:
|
||||
* `preserveStartEnd` laesst weg, was nicht passt, und haelt dabei die erste
|
||||
* und letzte Beschriftung — ohne die waere der Zeitraum nicht mehr ablesbar.
|
||||
*/
|
||||
export function achsenIntervall(anzahlPunkte: number): number | "preserveStartEnd" {
|
||||
return anzahlPunkte > MAX_ACHSENLABELS
|
||||
? Math.ceil(anzahlPunkte / MAX_ACHSENLABELS) - 1
|
||||
: "preserveStartEnd";
|
||||
}
|
||||
|
||||
/** Farbe nach Index, rotiert sicher innerhalb der Palette. */
|
||||
export function farbe(index: number): string {
|
||||
return KATEGORIE_FARBEN[index % KATEGORIE_FARBEN.length];
|
||||
|
||||
Reference in new issue
Block a user