The chart component

A component that plots data. Line, area, bar, and pie charts are all supported. Each item in the component is a data point in the graph.

Top-level parameters

name required type description
type REQUIRED

TEXT

The type of chart. One of: "line", "area", "bar", "column", "pie", "scatter", "bubble", "heatmap", "rangeBar". "column" is a synonym of "bar".

class

TEXT

class attribute added to the container in HTML. It can be used to apply custom styling to this item through css. Added in v0.18.0.

color

COLOR

The name of a color in which to display the chart. If there are multiple series in the chart, this parameter can be repeated multiple times.

height

INTEGER

Height of the chart, in pixels. By default: 250

horizontal

BOOLEAN

Displays a bar chart with horizontal bars instead of vertical ones.

id

TEXT

id attribute added to the container in HTML. It can be used to target this item through css or for scrolling to this item through links (use "#id" in link url).

labels

BOOLEAN

Whether to show the data labels on the chart or not.

logarithmic

BOOLEAN

Display the y-axis in logarithmic scale.

marker

REAL

Marker size

show_legend

BOOLEAN

Whether to display the legend listing all chart series. Defaults to true.

stacked

BOOLEAN

Whether to cumulate values from different series. Supported by the "line", "area" and "bar" chart types, and ignored by the others. Series are aligned on their x values, and a series that has no value for a given x counts as zero there.

time

BOOLEAN

Whether the x-axis represents time. If set to true, the x values will be parsed and formatted as dates for the user.

title

TEXT

The name of the chart.

toolbar

BOOLEAN

Whether to display a toolbar at the top right of the chart, that offers downloading the data as CSV.

xmax

TEXT

The maximum value for the x-axis. When time is true, this can be a date or timestamp.

xmin

TEXT

The minimal value for the x-axis. When time is true, this can be a date or timestamp.

xticks

INTEGER

Number of ticks on the x axis.

xtitle

TEXT

Title of the x axis, displayed below it.

ymax

REAL

The maximum value for the y-axis.

ymin

REAL

The minimal value for the y-axis.

ystep

REAL

Step between ticks on the y axis.

yticks

INTEGER

Number of ticks on the y axis.

ytitle

TEXT

Title of the y axis, displayed to its left.

ztitle

TEXT

Title of the z axis, displayed in tooltips.

Row-level parameters

name required type description
x REQUIRED

REAL

The value of the point on the horizontal axis

y REQUIRED

REAL

The value of the point on the vertical axis

color

COLOR

The name of a color for what this row draws: the bar, slice or point it plots, or the reference line it draws. Defaults to the color of the series for a data point, and to grey for a reference line.

label

TEXT

An alias for parameter "x". On a row that draws a reference line, the text to display next to the line.

series

TEXT

If multiple series are represented and share the same y-axis, this parameter can be used to distinguish between them.

value

REAL

An alias for parameter "y"

xline

TEXT

Draws a reference line across the chart at this position of the x axis instead of plotting a point, to mark an event such as a deployment. A date or a timestamp when time is set, otherwise one of the x values.

xline_end

TEXT

Makes the xline a band instead of a line, reaching to this value.

yline

REAL

Draws a reference line across the chart at this value of the y axis instead of plotting a point, to show a limit such as a quota or an alarm threshold. Not drawn if it falls outside of the axis, so set ymax when the limit is above the data.

yline_end

REAL

Makes the yline a band instead of a line, reaching to this value.

z

REAL

A third value carried by the point. Used as the bubble radius in a bubble chart, and shown in the tooltip under the name given by the top-level "ztitle".

Example 1

An area chart representing a time series, using the top-level property time. Ticks on the x axis are adjusted automatically, and ISO datetimes are parsed and displayed in a readable format.

select 
    'chart'             as component,
    'Quarterly Revenue' as title,
    'area'              as type,
    'blue-lt'           as color,
    5                   as marker,
    TRUE                as time;
select 
    '2022-01-01T00:00:00Z' as x,
    15                     as y;
select 
    '2022-04-01T00:00:00Z' as x,
    46                     as y;
select 
    '2022-07-01T00:00:00Z' as x,
    23                     as y;
select 
    '2022-10-01T00:00:00Z' as x,
    70                     as y;
select 
    '2023-01-01T00:00:00Z' as x,
    35                     as y;
select 
    '2023-04-01T00:00:00Z' as x,
    106                    as y;
select 
    '2023-07-01T00:00:00Z' as x,
    53                     as y;

Result

Quarterly Revenue

Loading...

Example 2

A pie chart.

select 
    'chart'   as component,
    'Answers' as title,
    'pie'     as type,
    TRUE      as labels;
