ggsql - Eine grafische Grammatik für SQL
(opensource.posit.co)- Visualisierungstool auf Basis der SQL-Syntax, das Datenabfrage und Diagrammerstellung in einem Ablauf verbindet – über Klauseln wie
VISUALIZE,DRAW,PLACE,SCALEundLABEL - Spalten lassen sich visuellen Eigenschaften zuordnen, und durch kombinierbare Layer können Streudiagramme, Balkendiagramme, Histogramme, Boxplots und Annotationen innerhalb derselben Struktur erstellt werden
- SQL-Abfrageergebnisse werden direkt als Eingabe für Visualisierungen verwendet; einige Layer holen Aggregationen sogar über eine einzige SQL-Abfrage, was für große Datenmengen vorteilhaft ist
- Ausgelegt als kleine, fokussierte ausführbare Datei, die ohne R- oder Python-Runtime nutzbar ist und sich daher gut in codebasierte Reporting-Tools und KI-Analyseassistenten integrieren lässt
- Die aktuelle Version ist ein alpha-release; geplant sind Erweiterungen wie ein High-Performance-Writer, Themes, Interaktivität, ein Language Server, ein Formatter und Unterstützung für räumliche Daten
Einführung in ggsql
- ggsql ist eine Implementierung der grammar of graphics auf Basis der SQL-Syntax und erweitert SQL um strukturierte Visualisierungsfunktionen
- Nutzbar in Quarto, Jupyter notebooks, Positron, VS Code und mehr
- Es wurde so entworfen, dass SQL-Nutzer Visualisierungscode auf vertraute Weise schreiben können
- Die deklarative und kombinierbare Struktur von SQL-Klauseln wird auch auf die Visualisierungssprache angewendet
- Der Beitrag entfaltet die Kernsprache von ggsql zusammen mit Motivation und Anwendungsbeispielen
Grundlegende Beispiele
-
Erster Plot
- Mit dem eingebauten Datensatz
penguinslässt sich ein Streudiagramm erstellenVISUALIZE bill_len AS x, bill_dep AS y FROM ggsql:penguinsDRAW point
- In
VISUALIZEwerden Datenspalten auf visuelle Eigenschaften gemappt, undDRAW pointerzeugt auf Basis dieses Standard-Mappings einen Punkt-Layer - Durch das bloße Hinzufügen von
species AS colorlässt sich eine Farbgruppierung nach Kategorien anwendenVISUALIZE bill_len AS x, bill_dep AS y, species AS color FROM ggsql:penguinsDRAW point
- Mit zusätzlichem
DRAW smoothkann über dem Punkt-Layer ein Regressionslinien-Layer ergänzt werden- Das Farb-Mapping nach Arten bleibt erhalten, sodass für jede
specieseine eigene Linie erzeugt wird
- Das Farb-Mapping nach Arten bleibt erhalten, sodass für jede
- Statt vordefinierter Plot-Typen verfolgt ggsql einen modularen Ansatz aus kombinierbaren Komponenten
- Bei gleicher Grundstruktur kann man zu einer völlig anderen Visualisierung wechseln
VISUALIZE island AS x, species AS color FROM ggsql:penguinsDRAW bar
- Mit dem eingebauten Datensatz
-
Vollständiges Beispiel
- Der obere Teil ist eine normale SQL-Abfrage, ab
VISUALIZEbeginnt die Visualisierungsabfrage- Im Beispiel wird DuckDB als Backend verwendet
- Im SQL-Teil werden
ROW_NUMBER()undQUALIFYverwendet, um ausastronauts.parquetnur die jeweils jüngste Mission pro Name zu behalten - Danach werden zwei Mengen zusammengeführt
year_of_selection - year_of_birthwird alsageberechnet und mit der KategorieAge at selectionversehenyear_of_mission - year_of_birthwird alsageberechnet und mit der KategorieAge at missionversehen- Beide Ergebnisse werden mit
UNION ALLzusammengeführt
- In der Visualisierungsabfrage werden
age AS xundcategory AS fillgemappt und anschließendDRAW histogramverwendet- Mit
SETTING binwidth => 1, position => 'identity'
- Mit
- Mit
PLACE rulewird eine Annotation mit vorab berechneten Mittelwert-Positionen hinzugefügtx => (34, 44),linetype => 'dotted'
- Mit
PLACE textwird eine Text-Annotation ergänztx => (34, 44, 60)y => (66, 49, 20)- Die Labels enthalten
Mean age at selection = 34,Mean age at mission = 44,John Glenn was 77 on his last mission - the oldest person to travel in space! - Mit
hjust => 'left',vjust => 'top',offset => (10, 0)
SCALE fill TO accentwandelt die auffillgemappten Werte in die Farbpaletteaccentum- Über die Klausel
LABELwerden Titel, Untertitel, x-Achsenbeschriftung und Legendenlabel gesteuert- Titel
How old are astronauts on their most recent mission? - Untertitel
Age of astronauts when they were selected and when they were sent on their mission - x-Achse
Age of astronaut (years) fill => null
- Titel
- Der obere Teil ist eine normale SQL-Abfrage, ab
Aufbau einer Visualisierungsabfrage
- Vor
VISUALIZEsteht reines SQL; die Ergebnistabelle wird nicht als Tabelle ausgegeben, sondern direkt an die Visualisierung übergeben - Im SQL-Teil erzeugte Tabellen oder CTEs können in der Visualisierungsabfrage referenziert werden
- Wenn die Daten bereits in einer für die Visualisierung geeigneten Form vorliegen, kann der SQL-Teil entfallen
VISUALIZE year_of_selection AS x, year_of_mission AS y FROM 'astronauts.parquet'
VISUALIZEoderVISUALISEmarkiert das Ende der SQL-Abfrage und den Beginn der Visualisierungsabfrage- Das Mapping verknüpft Spalten mit visuellen Eigenschaften, also aesthetics
- Im Beispiel entspricht
ageder Position auf der x-Achse,categoryder Füllfarbe
- Im Beispiel entspricht
DRAWfügt der Visualisierung Layer hinzu- Es gibt einfache Typen wie
point, aber auch Typen wiehistogram, die Berechnungen für gebündelte Aggregationen benötigen - Layer werden in der definierten Reihenfolge gerendert
- Es gibt einfache Typen wie
PLACEist eine Schwesterklausel zuDRAWund dient ausschließlich Annotationen, die statt Tabellendaten Literalwerte verwenden- Die Beispielvisualisierung besteht aus drei Layern: einem Histogramm-Layer, einem Annotation-Layer mit Hilfslinien und einem Annotation-Layer mit Text
- Ein einzelner Layer muss nicht genau einem grafischen Objekt entsprechen; er kann mehrere Einzelobjekte desselben Typs rendern
SCALEist die Klausel, die Datenwerte in für die jeweilige aesthetic passende Werte umwandelt- Das reicht von der Umwandlung von Zeichenkettenkategorien in tatsächliche Farben bis zu kontinuierlichen Transformationen, der Definition von Breakpoints oder der Festlegung von Skalentypen wie ordinal oder binned
LABELunterstützt das Hinzufügen und Ändern von Textlabels wie Titel, Untertitel, Achsentitel und Legendentitel
Einen Schritt zurück
- Das obige Beispiel enthält viel Syntax, deckt aber die wichtigen Teile der Kernsprache auf einmal ab
- Viele Visualisierungsabfragen können deutlich einfacher sein
- Als Beispiel wird ein Boxplot der Geburtsjahre nach Geschlecht aus
astronauts.parquetgezeigtVISUALIZE sex AS x, year_of_birth AS y FROM 'astronauts.parquet'DRAW boxplot
- Der Code kann länger sein als in anderen Plotting-Systemen, bietet dafür aber mehr Struktur, Kombinierbarkeit und Selbstbeschreibungsfähigkeit
- Diese Eigenschaften erleichtern es Nutzern, das Verhalten aller Plot-Arten zu verinnerlichen, und sind auch für zukünftige LLM-Coding-Assistenten von Vorteil
- Dieselbe Beziehung lässt sich leicht in ein Jitter-Streudiagramm umwandeln
DRAW pointSETTING position => 'jitter'
- Der Jitter kann so eingestellt werden, dass er der Datenverteilung folgt und damit einen Violin-Plot-Charakter erhält
SETTING position => 'jitter', distribution => 'density'
- Diese Syntaxstruktur und Kombinierbarkeit erleichtern Wiederholungen in explorativer Analyse und Visualisierungsdesign
Warum ggsql?
- Fünf Gründe werden für die Entwicklung von ggsql genannt
- Unterstützung für Datenanalysten und Data Scientists, die hauptsächlich mit SQL arbeiten
- Die hohe Passung zwischen SQL und der grammar of graphics
- Das Ziel, ein leistungsfähiges codebasiertes Visualisierungstool ohne vollständige Programmiersprache wie R oder Python bereitzustellen
- Die starke Fähigkeit von LLMs zur Verarbeitung von SQL und die Möglichkeit neuer Visualisierungsinterfaces
- Die Absicht, 18 Jahre Entwicklungserfahrung mit ggplot2 auf ein neues Fundament zu übertragen
-
Hello, SQL user
- Auch während der Data-Science-Revolution mit dem Fokus auf R und Python blieb SQL die verlässliche Grundlage für Datenarbeit
- Es gibt viele Menschen in der Datenarbeit, die ausschließlich oder überwiegend SQL verwenden
- Die bisherigen Visualisierungsoptionen für diese Gruppe seien laut Beitrag meist nicht optimal
- Daten exportieren, um dann R oder Python zu verwenden
- GUI-basierte BI-Tools nutzen, die Reproduzierbarkeit nur unzureichend unterstützen
- Direkt in Abfragen integrierte Visualisierungstools verwenden, die aber als nicht leistungsfähig oder ergonomisch genug eingeschätzt werden
- Die Syntax von ggsql wurde so gestaltet, dass SQL-Nutzer sie sofort verstehen können
- Sie nutzt die Erwartung an kombinierbare und deklarative Klauseln
- ggsql soll nicht nur Visualisierung verbessern, sondern SQL-Nutzer auch in das Ökosystem codebasierter Berichte mit Quarto hineinziehen
-
Deklarative Datenverarbeitung, deklarative Visualisierung
- SQL ist eine domänenspezifische Sprache für relationale Daten, die in einer oder mehreren Tabellen gespeichert sind
- Die SQL-Syntax basiert auf Konzepten der relationalen Algebra und bietet eine strukturierte Denkweise für Datenmanipulation
- Die Semantik von SQL definiert keine funktionale, sondern eine deklarative Menge modularer Operationen
- Die grammar of graphics ist ein theoretischer Rahmen, der Datenvisualisierung in modulare Komponenten zerlegt
- Werkzeuge wie ggplot2 setzen dieses Konzept praktisch um
- Auch die grammar of graphics definiert eher eine deklarative als eine funktionale Menge modularer Operationen
- Beide Systeme haben in ihrer Herangehensweise an den jeweiligen Bereich starke Gemeinsamkeiten und ermöglichen gemeinsam eine natürliche und leistungsfähige Pipeline von Rohdaten bis zur fertigen Visualisierung
-
No runtime, no problem
- ggplot2 erfordert eine R-Installation, plotnine eine Python-Installation
- Ein Visualisierungstool auf Basis einer einzelnen, fokussierten ausführbaren Datei bietet dagegen klare Vorteile
- Eine kleine ausführbare Datei in andere Werkzeuge einzubetten ist einfacher als das Bündeln oder Installieren von R oder Python
- Durch den kleineren Umfang lässt sich schadhafte oder versehentliche Codeausführung leichter per Sandbox begrenzen
- Dadurch wird ggsql attraktiver für die Integration in KI-Analyseassistenten oder codebasierte Reporting-Tools, die Code in vielen Umgebungen ausführen
- Der Verzicht auf eine interpretierte Sprache bringt Einschränkungen mit sich, aber auch deutliche Vorteile
- Der wichtigste Vorteil ist, dass dank der strengen Struktur im Backend die gesamte Datenpipeline pro Layer als einzelne SQL-Abfrage ausgeführt werden kann
- Beispiel: Bei einem Balkendiagramm über 10 Milliarden Transaktionen werden aus dem Data Warehouse nur die Count-Werte pro Balken geholt, nicht alle 10 Milliarden Zeilen
- Dasselbe Prinzip gilt auch für komplexere Layer-Typen wie Boxplots oder Dichteplots
- Das steht im Kontrast zu den meisten Visualisierungstools, die erst den gesamten Datensatz materialisieren und danach Berechnungen und Plotting ausführen
-
SELECT pod_door FROM bay WHERE closed- Es ist belegt, dass LLMs sehr effektiv natürliche Sprache in SQL umwandeln können
- Die Erwartung ist, dass derselbe Effekt auch auf ggsql übertragbar ist
- In
querychatist bereits natürliche visuelle Datenexploration über ggsql möglich - Weil ggsql eine sicherere und leichtere Runtime als R oder Python bietet, schafft es mehr Vertrauen beim Einsatz von Coding-Agenten in Produktionsumgebungen
-
We are now wise beyond our years
- 18 Jahre Entwicklung und Wartung von ggplot2 bedeuten 18 Jahre angesammeltes Denken über Grammatik, Benutzbarkeit und Design von Datenvisualisierung
- Dieses Wissen kann nicht vollständig zurück in ggplot2 fließen
- Früh getroffene Entscheidungen und Nutzererwartungen müssen respektiert werden; selbst Veränderungen wären nur sehr schrittweise möglich
- ggsql ist eine blank slate
- Ein Projekt, das von Grund auf neu aufgebaut wird
- Ein System, das für eine Umgebung ohne bestehende Erwartungen an Visualisierungstools entworfen wurde
- Laut Beitrag verlieh dieser Ausgangspunkt der Entwicklung ein Gefühl von Freiheit und Energie, das sich auch in der Nutzererfahrung zeige
Zukunft
- Die aktuelle Version ist ein alpha-release und noch nicht fertig
- Genannt wird eine nicht vollständige Liste geplanter Erweiterungen
- Ein neuer High-Performance-Writer, von Grund auf in Rust geschrieben
- Theme-Infrastruktur
- Interaktivität
- Ein End-to-End-Deployment-Flow von Posit Workbench oder Positron bis Connect
- Ein vollständiger ggsql Language Server und Code-Formatter
- Unterstützung für räumliche Daten
-
Was bedeutet das für die Entwicklung von ggplot2?
- Es wird erwähnt, dass ggplot2-Nutzer die Ankündigung von ggsql mit einer Mischung aus Sorge und Erwartung betrachten könnten
- Die Antwort auf die Frage, ob Posit ggplot2 zugunsten von ggsql zurückstellt, lautet nein
- ggplot2 ist bereits sehr ausgereift und stabil, soll aber weiterhin unterstützt und ausgebaut werden
- Es wird gehofft, dass die Entwicklung von ggsql auch dazu beiträgt, neue Funktionen für ggplot2 zu ermöglichen
Mehr erfahren
- Wer ggsql sofort ausprobieren möchte, findet im Abschnitt Getting started auf der ggsql-Website Installationshinweise und Tutorials
- Auf der Dokumentationsseite lässt sich der gesamte von ggsql unterstützte Funktionsumfang nachlesen
- Abschließend wird um Feedback zur Nutzererfahrung gebeten
1 Kommentare
Hacker-News-Kommentare
Vielleicht lag es daran, dass ich den Artikel nur schnell überflogen habe, aber allein anhand des Blogposts und der Dokumentation hatte ich das Gefühl, dass die Beziehung zu SQL-Datenbanken nicht klar erklärt wurde.
Zuerst vermutete ich, es sei so etwas wie eine SQL-ähnliche Visualisierungs-DSL, die von einer Frontend-Chartbibliothek verarbeitet wird.
Die Anatomy-Dokumentation las sich für mich so, aber in der FAQ unter "Can I use SQL queries inside the VISUALISE clause" stand, dass Teile der Syntax direkt an die Datenbank weitergereicht werden.
Auf der Startseite steht zwar "ggsql interfaces directly with your database", aber wie die Verbindung konkret funktioniert, war nicht gut erkennbar, was verwirrend war.
ggsql kann sich direkt mit einem Datenbank-Backend verbinden und auf Wunsch auch mit in-memory DuckDB laufen.
Visualisierungsabfragen werden für jede Ebene der Visualisierung in SQL-Queries umgewandelt, und die zurückgegebenen Tabellen werden dann zum Rendern verwendet.
Eine Query wie
VISUALISE page_views AS x FROM visits DRAW smoothwird zum Beispiel in SQL umgewandelt, das einen Smoothing-Kernel über die Daten berechnet, und mit den zurückgegebenen Punkten wird dann das endgültige Liniendiagramm gezeichnet.Der reader kümmert sich um die Datenbankverbindung und die Erzeugung des SQL-Dialekts für die jeweilige DB.
Im aktuellen Alpha-Stadium werden duckdb, sqlite und ein experimenteller ODBC-reader unterstützt, und die Entwicklung konzentriert sich vor allem auf lokales, dateibasiertes DuckDB.
Die Kernidee ist, Visualisierungsabfragen in mehrere SQL-Queries umzuwandeln, sie in der Datenbank auszuführen und dann nur aus den kleinen zurückgegebenen Ergebnismengen die Charts aufzubauen.
So lassen sich auch bei sehr vielen Zeilen nur die für ein Histogramm nötigen Statistiken per SQL berechnen und dann nur die wenigen Punkte abrufen, die zum Zeichnen der Balkenhöhen gebraucht werden.
Standardmäßig wird eine in-memory-DuckDB-Verbindung verwendet; in der CLI kann man mit
--readereine Verbindung zu einer Datei auf Disk oder zu einer ODBC-URI herstellen.In Positron lässt sich das über den "Connections"-Bereich einfacher einrichten, und im ggsql-Jupyter-Kernel kann der reader per magic SQL comment angegeben werden.
In der Dokumentation soll diese Integration mit externen Tools künftig noch besser erklärt werden.
SQL ist eine deklarative Sprache zur Datenmanipulation; sie wird oft zum Abfragen von Datenbanken verwendet, ist aber nicht ausschließlich an Datenbanken gebunden.
Man kann SQL auch auf Flatfiles, Datenströme oder Daten im Programmspeicher anwenden.
Umgekehrt kann man Datenbanken auch ohne SQL abfragen.
Beim Überfliegen des Artikels habe ich versucht herauszufinden, warum das gebraucht wird und welches Problem es löst, aber es kam für mich nicht richtig rüber.
Ich dachte zuerst, es gehe darum, Tabellen aus einer entfernten SQL-Datenbank direkt zu visualisieren und den Schritt zu vermeiden, sie erst in ein R data frame zu ziehen und dann ggplot darauf laufen zu lassen.
Aber dann fragte ich mich, warum man dafür überhaupt eine neue SQL-ähnliche Sprache schaffen muss.
In R gibt es mit dbplyr ja bereits etwas, das zwischen R und SQL übersetzt, daher schien es mir direkter, ggplot so zu erweitern, dass es dbplyr-tbl-Objekte direkt unterstützt und SQL erzeugt.
Oder ist SQL einfach schon so vertraut, dass man annimmt, viele Leute würden solche ggplot-artigen Aufgaben lieber in dieser Syntax erledigen?
Erst nachdem ich fast die gesamte Doku gelesen hatte, verstand ich, dass es sich um eine eigenständige Visualisierungs-App mit DuckDB- und SQLite-Backends handelt, die derzeit mit Vegalite rendert und künftig weitere Backends und Renderer unterstützen will.
Wie ein Kommentar weiter unten sagt, wirkt es wie ein Tool, das SQL-zentrierten Nutzern, die Python oder R nicht kennen, das Erstellen von Visualisierungen ermöglichen soll.
Ich stimme allerdings zu, dass der Ankündigungstext das besser hätte herausarbeiten können.
Meiner Erfahrung nach ist die gemeinsame Sprache von Analysten, Wissenschaftlern und Ingenieuren am Ende oft SQL.
Dass man das auch in R machen kann, stimmt, aber reale Projekte werden nicht zwingend in R oder Python geschrieben; SQL-Datenbanken und Zugriffsschichten sind dagegen meist ohnehin schon vorhanden.
Ich nutze außerdem in marimo notebooks oft SQL-Zellen mit einer DuckDB im Hintergrund, und dort direkt aus SQL heraus plotten zu können, wäre sehr praktisch.
Und schließlich fand ich Python-Plotting-APIs immer ziemlich schwer zu merken und flüssig zu benutzen.
Selbst für einen einfachen Scatterplot gibt es in matplotlib zu viel boilerplate, daher fände ich eine einheitliche Syntax innerhalb derselben Query-Sprache ziemlich gut.
Der interessante Punkt liegt eher in der Kombination aus SQL als Interface und der Formalisierung durch GoG als in einer bestimmten Bibliothek.
Der eigentliche Renderer oder die Runtime sind zwar wichtig, aber eher Implementierungsdetails.
Natürlich ist das nichts, was man mit ähnlich vielen Zeilen Code nicht auch in R oder Python mit matplotlib hinbekommen könnte.
Aber solche Umgebungen sicher gegen bösartige Eingaben zu sandboxen, ist schwierig, während sich so eine deklarative Sprache leicht hosten ließe, sodass nicht vertrauenswürdige Nutzer ggsql eingeben können und am Ende nur ein Diagramm erzeugt wird.
In diesem Sinn ist das eindeutig nützlich.
Für die meisten üblichen Anwendungsfälle scheint es aber wahrscheinlich einfacher zu sein, einem bevorzugten LLM matplotlib-Code erzeugen zu lassen.
Ich unterstütze das Projekt grundsätzlich und stimme stark zu, dass das Konzept sehr gut zu SQL passt.
In R Daten mit
WITHvorzubereiten und danachVISUALIZEanzuhängen, entspricht fast genau auch meinem Stil beim Plotten.Abgesehen vom Vorteil einer einfachen DSL ist mir aber noch nicht klar, welchen Vorteil es gegenüber ggplot2 gibt, der die Kosten einer weiteren DSL rechtfertigt.
Der fast einzige Grund, warum ich ggplot2 für Visualisierungen verlasse, ist, dass nicht standardisierte Visualisierungen ziemlich schwierig werden, sobald man den Standardfall mit vorhandenen geoms verlässt.
Wenn ich etwas nur leicht Abweichendes bauen will, ist es oft viel einfacher, auf primitive Drawing-Operationen herunterzugehen, als sich einen ggplot-kompatiblen Adapter zurechtzubiegen.
Selbst das bloße Verpacken eines häufig verwendeten Teils der Spezifikation in eine Funktion fühlt sich nicht immer geschmeidig an, je nachdem, ob es mit
+komponiert oder mit|>bzw. dem älteren%>%in eine Pipe eingebunden wird.Und wir haben auch keineswegs vor, die Entwicklung von ggplot2 einzustellen.
ggsql ist teilweise ein Versuch, neue Nutzergruppen zu erreichen und starke Visualisierung in neue Kontexte zu bringen.
Wer die meiste Zeit in R verbringt, gehört wahrscheinlich nicht zur Kernzielgruppe.
Es gibt allerdings auch einige ziemlich interessante Elemente, die ggplot2 nicht hat, sodass das Erkunden trotzdem Spaß machen könnte.
|>und%>%sind nicht derselbe Operator.Die relativ neue base pipe
|>ist zwar schneller, unterstützt aber nicht Dinge wie den Punkt-Platzhalter von%>%, wenn ein Wert nicht als erstes Funktionsargument übergeben werden soll.In manchen Fällen kann
%>%den Ausdruck deshalb etwas sauberer machen.Das finde ich wirklich gut.
Auch wir sind beim Bau von GFQL, einer graph dataframe query language, zu ähnlichen Schlussfolgerungen gekommen.
Besonders für einen LLM-freundlichen Interface, das ohne Code-Sandbox nutzbar ist, bestand in Visualisierungs- und Analyse-Stacks Bedarf.
Schon mit grundlegenden opencypher-Erweiterungen konnten wir recht umfangreiche GPU-gestützte visuelle Analyse-Pipelines bauen, und aus demselben Grund erscheint der Weg über SQL in der Tabellenwelt ebenfalls sehr sinnvoll.
Als GFQL-Beispiele lohnen sich overall pipelines zu Datenladen, Shape-Transformation, algorithmusbasierter Enrichment, visueller Kodierung und erstklassigen Pipelines sowie declarative visual encodings in Form einfacher Aufrufe.
Das sieht ziemlich gut aus.
Ich fände es allerdings schön, wenn es auch in Umgebungen ohne Syntax-Unterstützung elegant degradieren würde.
Ich habe selbst einmal etwas in ähnlicher Richtung entworfen, allerdings mit einem viel einfacheren Ansatz innerhalb von SQL als GoG, und dort war so ein Degrade möglich.
Es war keine besonders gut lesbare Syntax, eher etwas wie die sqlnb spec.
Wenn möglich, wäre eine etwas konkretere Erklärung hilfreich.
Als Tool in einer ähnlichen Richtung fällt mir auch Shaper auf DuckDB-Basis ein.
Das ist ein SQL-first-Ansatz für ganze Dashboards, und die Getting-started-Dokumentation wirkt von der Richtung her ähnlich.
Zunächst einmal sieht ggsql wirklich großartig aus, und ich möchte es bald ausprobieren.
Allerdings ist mir in der Dokumentation eine auffällige Lücke aufgefallen: Es war schwer, etwas über die Ausgabeformate zu finden.
Kann man PDF ausgeben, gibt es SVG oder PNG, und wie steuert man Dinge wie Breite und Höhe der Ausgabe? Das war nicht gut erkennbar.
Der nächste Hinweis, den ich gefunden habe, war in der Python-Library-Doku
chart.display()undchart.save("chart.html").Diese Ausgabe kann mit bereits vorhandenen Tools als interaktives Chart, SVG, PNG usw. gerendert werden, und auch Größensteuerung folgt den Einstellungen dieser Tools.
Der ggsql-Jupyter-Kernel kann dieses Vegalite-Spec nutzen, um innerhalb von Quarto-Dokumenten Charts auszugeben.
Künftig planen wir einen neuen High-Performance-writer, der ohne diesen zwischengeschalteten Vegalite-Schritt auskommt; dann werden wir solche Fragen vermutlich klarer beantworten können.
Mich würde interessieren, ob es in naher oder ferner Zukunft Pläne zur Integration mit ggplot2-Erweiterungspaketen gibt, etwa den ggplot2 extension packages.
Falls das schon beantwortet wurde, entschuldige bitte.
Das Ziel dieses Projekts ist nicht, ggplot2 zu ersetzen, sondern einen anderen Ansatz zu bieten.
Es wird vieles können, was ggplot2 auch kann, und womöglich auch manches, was ggplot2 nicht kann, aber ich erwarte, dass ggplot2 noch lange Zeit für viele Aufgaben das mächtigere Werkzeug bleiben wird.
Das sieht wirklich großartig aus, und ich werde es bald ausprobieren.
Was bei mir direkt Klick gemacht hat, war die Erklärung in der Grammar-Dokumentation.
Mit dem vertrauten
SELECTwählt man Daten aus, mitVISUALIZEoderVISUALISEwechselt man von der Tabelle zum Plot, danach mappt man mitDRAWdie aesthetics und stapelt dannSCALE,FACETundLABELnacheinander auf — beeindruckend fand ich, wie konsequent das die strukturelle Denkweise von SQL fortsetzt.Mir hat der Layering-Ansatz wirklich gut gefallen.
Sobald man über Basisdiagramme hinausgeht, scheint dieser Ansatz Probleme gut zu lösen, auf die ich bei anderen gemischten SQL-Visualisierungstools oft gestoßen bin.