Zum Hauptinhalt springen

Daten als Diagramm darstellen

Die Blotch-Bibliothek hat fertige Diagramme, mit denen Sie Zahlen auf einen Blick zeigen. Sie werden in Schwarz-Weiß gezeichnet und unterscheiden Datenreihen durch Strichelungen und Füllmuster statt durch Farben, damit sie auf E-Ink gut lesbar bleiben. Nutzt der Rahmen sein dunkles Design, wechseln sie von selbst zu hell auf dunkel.

import { LineChart } from "~lib/charts/line-chart";

export const Widget = () => <LineChart data={[12, 18, 15, 22, 30]} />;

Jedes Diagramm wird aus ~lib/charts/<name> importiert.

Ein Diagramm wählen​

DiagrammGeeignet für
LineChartVerläufe über die Zeit, als Linie.
AreaChartEine Linie mit gefüllter Fläche darunter.
BarChartWerte nebeneinander vergleichen, stehend oder liegend.
SparklineEine winzige Trendlinie ohne Achsen, die neben einer Zahl steht.
BarIndicatorWie weit eine Zahl an eine andere heranreicht, etwa der belegte Speicher.
DonutGaugeEine Zahl als Anteil einer anderen, als Ring, etwa der Akkustand.
PieChartTeile eines Ganzen.
TreeMapTeile eines Ganzen, als verschachtelte Rechtecke, deren Größe dem Wert entspricht.
CandlestickChartEröffnungs-, Höchst-, Tiefst- und Schlusskurse.
ScatterPlotEinzelne Punkte, ohne verbindende Linie.
HeatmapIntensität über ein Raster, etwa die Aktivität pro Tag.
ContributionGridEin Jahr Aktivität, ein Quadrat pro Tag.
FunnelChartStufen, die schmaler werden, etwa Registrierungen, aus denen Kunden werden.
RadarChartMehrere Messgrößen auf einmal vergleichen.
SankeyChartMengen, die von einer Stelle zu einer anderen fließen.
SurfaceChartEine 3D-Fläche aus Werten über einem Raster.

Auf der Seite jedes Diagramms in der Referenz finden Sie seine Props, mit Beispielen.

Abgerufene Daten als Diagramm​

Diagramme nehmen einfache Arrays entgegen. Wandeln Sie die Antwort der API also mit map in ein Array um. Da useFetch auf die Daten wartet, bevor Ihr Widget gerendert wird, müssen Sie vorher nichts prüfen:

import { LineChart } from "~lib/charts/line-chart";
import { useFetch } from "~lib/use-fetch";

type Reading = {
readonly time: string;
readonly temperature: number;
};

export const Widget = () => {
const { data } = useFetch<Reading[]>("https://api.example.com/readings");

return (
<LineChart
data={data.map((reading): [Date, number] => [
new Date(reading.time),
reading.temperature,
])}
axis={{ x: { visible: true }, y: { visible: true, name: "°C" } }}
width="100%"
height="100%"
/>
);
};

Größe​

width und height nehmen eine Zahl in Pixeln (200) oder eine beliebige CSS-Größe ("100%", "12rem"). Damit ein Diagramm den Platz ausfüllt, den es bekommt, setzen Sie beide auf "100%". So sieht es auch dann richtig aus, wenn die Größe des Widgets geändert wird.

Ein Diagramm mit "100%" füllt auch in jeder Vorschau Ihres Widgets seinen Bereich aus. Linien, Flächen und Balken dehnen sich auf den Bereich, während Text, Punkte und Muster gleich groß bleiben. Runde Diagramme wie PieChart und DonutGauge behalten stattdessen ihre Form und wachsen oder schrumpfen, bis sie hineinpassen.