select 
    'Yes' as label,
    65    as value;
select 
    'No' as label,
    35   as value;

Result

Answers

Loading...

Example 3

A basic bar chart

select 
    'chart'             as component,
    'bar'               as type,
    'Quarterly Results' as title,
    TRUE                as horizontal,
    TRUE                as labels;
select 
    'Tom' as label,
    35    as value;
select 
    'Olive' as label,
    15      as value;

Result

Quarterly Results

Loading...

Example 4

A TreeMap Chart allows you to display hierarchical data in a nested layout. This is useful for visualizing the proportion of each part to the whole.

select 
    'chart'   as component,
    'treemap' as type,
    'Quarterly Results By Region (in k$)' as title,
    TRUE      as labels;
select 
    'North America' as series,
    'United States' as label,
    35              as value;
select 
    'North America' as series,
    'Canada'        as label,
    15              as value;
select 
    'Europe' as series,
    'France' as label,
    30       as value;
select 
    'Europe'  as series,
    'Germany' as label,
    55        as value;
select 
    'Asia'  as series,
    'China' as label,
    20      as value;
select 
    'Asia'  as series,
    'Japan' as label,
    10      as value;

Result

Quarterly Results By Region (in k$)

Loading...

Example 5

A bar chart with multiple series.

select 
    'chart'    as component,
    'Expenses' as title,
    'bar'      as type,
    TRUE       as stacked,
    TRUE       as toolbar,
    FALSE      as show_legend,
    10         as ystep;
select 
    'Marketing' as series,
    2021        as x,
    35          as value;
select 
    'Marketing' as series,
    2022        as x,
    15          as value;
select 
    'Human resources' as series,
    2021              as x,
    30                as value;
select 
    'Human resources' as series,
    2022              as x,
    55                as value;

Result

Expenses

Loading...

Example 6

A stacked area chart, showing how each series contributes to a total. The stacked property also works with the line and bar chart types.

Series are aligned on their x values, and a series that has no value for a given x counts as zero there: below, the graphics card draws no power outside of the render. If a missing value does not mean zero in your data, make all the series share the same x values, for instance by rounding timestamps to a common interval.

select 
    'chart'      as component,
    'Power draw' as title,
    'area'       as type,
    TRUE         as stacked,
    TRUE         as time,
    'watts'      as ytitle,
    'blue'       as color,
    'teal'       as color,
    4            as marker;
select 
    'CPU'                  as series,
    '2024-03-01T10:00:00Z' as x,
    45                     as value;
select 
    'CPU'                  as series,
    '2024-03-01T10:15:00Z' as x,
    52                     as value;
select 
    'CPU'                  as series,
    '2024-03-01T10:30:00Z' as x,
    48                     as value;
select 
    'CPU'                  as series,
    '2024-03-01T10:45:00Z' as x,
    44                     as value;
select 
    'GPU'                  as series,
    '2024-03-01T10:15:00Z' as x,
    120                    as value;
select 
    'GPU'                  as series,
    '2024-03-01T10:30:00Z' as x,
    140                    as value;

Result

Power draw

Loading...

Example 7

A line chart with multiple series. One of the most common types of charts, often used to show trends over time. Also demonstrates the use of the toolbar attribute to allow the user to download the graph as an image or the data as a CSV file.

select 
    'chart'   as component,
    'Revenue' as title,
    0         as ymin,
    TRUE      as toolbar;
select 
    'Chicago Store' as series,
    2021            as x,
    35              as value;
select 
    'Chicago Store' as series,
    2022            as x,
    15              as value;
select 
    'Chicago Store' as series,
    2023            as x,
    45              as value;
select 
    'New York Store' as series,
    2021             as x,
    30               as value;
select 
    'New York Store' as series,
    2022             as x,
    55               as value;
select 
    'New York Store' as series,
    2023             as x,
    19               as value;

Result

Revenue

Loading...

Example 8

A scatter plot with multiple custom options.

select 
    'chart'               as component,
    'Gross domestic product and its growth' as title,
    'scatter'             as type,
    'Growth Rate'         as xtitle,
    'GDP (Trillions USD)' as ytitle,
    500                   as height,
    8                     as marker,
    0                     as xmin,
    10                    as xmax,
    0                     as ymin,
    25                    as ymax,
    5                     as yticks;
select 
    'Brazil' as series,
    2.5      as x,
    2        as y;
select 
    'China' as series,
    6.5     as x,
    14      as y;
select 
    'United States' as series,
    2.3             as x,
    21              as y;
select 
    'France' as series,
    1.5      as x,
    3        as y;
