Datenvisualisierung mit SolidJS und ApexCharts

Einleitung

Datenvisualisierung bietet eine intuitive Möglichkeit, den Nutzern anzuzeigen, was in den Systemen ihrer Webanwendungen passiert. ApexCharts ist ein Paket, das Sie nutzen können, um Diagramme mit SolidJS zu erstellen.

SolidJS ist eine JavaScript-Bibliothek zum Erstellen von Benutzeroberflächen. Da SolidJS auf demselben Design wie JavaScript-Bibliotheken wie React und Svelte basiert, können Entwickler mit Erfahrung in diesen Bibliotheken sich schnell an SolidJS anpassen. SolidJS kompiliert seine Vorlagen sofort in den DOM und aktualisiert den DOM intern mithilfe von reaktiver Programmierung anstelle eines virtuellen DOMs. Komponenten in SolidJS sind reguläre JavaScript-Funktionen, sodass sie nur einmal gerendert werden. SolidJS bietet moderne Framework-Funktionen wie paralleles Rendering, JSX, Fragmente, Kontext, Portale, Suspense, Streaming-SSR und progressive Hydration. Vite ist das primäre Build-Tool, das Ihre Anwendung in JavaScript packt, sodass sie kompakt ist.

ApexCharts ist eine Open-Source-JavaScript-Bibliothek zum Erstellen interaktiver Diagramme für Web-Apps. ApexCharts bietet eine breite Palette flexibler und responsiver Diagramme, die auf verschiedenen Bildschirmgrößen gerendert werden können. Sie können ApexCharts in viele beliebte JavaScript-Frameworks, einschließlich SolidJS, integrieren.

In diesem Tutorial integrieren Sie ApexCharts in eine SolidJS-Anwendung zur Datenvisualisierung. Sie entwickeln eine Anwendung, die Wetterdaten aus der OpenWeatherMap API abruft und in einem Balkendiagramm anzeigt.

Voraussetzungen

Um dieses Tutorial zu folgen, benötigen Sie Folgendes:

  • Node.js, das auf Ihrem Computer installiert ist.
  • Einen Webbrowser wie Firefox oder Chrome.
  • (Optional) Grundkenntnisse der SolidJS-Bibliothek. Sie können die SolidJS-Dokumentation überprüfen.
  • (Optional) Einen Texteditor, der JavaScript-Syntax-Highlighting unterstützt, wie Visual Studio Code oder Atom. Dieses Tutorial verwendet den Befehlszeileneditor Nano.

Schritt 1 – Erstellung des SolidJS-Projekts

In diesem Schritt erstellen Sie ein SolidJS-Projekt und installieren alle erforderlichen Abhängigkeiten, um Diagramme zu erstellen. Sie erstellen eine SolidJS-App mit einer Vite-Vorlage, die den erforderlichen Boilerplate-Code enthält.

In diesem Tutorial wird das Verzeichnis charts genannt, Sie können es jedoch beliebig benennen.

Führen Sie dann den Befehl npx degit aus, um die Vorlage aus dem Repository solid/js/templates/js in Ihr Projektverzeichnis zu klonen:

 
npx degit solidjs/templates/js solid-chart

Sie können solid-chart durch den gewünschten Namen Ihrer Anwendung ersetzen.

Hinweis: TypeScript ist eine Obermenge von JavaScript, die optional statische Typisierung, Klassen und Schnittstellen bietet. Es bietet außerdem verbesserte Codevervollständigung und IntelliSense für JSX. Wenn Sie TypeScript bevorzugen, führen Sie diese Befehle aus:

 
npx degit solidjs/templates/ts solid-chart

Sie erhalten dasselbe Ergebnis für die /ts-Vorlage wie für die /js-Vorlage.

Sie erhalten folgende Ausgabe:

 
Ausgabe

> cloned solidjs/templates#HEAD to solid-chart

Installation der Projektabhängigkeiten

Diese Ausgabe bestätigt, dass die Vorlage auf Ihrem Computer gespeichert wurde. Nachdem Sie die Vorlage in Ihr Projektverzeichnis geklont haben, können Sie in das Verzeichnis wechseln und die notwendigen Abhängigkeiten für das Projekt installieren:

 
cd solid-chart
npm install

NPM installiert die notwendigen Abhängigkeiten für das Projekt.

