Skip to content

Getting started ​

In short:

javascript
// Import the library and the CSS
import { DuckPlot } from "@summerforeverco/duck-plot";
import "@summerforeverco/duck-plot/dist/style.css";

// Create a new DuckPlot instance
const chart = new DuckPlot(ddb); // AsyncDuckDB instacne

// Set the table and columns
chart
  .table("tableName") // table in the database
  .x("xColumn") // x-axis column
  .y(["yColumn1", "yColumn2"]) // y-axis column(s) that will be unpivoted
  .color("colorColumn"); // color column (or a color name)

// Set the mark type and options
chart
  .mark("barY") // Observable Plot mark type
  .options({ width: 800, height: 600 }) // Observable Plot options
  .config({ percent: true }); // additional config options

// Render the chart
chart.render(); // render the plot

Installation and loading ​

Install DuckPlot via npm:

bash
npm install @summerforeverco/duck-plot

Then import the library in your project:

javascript
import { DuckPlot } from "@summerforeverco/duck-plot";

Creating a new DuckPlot instance ​

Pass in a DuckDB instance to create a new DuckPlot object. For server side rendering, also include a JSDOM instance and an open-type font object

javascript
const myPlot = new DuckPlot(
  ddb // AsyncDuckDB,
  { jsdom, font } // for server side rendering { jsdom: JSDOM; font?: opentype.Font }
)

Configuring a plot ​

To configure a plot, you need to specify the table and the columns you wish to visualize. You can use the following methods which correspond to each axis. See the sections on Configuring charts for more details.

js
// Create an area chart of Amazon and Apple stock prices
duckPlot
  .table("stocks_wide") // table in the database
  .x("Date")
  .y(["AMZN", "AAPL"]) // multiple y columns
  .mark("areaY") // mark type
  .options({ x: { label: "Year" }, height: 250 }) // Observable Plot options
  .config({ percent: true }); // compute as percentage (in DuckDB)

Rendering a chart ​

To render a chart, just call the .render() method, noting that it's an asynchronous operation.

javascript
myPlot.render();