select 
    'South Africa' as series,
    0.9            as x,
    0.3            as y;

Result

Gross domestic product and its growth

Loading...

Example 9

Heatmaps

You can build heatmaps using the heatmap top-level property.

The data format follows the apexcharts heatmap format, where each series is represented as a line in the chart:

  • The x property of each item will be used as the x-axis value.
  • The series property of each item will be used as the y-axis value.
  • The y property of each item will be used as the value to display in the heatmap

The color property sets the color of each series separately, in order.

select 
    'chart'                     as component,
    'Survey Results'            as title,
    'heatmap'                   as type,
    'Database managemet system' as ytitle,
    'Year'                      as xtitle,
    'purple'                    as color,
    'purple'                    as color,
    'purple'                    as color;
select 
    'PostgreSQL' as series,
    '2000'       as x,
    48           as y;
select 
    'SQLite' as series,
    '2000'   as x,
    44       as y;
select 
    'MySQL' as series,
    '2000'  as x,
    78      as y;
select 
    'PostgreSQL' as series,
    '2010'       as x,
    65           as y;
select 
    'SQLite' as series,
    '2010'   as x,
    62       as y;
select 
    'MySQL' as series,
    '2010'  as x,
    83      as y;
select 
    'PostgreSQL' as series,
    '2020'       as x,
    73           as y;
select 
    'SQLite' as series,
    '2020'   as x,
    38       as y;
select 
    'MySQL' as series,
    '2020'  as x,
    87      as y;

Result

Survey Results

Loading...

Example 10

A timeline displaying events with a start and an end date

select 
    'chart'            as component,
    'Project Timeline' as title,
    'rangeBar'         as type,
    TRUE               as time,
    'teal'             as color,
    'cyan'             as color,
    TRUE               as labels,
    '2021-12-28'       as xmin,
    '2022-01-04'       as xmax;
select 
    'Phase 1'    as series,
    'Operations' as label,
    '2021-12-29' as value,
    '2022-01-02' as value;
select 
    'Phase 2'    as series,
    'Operations' as label,
    '2022-01-03' as value,
    '2022-01-04' as value;
select 
    'Yearly maintenance' as series,
    'Maintenance'        as label,
    '2022-01-01'         as value,
    '2022-01-03'         as value;

Result

Project Timeline

Loading...

Example 11

Coloring a single value

A data row can carry its own color, to paint the one bar, slice or point it plots. Use it when the color says something the axes do not: a threshold crossed, a status, the one category the reader should look at first.

select 'chart' as component, 'bar' as type, true as horizontal,
    true as labels, false as show_legend;
select
    window_label as label,
    accounts as value,
    case when days <= 30 then 'red' when days <= 60 then 'orange' else 'green' end as color
from expiring_accounts order by days;

A row color takes precedence over the color of its series. On a line or an area chart it paints the marker of the point, so set marker for it to show. A heatmap shades its cells from their own value and ignores it.

select 
    'chart'                  as component,
    'Accounts expiring soon' as title,
    'bar'                    as type,
    TRUE                     as horizontal,
    TRUE                     as labels,
    FALSE                    as show_legend;
select 
    '30 days' as label,
    100       as value,
    'red'     as color;
select 
    '60 days' as label,
    200       as value,
    'orange'  as color;
select 
    '90 days' as label,
    300       as value,
    'green'   as color;

Result

Accounts expiring soon

Loading...

Example 12

A pie chart whose rows choose their own slice colors.

select 
    'chart'           as component,
    'Support tickets' as title,
    'pie'             as type,
    TRUE              as labels;
select 
    'Resolved' as label,
    72         as value,
    'green'    as color;
select 
    'In progress' as label,
    21            as value,
    'yellow'      as color;
select 
    'Overdue' as label,
    7         as value,
    'red'     as color;

Result

Support tickets

Loading...

Example 13

Reference lines

A row with a yline is not plotted as a data point, but drawn as a line across the whole chart, at that value of the y axis. Use it for the limit that the data should be read against: a disk quota, an alarm threshold, a service level objective. Add yline_end to make it a band instead of a line.

Reference lines are rows, so they come from a query like everything else, and a chart can have as many of them as the query returns:

select 'chart' as component, 'CPU temperature' as title, true as time, 100 as ymax;
select celsius as yline, name as label, color as color from thresholds;
select measured_at as x, celsius as y from readings order by measured_at;

They are drawn as annotations rather than as an extra series, so they are not added to the total of a stacked chart, and are not filled in an area chart.

A line outside of the y axis is not drawn, and does not stretch the axis to fit, so set ymax when the limit is above the data.