Sie benötigen zwei weitere Abhängigkeiten, um Diagramme in SolidJS zu integrieren: ApexCharts und Solid-ApexCharts.

ApexCharts ist eine JavaScript-Diagrammbibliothek zur Erstellung interaktiver Visualisierungen für Web-Apps. ApexCharts unterstützt vierzehn Diagrammtypen, darunter Balken-, Linien-, Flächen-, Kreis-, Säulen-, Box-, Kerzenständer-, Heatmap-Diagramme und mehr.

Solid-ApexCharts ist ein SolidJS-Wrapper für ApexCharts, der es Ihnen ermöglicht, ApexCharts-Elemente als SolidJS-Komponenten zu verwenden.

Führen Sie diesen Befehl aus, um diese Abhängigkeiten zu installieren:

 
npm install apexcharts solid-apexcharts

Entwicklungsserver starten

Starten Sie anschließend den Entwicklungsserver mit folgendem Befehl:

Sie erhalten eine Ausgabe, die in etwa so aussieht:

 
Ausgabe

...
  vite v2.9.15 Entwicklungsserver läuft auf:

  > Lokal: http://localhost:3000/
  > Netzwerk: Verwendung von `--host`, um freizugeben

  Bereit in 605ms.

Ihre Anwendung läuft nun auf Port 3000. Öffnen Sie einen Browser und geben Sie die URL http://localhost:3000/ ein, um die SolidJS-Startseite aufzurufen:

SolidJS-Startseite

Hinweis: Wenn Sie das Tutorial auf einem Remote-Server durchführen, können Sie Portweiterleitung verwenden, um die App im Browser zu testen.

Während der Entwicklungsserver noch läuft, öffnen Sie ein weiteres Terminal auf Ihrem lokalen Computer und geben Sie den folgenden Befehl ein:

 
ssh -L 3000:localhost:3000 your_non_root_user@your_server_ip

Nach dem Verbinden mit dem Server navigieren Sie auf Ihrem lokalen Computer im Webbrowser zu http://localhost:3000. Halten Sie das zweite Terminal während des restlichen Tutorials geöffnet.

Nächster Schritt: API-Daten abrufen

Sobald Sie alle Abhängigkeiten installiert haben, können Sie Daten von der API abrufen.

Schritt 2 – Abrufen von Daten von der API

In diesem Schritt verwenden Sie die Fetch API, um Daten von OpenWeatherMap abzurufen. Sie verwenden die Breitengrade eines bestimmten Standorts und zeigen die Variationen in einem Diagramm an.

Öffnen Sie in Ihrem bevorzugten Editor die Datei App.jsx im Ordner src. Dieses Tutorial verwendet den Befehlszeileneditor nano:

Hinweis: Wenn Sie die TypeScript-Vorlage in Schritt 1 verwendet haben, verwenden Sie keine Dateien mit der Endung .jsx. Stattdessen öffnen Sie Dateien mit der Endung .tsx, wenn in diesem Tutorial auf .jsx verwiesen wird.

Hier rufen Sie die Daten von der API ab und übergeben sie an eine andere Komponente, damit diese das Diagramm rendern kann.

API-Daten mit createEffect und fetch abrufen

Entfernen Sie zunächst alle Informationen, die automatisch in der Vorlagendatei generiert wurden.

Importieren Sie anschließend createEffect aus solid-js, indem Sie diese Zeile hinzufügen:

 
import { createEffect } from "solid-js";

Nun erstellen Sie den Effekt, bei dem die Funktion die API aufruft. Fügen Sie diese Zeilen in die Datei ein:

 
createEffect(() => {
  const fetchData = async () => {
    const res = await fetch("http://api.openweathermap.org/geo/1.0/direct?q=London&limit=5&appid=YOUR_API_KEY_HERE");
    const data = await res.json();
  };

  fetchData();
});

Eine asynchrone Funktion namens fetchData fragt die OpenWeatherMap-API mithilfe der Fetch API ab. Diese Funktion wird sofort ausgeführt, da fetchData in einem createEffect aufgerufen wird. Die OpenWeatherMap API gibt normalerweise ein Array von Wetterobjekten zurück. Hier wird eine Begrenzung von 5 verwendet. Aus den Daten werden nur die name und die lat verwendet.

