
Render a spec with a writer
ggsql_render.RdThis function takes a Spec object as returned by ggsql_execute() and
renders it with the provided writer.
Arguments
- writer
A
Writerobject created by e.g.vegalite_writer().- spec
A
Specobject returned byggsql_execute().
Value
Writer dependent:
vegalite_writer: A string holding the vegalite JSON representation of the visualization
Examples
reader <- duckdb_reader()
ggsql_register(reader, mtcars, "cars")
spec <- ggsql_execute(reader,
"SELECT * FROM cars VISUALISE mpg AS x DRAW histogram"
)
ggsql_render(vegalite_writer(), spec)
#> [1] "{\n \"$schema\": \"https://vega.github.io/schema/vega-lite/v6.json\",\n \"config\": {\n \"axis\": {\n \"domain\": false,\n \"grid\": true,\n \"gridColor\": \"#FFFFFF\",\n \"gridWidth\": 1,\n \"labelColor\": \"#4D4D4D\",\n \"labelFontSize\": 12,\n \"tickColor\": \"#333333\",\n \"tickSize\": 4,\n \"titleColor\": \"#000000\",\n \"titleFontSize\": 15,\n \"titleFontWeight\": \"normal\",\n \"titlePadding\": 10\n },\n \"header\": {\n \"labelColor\": \"#000000\",\n \"labelFontSize\": 15,\n \"labelFontWeight\": \"normal\",\n \"labelPadding\": 5,\n \"title\": null\n },\n \"legend\": {\n \"labelColor\": \"#4D4D4D\",\n \"labelFontSize\": 12,\n \"rowPadding\": 6,\n \"titleColor\": \"#000000\",\n \"titleFontSize\": 15,\n \"titleFontWeight\": \"normal\",\n \"titlePadding\": 8\n },\n \"title\": {\n \"anchor\": \"start\",\n \"color\": \"#000000\",\n \"fontSize\": 18,\n \"fontWeight\": \"normal\",\n \"frame\": \"group\",\n \"offset\": 10,\n \"subtitleColor\": \"#4D4D4D\",\n \"subtitleFontSize\": 15,\n \"subtitleFontWeight\": \"normal\"\n },\n \"view\": {\n \"fill\": \"#EBEBEB\",\n \"stroke\": null\n }\n },\n \"data\": {\n \"values\": [\n {\n \"__ggsql_aes_pos1__\": 9.9948275862,\n \"__ggsql_aes_pos1end__\": 10.8051724138,\n \"__ggsql_aes_pos2__\": 2.0,\n \"__ggsql_aes_pos2end__\": 0.0,\n \"__ggsql_row_index__\": 0,\n \"__ggsql_source__\": \"__ggsql_layer_0__\"\n },\n {\n \"__ggsql_aes_pos1__\": 13.2362068966,\n \"__ggsql_aes_pos1end__\": 14.0465517242,\n \"__ggsql_aes_pos2__\": 1.0,\n \"__ggsql_aes_pos2end__\": 0.0,\n \"__ggsql_row_index__\": 1,\n \"__ggsql_source__\": \"__ggsql_layer_0__\"\n },\n {\n \"__ggsql_aes_pos1__\": 14.046551724199999,\n \"__ggsql_aes_pos1end__\": 14.856896551799998,\n \"__ggsql_aes_pos2__\": 2.0,\n \"__ggsql_aes_pos2end__\": 0.0,\n \"__ggsql_row_index__\": 2,\n \"__ggsql_source__\": \"__ggsql_layer_0__\"\n },\n {\n \"__ggsql_aes_pos1__\": 14.8568965518,\n \"__ggsql_aes_pos1end__\": 15.6672413794,\n \"__ggsql_aes_pos2__\": 4.0,\n \"__ggsql_aes_pos2end__\": 0.0,\n \"__ggsql_row_index__\": 3,\n \"__ggsql_source__\": \"__ggsql_layer_0__\"\n },\n {\n \"__ggsql_aes_pos1__\": 15.667241379399998,\n \"__ggsql_aes_pos1end__\": 16.477586206999998,\n \"__ggsql_aes_pos2__\": 2.0,\n \"__ggsql_aes_pos2end__\": 0.0,\n \"__ggsql_row_index__\": 4,\n \"__ggsql_source__\": \"__ggsql_layer_0__\"\n },\n {\n \"__ggsql_aes_pos1__\": 17.287931034600003,\n \"__ggsql_aes_pos1end__\": 18.098275862200005,\n \"__ggsql_aes_pos2__\": 2.0,\n \"__ggsql_aes_pos2end__\": 0.0,\n \"__ggsql_row_index__\": 5,\n \"__ggsql_source__\": \"__ggsql_layer_0__\"\n },\n {\n \"__ggsql_aes_pos1__\": 18.0982758622,\n \"__ggsql_aes_pos1end__\": 18.908620689800003,\n \"__ggsql_aes_pos2__\": 2.0,\n \"__ggsql_aes_pos2end__\": 0.0,\n \"__ggsql_row_index__\": 6,\n \"__ggsql_source__\": \"__ggsql_layer_0__\"\n },\n {\n \"__ggsql_aes_pos1__\": 18.9086206898,\n \"__ggsql_aes_pos1end__\": 19.7189655174,\n \"__ggsql_aes_pos2__\": 3.0,\n \"__ggsql_aes_pos2end__\": 0.0,\n \"__ggsql_row_index__\": 7,\n \"__ggsql_source__\": \"__ggsql_layer_0__\"\n },\n {\n \"__ggsql_aes_pos1__\": 20.529310345000003,\n \"__ggsql_aes_pos1end__\": 21.339655172600004,\n \"__ggsql_aes_pos2__\": 2.0,\n \"__ggsql_aes_pos2end__\": 0.0,\n \"__ggsql_row_index__\": 8,\n \"__ggsql_source__\": \"__ggsql_layer_0__\"\n },\n {\n \"__ggsql_aes_pos1__\": 21.3396551726,\n \"__ggsql_aes_pos1end__\": 22.150000000200002,\n \"__ggsql_aes_pos2__\": 3.0,\n \"__ggsql_aes_pos2end__\": 0.0,\n \"__ggsql_row_index__\": 9,\n \"__ggsql_source__\": \"__ggsql_layer_0__\"\n },\n {\n \"__ggsql_aes_pos1__\": 22.150000000200002,\n \"__ggsql_aes_pos1end__\": 22.960344827800004,\n \"__ggsql_aes_pos2__\": 2.0,\n \"__ggsql_aes_pos2end__\": 0.0,\n \"__ggsql_row_index__\": 10,\n \"__ggsql_source__\": \"__ggsql_layer_0__\"\n },\n {\n \"__ggsql_aes_pos1__\": 23.770689655400002,\n \"__ggsql_aes_pos1end__\": 24.581034483000003,\n \"__ggsql_aes_pos2__\": 1.0,\n \"__ggsql_aes_pos2end__\": 0.0,\n \"__ggsql_row_index__\": 11,\n \"__ggsql_source__\": \"__ggsql_layer_0__\"\n },\n {\n \"__ggsql_aes_pos1__\": 25.3913793106,\n \"__ggsql_aes_pos1end__\": 26.201724138200003,\n \"__ggsql_aes_pos2__\": 1.0,\n \"__ggsql_aes_pos2end__\": 0.0,\n \"__ggsql_row_index__\": 12,\n \"__ggsql_source__\": \"__ggsql_layer_0__\"\n },\n {\n \"__ggsql_aes_pos1__\": 27.0120689658,\n \"__ggsql_aes_pos1end__\": 27.822413793400003,\n \"__ggsql_aes_pos2__\": 1.0,\n \"__ggsql_aes_pos2end__\": 0.0,\n \"__ggsql_row_index__\": 13,\n \"__ggsql_source__\": \"__ggsql_layer_0__\"\n },\n {\n \"__ggsql_aes_pos1__\": 30.2534482762,\n \"__ggsql_aes_pos1end__\": 31.063793103800002,\n \"__ggsql_aes_pos2__\": 2.0,\n \"__ggsql_aes_pos2end__\": 0.0,\n \"__ggsql_row_index__\": 14,\n \"__ggsql_source__\": \"__ggsql_layer_0__\"\n },\n {\n \"__ggsql_aes_pos1__\": 31.874137931400004,\n \"__ggsql_aes_pos1end__\": 32.684482759000005,\n \"__ggsql_aes_pos2__\": 1.0,\n \"__ggsql_aes_pos2end__\": 0.0,\n \"__ggsql_row_index__\": 15,\n \"__ggsql_source__\": \"__ggsql_layer_0__\"\n },\n {\n \"__ggsql_aes_pos1__\": 33.494827586599996,\n \"__ggsql_aes_pos1end__\": 34.305172414199994,\n \"__ggsql_aes_pos2__\": 1.0,\n \"__ggsql_aes_pos2end__\": 0.0,\n \"__ggsql_row_index__\": 16,\n \"__ggsql_source__\": \"__ggsql_layer_0__\"\n }\n ]\n },\n \"height\": \"container\",\n \"layer\": [\n {\n \"encoding\": {\n \"fill\": {\n \"value\": \"black\"\n },\n \"fillOpacity\": {\n \"value\": 0.8\n },\n \"stroke\": {\n \"value\": \"black\"\n },\n \"x\": {\n \"axis\": {\n \"labelExpr\": \"datum.label == '25' ? '25' : datum.label == '30' ? '30' : datum.label == '35' ? '35' : datum.label == '10' ? '10' : datum.label == '15' ? '15' : datum.label == '20' ? '20' : datum.label\",\n \"values\": [\n 10.0,\n 15.0,\n 20.0,\n 25.0,\n 30.0,\n 35.0\n ]\n },\n \"field\": \"__ggsql_aes_pos1__\",\n \"scale\": {\n \"domain\": [\n 8.779310344799999,\n 35.520689655599995\n ],\n \"zero\": false\n },\n \"title\": \"mpg\",\n \"type\": \"quantitative\"\n },\n \"x2\": {\n \"field\": \"__ggsql_aes_pos1end__\"\n },\n \"y\": {\n \"axis\": {\n \"labelExpr\": \"datum.label == '0' ? '0' : datum.label == '4' ? '4' : datum.label == '3' ? '3' : datum.label == '2' ? '2' : datum.label == '1' ? '1' : datum.label\",\n \"values\": [\n 0.0,\n 1.0,\n 2.0,\n 3.0,\n 4.0\n ]\n },\n \"field\": \"__ggsql_aes_pos2__\",\n \"scale\": {\n \"domain\": [\n -0.2,\n 4.2\n ],\n \"zero\": false\n },\n \"stack\": null,\n \"title\": \"count\",\n \"type\": \"quantitative\"\n },\n \"y2\": {\n \"field\": \"__ggsql_aes_pos2end__\"\n }\n },\n \"mark\": {\n \"clip\": true,\n \"type\": \"bar\"\n },\n \"transform\": [\n {\n \"filter\": {\n \"equal\": \"__ggsql_layer_0__\",\n \"field\": \"__ggsql_source__\"\n }\n }\n ]\n }\n ],\n \"width\": \"container\"\n}"