select 
    'chart'           as component,
    'CPU temperature' as title,
    'line'            as type,
    TRUE              as time,
    '°C'              as ytitle,
    100               as ymax,
    'azure'           as color,
    4                 as marker;
select 
    70       as yline,
    'target' as label,
    'green'  as color;
select 
    90           as yline,
    100          as yline_end,
    'throttling' as label,
    'red'        as color;
select 
    '2024-05-01T08:00:00Z' as x,
    52                     as y;
select 
    '2024-05-01T09:00:00Z' as x,
    58                     as y;
select 
    '2024-05-01T10:00:00Z' as x,
    71                     as y;
select 
    '2024-05-01T11:00:00Z' as x,
    83                     as y;
select 
    '2024-05-01T12:00:00Z' as x,
    94                     as y;
select 
    '2024-05-01T13:00:00Z' as x,
    76                     as y;
select 
    '2024-05-01T14:00:00Z' as x,
    63                     as y;

Result

CPU temperature

Loading...

Example 14

Marking events

xline is the counterpart of yline: it marks a position on the x axis instead of a value on the y axis. On its own it marks a moment, like a deployment. With xline_end, it covers everything in between, like an incident or a maintenance window. A single query can draw a whole log of them:

select started_at as xline, ended_at as xline_end, summary as label,
    case severity when 'outage' then 'red' else 'orange' end as color
from incidents where started_at > $since;

When time is set, an xline is a date or a timestamp, written like the x of a data point. On a chart with text labels on the x axis, it is one of those labels.

select 
    'chart'           as component,
    'Request latency' as title,
    'area'            as type,
    TRUE              as time,
    'ms'              as ytitle,
    'blue-lt'         as color,
    3                 as marker;
select 
    '2024-05-01T10:00:00Z' as xline,
    'deploy'               as label,
    'green'                as color;
select 
    '2024-05-01T11:30:00Z' as xline,
    '2024-05-01T13:00:00Z' as xline_end,
    'incident'             as label,
    'red'                  as color;
select 
    '2024-05-01T08:00:00Z' as x,
    120                    as y;
select 
    '2024-05-01T09:00:00Z' as x,
    134                    as y;
select 
    '2024-05-01T10:00:00Z' as x,
    128                    as y;
select 
    '2024-05-01T11:00:00Z' as x,
    141                    as y;
select 
    '2024-05-01T12:00:00Z' as x,
    512                    as y;
select 
    '2024-05-01T13:00:00Z' as x,
    470                    as y;
select 
    '2024-05-01T14:00:00Z' as x,
    156                    as y;
select 
    '2024-05-01T15:00:00Z' as x,
    133                    as y;

Result

Request latency

Loading...

Example 15

Reference lines follow their axis

A reference belongs to the column it is written in, not to a direction on the screen. yline always marks a value of y, and xline a position on x, whichever way round the chart is drawn. A horizontal bar chart runs its y axis from left to right, so a yline is drawn down the chart and an xline picks out one of the bars.

select 'chart' as component, 'bar' as type, true as horizontal, 100 as ymax;
select 90 as yline, 'full' as label, 'red' as color;
select 'db-1' as xline, 'watched' as label, 'purple' as color;
select host as x, percent_used as y from disks order by percent_used;

A pie has no axes and ignores reference lines, and on a heatmap, whose y axis holds the names of the series, only xline has a meaning.

select 
    'chart'      as component,
    'Disk usage' as title,
    'bar'        as type,
    TRUE         as horizontal,
    100          as ymax,
    'azure'      as color,
    TRUE         as labels;
select 
    90     as yline,
    'full' as label,
    'red'  as color;
select 
    'db-1'    as xline,
    'watched' as label,
    'purple'  as color;
select 
    'backup-1' as x,
    41         as y;
select 
    'web-2' as x,
    63      as y;
select 
    'db-1' as x,
    88     as y;
select 
    'web-1' as x,
    96      as y;

Result

Disk usage

Loading...

Example 16

Multiple charts on the same line

You can create information-dense dashboards by using the card component to put multiple charts on the same line.

For this, create one sql file per visualization you want to show, and set the embed attribute of the card component to the path of the file you want to include, followed by ?_sqlpage_embed.

select 
    'card' as component,
    'A dashboard with multiple graphs on the same line' as title,
    2      as columns;
select 
    '/examples/chart.sql?color=green&n=42&_sqlpage_embed' as embed;
select 
    '/examples/chart.sql?_sqlpage_embed' as embed;

Result

A dashboard with multiple graphs on the same line

Loading...
Loading...

See also: other components