Da die Funktion fetchData asynchron ist, müssen Sie die Antwort abwarten. Die Antwort wird in der Variable res gespeichert, sobald sie verfügbar ist. Nachdem der Server die Daten empfangen hat, wird die Antwort mit der Funktion .json() in JSON umgewandelt und in der Variable data gespeichert.

Reaktive Signalvariablen für Diagrammdaten erstellen

Nachdem Sie die Daten abgerufen haben, besteht die nächste Aufgabe darin, sie in einem Signal zu speichern und zu exportieren. Und nachdem die Daten von der API abgerufen wurden, können Sie das Signal für die Diagrammdaten erstellen und es mit einem leeren Objekt initialisieren. Anschließend aktualisieren Sie den Wert mit den Daten aus der API.

Importieren Sie im selben src/App.jsx die Funktion createSignal aus solid-js. Aktualisieren Sie den ursprünglichen Import, indem Sie den hervorgehobenen Text hinzufügen:

 
import { createSignal, createEffect } from "solid-js";

Erstellen Sie dann eine Signalvariable für die Diagrammdaten direkt nach der Importanweisung, indem Sie den hervorgehobenen Text hinzufügen:

 
const [chartData, setChartData] = createSignal({});

In SolidJS bilden Signale die Grundlage für Reaktivität. Sie enthalten dynamische Werte, sodass bei Änderungen des Wertes eines Signals alles, was davon abhängt, automatisch aktualisiert wird.

Der Startwert ist der Parameter, der zur Erstellung des Signals übergeben wird. Zurückgegeben wird ein Array mit zwei Funktionen: ein Getter und ein Setter. Der erste zurückgegebene Wert ist nicht der Wert selbst, sondern ein Getter, eine Funktion, die den aktuellen Wert zurückgibt. Damit die Bibliothek korrekt nachverfolgen kann, wo das Signal gelesen wird, ist dies erforderlich. Für dieses Tutorial ist chartData der Getter, während setChartData der Setter ist. Das Signal wird mit einem leeren Objekt initialisiert.

Diagrammdaten mit ApexCharts konfigurieren

ApexCharts erfordert, dass Sie Optionen angeben. In diesem Tutorial spezifizieren Sie die series-Option mit einem Datenarray und die xaxis-Option, die Daten- und Kategorienarrays hinzufügt.

Dazu erstellen Sie das Array der von der API zurückgegebenen Werte mithilfe der Methode map(). Die Methode map() ruft eine Funktion für jedes Arrayelement auf und gibt die Ergebnisse in einem neuen Array zurück. Fügen Sie die hervorgehobenen Zeilen innerhalb der asynchronen Funktion fetchData hinzu:

 
createEffect(() => {
  const fetchData = async () => {
    const res = await fetch("http://api.openweathermap.org/geo/1.0/direct?q=London&limit=5&appid=YOUR_API_KEY_HERE");
    const data = await res.json();

    setChartData({
      series: [
        {
          name: "Breitengrade in London",
          data: data.map((d) => d.lat)
        }
      ],
      xaxis: {
        categories: data.map((d) => d.name)
      }
    });
  };

  fetchData();
});

Innerhalb der Setter-Funktion setChartData geben Sie Werte für die Eigenschaften series und xaxis des ApexCharts an.

Im Array series geben Sie einen Wert für die Eigenschaften name und data an. Sie durchlaufen die vom Server zurückgegebenen Daten mit map() und übergeben die Werte der Breitengrade, die durch lat dargestellt werden. Dies sind die Werte in jedem Diagramm.

Das Objekt xaxis erwartet die Eigenschaft categories, die durch Iterieren über die Daten mit der Methode map() festgelegt wird. Dabei werden die Werte von name übergeben. Dieser Wert repräsentiert den Namen der Stadt in jedem Diagramm.

Nachdem Sie chartData mit Diagrammparametern und Daten aus der API aktualisiert haben, müssen Sie Styling hinzufügen und die Daten exportieren. Fügen Sie die hervorgehobenen Zeilen zur Datei hinzu:

 
import { createSignal, createEffect } from "solid-js";
import styles from "./App.module.css";

const [chartData, setChartData] = createSignal({});

createEffect(() => {
  const fetchData = async () => {
    const res = await fetch("http://api.openweathermap.org/geo/1.0/direct?q=London&limit=5&appid=YOUR_API_KEY_HERE");
    const data = await res.json();

    setChartData({
      series: [
        {
          name: "Breitengrade in London",
          data: data.map((d) => d.lat)
        }
      ],
      xaxis: {
        categories: data.map((d) => d.name)
      }
    });
  };

  fetchData();
});

function App() {
  return (

 

Erstellen von Diagrammen mit ApexCharts.js in SolidJS

 

Balkendiagramm

 

); } export { chartData }; export default App;

Erst importieren Sie die Styles für die Rückgabe-Sektion.

Dann definieren Sie die Rückgabe der Funktion App(), die die Überschriften für das Diagramm erstellt, wenn Sie die Anwendung ausführen. Die Styles werden genutzt, um zwei Header zu erstellen.

Signale von SolidJS können exportiert und von jeder anderen Komponente verwendet werden, daher exportieren Sie chartData auch am Ende der Datei.

Speichern und schließen Sie die Datei.

Schritt 3 – Erstellung eines Diagramms mit API-Daten

In diesem Schritt erstellen Sie eine Diagrammkomponente und verwenden die Daten aus der API, um das Diagramm darzustellen.

Erstellen Sie im Ordner src einen neuen Ordner namens components:

Fügen Sie dann eine neue Datei mit dem Namen Charts.jsx hinzu:

 
nano src/components/Charts.jsx

Importieren Sie in der neuen Datei Charts.jsx SolidApexCharts und chartData:

 
import { SolidApexCharts } from "solid-apexcharts";
import { chartData } from "../App";

Fügen Sie nun die folgenden Zeilen hinzu, um eine Funktion namens Charts zu erstellen:

 
function Charts() {
  return (
    
  );
}

export default Charts;

Die Funktion Charts verwendet die Informationen aus der zuvor festgelegten Variable chartData, um ein Balkendiagramm mit einer Breite von 1200 Pixeln zu erstellen. Sie übergeben chartData als Wert für options und setzen die Breite sowie den Typ des Diagramms in der Komponente SolidApexCharts.

Speichern und schließen Sie die Datei.

Öffnen Sie die Datei src/App.jsx:

Importieren Sie nun die Komponente Charts in die Datei App.jsx:

 
import Charts from "./components/Charts";

Fügen Sie die Komponente <Charts /> direkt unter dem Element <h3> hinzu, damit sie beim Ausführen der Anwendung gerendert wird. Aktualisieren Sie die Rückgabe der Funktion App() wie folgt:

 
function App() {
  return (

 

Erstellen von Diagrammen mit ApexCharts.js in SolidJS

 

Balkendiagramm

 

); } export default App;

Speichern und schließen Sie die Datei.

Wenn Sie Ihre Anwendung im Browser aktualisieren, wird das Balkendiagramm mit den dynamischen Daten gerendert:

Balkendiagramm mit Daten

Fazit

In diesem Artikel haben Sie eine SolidJS-Anwendung erstellt, die Daten aus einer API abruft, um Diagramme zu erstellen. Sie haben ApexCharts und Solid-ApexCharts für die Datenvisualisierung in einer SolidJS-Anwendung verwendet. Nun können Sie andere Arten von Diagrammen mit dynamischen Daten erstellen. Versuchen Sie, das Diagramm von einem Balkendiagramm in einen anderen Typ zu ändern, der von ApexCharts unterstützt wird.

Um mehr über SolidJS und seine Funktionen zu erfahren, besuchen Sie die SolidJS-Dokumentation. Um mehr über ApexCharts und andere verfügbare Konfigurationen zu erfahren, lesen Sie die ApexCharts-Dokumentation.

Kostenlosen Account erstellen

Registrieren Sie sich jetzt und erhalten Sie Zugang zu unseren Cloud Produkten.

Das könnte Sie auch interessieren:

centron Managed Cloud Hosting in Deutschland

Java-Array: So prüfst du Werte effizient

JavaScript
Wie prüft man, ob ein Java Array einen Wert enthält? Es gibt viele Möglichkeiten, um zu überprüfen, ob ein Java Array einen bestimmten Wert enthält. Einfache Iteration mit einer for-Schleife…
centron Managed Cloud Hosting in Deutschland

Wie berechnet man den BLEU-Score in Python?

Python
Wie berechnet man den BLEU-Score in Python? Der BLEU-Score in Python ist eine Metrik, die die Güte von maschinellen Übersetzungsmodellen misst. Ursprünglich wurde er nur für Übersetzungsmodelle entwickelt, wird jedoch…