arcgis-charts

Use this skill when visualizing layer data as charts (bar, line, pie, histogram, scatter, etc.) using the @arcgis/charts-components package. This is a new component package in 5.0 with no 4.x equivalent.

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "arcgis-charts" with this command: npx skills add saschabrunnerch/arcgis-maps-sdk-js-ai-context/saschabrunnerch-arcgis-maps-sdk-js-ai-context-arcgis-charts

ArcGIS Charts

Use this skill when visualizing layer data as charts (bar, line, pie, histogram, scatter, etc.) using the @arcgis/charts-components package. This is a new component package in 5.0 with no 4.x equivalent.

Import Patterns

CDN (No Build Tools)

<!-- Load ArcGIS Maps SDK --> <script src="https://js.arcgis.com/5.0/">&#x3C;/script> <!-- Load Charts Components --> <script type="module" src="https://js.arcgis.com/5.0/charts-components/">&#x3C;/script>

Direct ESM Imports (Build Tools)

import "@arcgis/charts-components/components/arcgis-chart"; import "@arcgis/charts-components/components/arcgis-charts-action-bar";

Chart Models (for programmatic configuration)

import { BarChartModel } from "@arcgis/charts-components/model"; import { PieChartModel } from "@arcgis/charts-components/model"; import { LineChartModel } from "@arcgis/charts-components/model"; import { HistogramModel } from "@arcgis/charts-components/model"; import { ScatterplotModel } from "@arcgis/charts-components/model"; import { BoxPlotModel } from "@arcgis/charts-components/model"; import { GaugeModel } from "@arcgis/charts-components/model"; import { RadarChartModel } from "@arcgis/charts-components/model"; import { HeatChartModel } from "@arcgis/charts-components/model"; import { ComboBarLineChartModel } from "@arcgis/charts-components/model";

Supported Chart Types

Chart Type Model Class Description

Bar BarChartModel

Horizontal or vertical bar charts

Line LineChartModel

Line charts with series

Pie PieChartModel

Pie and donut charts

Histogram HistogramModel

Frequency distribution histograms

Scatter ScatterplotModel

Scatter and bubble plots

Box Plot BoxPlotModel

Box and whisker plots

Gauge GaugeModel

Gauge / speedometer charts

Radar RadarChartModel

Radar / spider charts

Heat Chart HeatChartModel

Heat / matrix charts

Combo ComboBarLineChartModel

Combined bar and line charts

arcgis-chart Component

Core Properties

Property Attribute Type Default Description

model

ChartModel | WebChart

Chart configuration model (set via JS)

layer

FeatureLayerView | SupportedLayer

Data source layer (set via JS)

view

MapView | SceneView

Map/scene view reference (set via JS)

layerItemId

layer-item-id

string

Layer portal item ID (alternative to layer )

chartIndex

chart-index

number

Index of chart to render when a layer has multiple charts

actionMode

action-mode

string

Interaction mode: "zoom" , "multiSelection" , "multiSelectionWithCtrlKey" , "pan"

Display Properties

Property Attribute Type Default Description

disableInteractions

disable-interactions

boolean

false

Disable all chart interactions

enableConfiguration

enable-configuration

boolean

false

Enable built-in chart configuration UI

enableResponsiveFeatures

enable-responsive-features

boolean

Enable responsive behavior

useAnimatedCharts

use-animated-charts

boolean

Enable chart animations

hideEmptySeries

hide-empty-series

boolean

Hide series with no data

hideLicenseWatermark

hide-license-watermark

boolean

Hide license watermark

hideLoaderAnimation

hide-loader-animation

boolean

Hide loading animation

placeholder

placeholder

string

Placeholder text when no data

showUIMessages

show-ui-messages

boolean

Show user-facing messages

errorPolicy

error-policy

string

"throw"

Error handling: "throw" or "ignore"

Data and Filtering Properties

Property Attribute Type Default Description

filterByExtent

filter-by-extent

boolean

Filter chart data by current map extent

filterBySelection

filter-by-selection

boolean

Filter chart data by map selection

syncSelection

sync-selection

boolean

false

Sync selection between chart and map

runtimeDataFilters

WebChartDataFilters

Runtime data filters (set via JS)

selectionData

SelectionData

Current selection data

nullAsValid

null-as-valid

boolean

false

Treat null values as valid data points

timeZone

time-zone

string

Time zone for temporal data

Formatter Callbacks

Property Type Description

dataLabelFormatter

function

Custom formatting for data labels

tooltipFormatter

function

Custom formatting for tooltips

xAxisLabelFormatter

function

Custom formatting for X-axis labels

yAxisLabelFormatter

function

Custom formatting for Y-axis labels

gaugeInnerLabelFormatter

function

Custom formatting for gauge inner labels

guideTooltipFormatter

function

Custom formatting for guide tooltips

Methods

Method Returns Description

loadModel()

Promise<void>

Load the chart model

refresh(props?)

Promise<void>

Refresh chart; optional { updateData, resetAxesBounds }

resetZoom()

Promise<void>

Reset zoom to default view

clearSelection()

Promise<void>

Clear all selections

switchSelection()

Promise<void>

Switch selection state

exportAsImage(format?)

Promise<void>

Export chart as "png" , "jpg" , or "svg"

exportAsCSV(options?)

Promise<void>

Export chart data as CSV file

errorAlert(message?)

Promise<void>

Display an error alert

notify(message?, heading?)

Promise<void>

Show a notification

componentOnReady()

Promise<this>

Resolves when the component is fully loaded

Events

Event Detail Description

arcgisSelectionChange

Fired when the chart selection changes

arcgisDataFetchComplete

WebChartDataTypes

Fired when data has been fetched

arcgisDataProcessComplete

Fired when data processing is complete

arcgisUpdateComplete

ValidationStatus

Fired when chart updates are complete

arcgisConfigChange

{ newConfig, oldConfig, functionCalled }

Fired when chart configuration changes

arcgisAxesMinMaxChange

AxesMinMaxChangePayload

Fired when axes min/max are computed

arcgisBadDataWarningRaise

DataWarningObject

Fired when a data error is detected

arcgisChartNotFoundWarning

string

Fired when a referenced chart is not found

Basic Usage

Chart from a FeatureLayer

<arcgis-map id="map" item-id="YOUR_WEBMAP_ID"> <arcgis-zoom slot="top-left"></arcgis-zoom> </arcgis-map> <div id="chart-container" style="width: 500px; height: 400px;"> <arcgis-chart id="my-chart"></arcgis-chart> </div>

<script type="module"> const mapElement = document.querySelector("arcgis-map"); const chartElement = document.querySelector("#my-chart");

await mapElement.viewOnReady(); const view = mapElement.view;

// Get the layer const layer = view.map.layers.find(l => l.title === "My Layer"); await view.whenLayerView(layer);

// Assign layer and view to chart chartElement.layer = layer; chartElement.view = view;

// Create a bar chart model const { BarChartModel } = await $arcgis.import( "@arcgis/charts-components/model" );

const model = new BarChartModel(); model.layer = layer;

chartElement.model = model; </script>

Chart with WebChart Spec (JSON Configuration)

const chartElement = document.querySelector("arcgis-chart"); chartElement.layer = layer; chartElement.view = view;

// WebChart JSON specification chartElement.model = { type: "bar", title: { visible: true, text: "Population by State" }, series: [{ type: "bar", query: { orderByFields: ["Population DESC"], groupByFieldsForStatistics: ["State"], outStatistics: [{ statisticType: "sum", onStatisticField: "Population", outStatisticFieldName: "TotalPop" }] }, x: "State", y: "TotalPop" }] };

Pie Chart

const { PieChartModel } = await $arcgis.import( "@arcgis/charts-components/model" );

const model = new PieChartModel(); model.layer = layer;

const chartElement = document.querySelector("arcgis-chart"); chartElement.layer = layer; chartElement.view = view; chartElement.model = model;

Line Chart

const { LineChartModel } = await $arcgis.import( "@arcgis/charts-components/model" );

const model = new LineChartModel(); model.layer = layer;

const chartElement = document.querySelector("arcgis-chart"); chartElement.layer = layer; chartElement.view = view; chartElement.model = model;

arcgis-charts-action-bar Component

Provides a toolbar for chart interactions (export, selection, filtering, zoom).

Setup

<div style="position: relative; width: 600px; height: 400px;"> <arcgis-chart id="my-chart"></arcgis-chart> <arcgis-charts-action-bar id="my-action-bar"></arcgis-charts-action-bar> </div>

<script type="module"> const chart = document.querySelector("#my-chart"); const actionBar = document.querySelector("#my-action-bar");

// Connect action bar to chart actionBar.chartElement = chart; </script>

Key Action Bar Properties

Property Attribute Type Default Description

chartElement

chart-element

ArcgisChart

Reference to the chart component

expanded

expanded

boolean

false

Whether the action bar is expanded

exportAsImageState

export-as-image-state

string

"enabled"

Image export button state

exportAsCSVState

export-as-csv-state

string

"enabled"

CSV export button state

filterByExtentState

filter-by-extent-state

string

"enabled"

Filter by extent button state

filterBySelectionState

filter-by-selection-state

string

"enabled"

Filter by selection button state

zoomState

zoom-state

string

"enabled"

Zoom button state

forceDisableActions

force-disable-actions

boolean

false

Disable all actions at once

hiddenActions

DefaultChartActions[]

Array of actions to hide

Action states can be "enabled" , "disabled" , or "hidden" .

Selection and Filtering

Sync Selection Between Chart and Map

const chart = document.querySelector("arcgis-chart"); chart.syncSelection = true; chart.layer = layer; chart.view = view;

// Listen for selection changes chart.addEventListener("arcgisSelectionChange", () => { console.log("Selection changed:", chart.selectionData); });

Filter Chart by Map Extent

const chart = document.querySelector("arcgis-chart"); chart.filterByExtent = true; chart.view = view; chart.layer = layer;

Runtime Data Filters

const chart = document.querySelector("arcgis-chart"); chart.runtimeDataFilters = { where: "Population > 100000", orderByFields: ["Population DESC"] };

Export

Export as Image

const chart = document.querySelector("arcgis-chart"); await chart.exportAsImage("png"); // "png", "jpg", or "svg"

Export as CSV

const chart = document.querySelector("arcgis-chart"); await chart.exportAsCSV();

Custom Formatters

Data Label Formatter

const chart = document.querySelector("arcgis-chart"); chart.dataLabelFormatter = (value, field) => { if (typeof value === "number") { return value.toLocaleString("en-US", { style: "currency", currency: "USD" }); } return String(value); };

Tooltip Formatter

chart.tooltipFormatter = (tooltipData) => { return &#x3C;b>${tooltipData.category}&#x3C;/b>: ${tooltipData.value.toLocaleString()}; };

Axis Label Formatter

chart.xAxisLabelFormatter = (value) => { // Truncate long labels return String(value).length > 15 ? String(value).slice(0, 12) + "..." : String(value); };

CDN Full Example

<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1" /> <title>Chart from Feature Layer</title> <script src="https://js.arcgis.com/5.0/">&#x3C;/script> <script type="module" src="https://js.arcgis.com/5.0/charts-components/">&#x3C;/script> <script type="module" src="https://js.arcgis.com/5.0/map-components/">&#x3C;/script> <style> html, body { height: 100%; margin: 0; display: flex; } arcgis-map { flex: 1; } #chart-panel { width: 400px; height: 100%; } </style> </head> <body> <arcgis-map id="map" item-id="YOUR_WEBMAP_ID"> <arcgis-zoom slot="top-left"></arcgis-zoom> </arcgis-map> <div id="chart-panel"> <arcgis-chart id="chart"></arcgis-chart> <arcgis-charts-action-bar id="action-bar"></arcgis-charts-action-bar> </div>

<script type="module"> const mapElement = document.querySelector("#map"); const chartElement = document.querySelector("#chart"); const actionBar = document.querySelector("#action-bar");

await mapElement.viewOnReady();
const view = mapElement.view;
const layer = view.map.layers.getItemAt(0);
await view.whenLayerView(layer);

const { BarChartModel } = await $arcgis.import(
  "@arcgis/charts-components/model"
);

const model = new BarChartModel();
model.layer = layer;

chartElement.layer = layer;
chartElement.view = view;
chartElement.model = model;
chartElement.syncSelection = true;

actionBar.chartElement = chartElement;

</script> </body> </html>

Common Pitfalls

Missing layer property: The chart requires a layer data source. Setting only model without layer produces an empty chart.

// Anti-pattern: model without layer chartElement.model = new BarChartModel();

// Correct: set both layer and model const model = new BarChartModel(); model.layer = layer; chartElement.layer = layer; chartElement.model = model;

Impact: The chart renders its frame and axes but shows no data.

Chart component not loaded: The charts package must be explicitly loaded via CDN or imported.

<!-- Anti-pattern: missing charts-components script --> <script src="https://js.arcgis.com/5.0/">&#x3C;/script> <arcgis-chart></arcgis-chart>

<!-- Correct: include charts-components --> <script src="https://js.arcgis.com/5.0/">&#x3C;/script> <script type="module" src="https://js.arcgis.com/5.0/charts-components/">&#x3C;/script> <arcgis-chart></arcgis-chart>

Impact: The arcgis-chart element is not defined and renders as an empty inline element.

Setting model as an HTML attribute: The model property accepts complex objects and must be set via JavaScript, not as an HTML attribute.

Impact: The attribute value is ignored; the chart shows no data.

Using filterByExtent without view : Extent filtering requires the view property to track the current map extent.

// Anti-pattern: filterByExtent without view chart.filterByExtent = true; chart.layer = layer;

// Correct: set view for extent filtering chart.filterByExtent = true; chart.layer = layer; chart.view = view;

Impact: The filter has no extent to reference and may throw errors or show all data.

Action bar not connected: The action bar needs a reference to the chart element.

// Anti-pattern: action bar without chart reference const actionBar = document.querySelector("arcgis-charts-action-bar"); // Missing: actionBar.chartElement = chartElement;

Impact: Action bar buttons are visible but do nothing when clicked.

Reference Samples

  • arcade-execute-chart

  • Execute Arcade expressions and build charts from results

  • featurereduction-cluster-popup-chart

  • Charts inside cluster popups

  • featurereduction-cluster-pie-charts

  • Pie chart cluster representations

  • visualization-pie-chart

  • Pie chart visualization

Related Skills

  • See arcgis-layers for configuring FeatureLayers that supply chart data.

  • See arcgis-core-maps for setting up the MapView referenced by charts.

  • See arcgis-arcade for Arcade expressions used with chart data computation.

  • See arcgis-widgets-ui for layout components to host chart panels.

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

General

arcgis-widgets-ui

No summary provided by upstream source.

Repository SourceNeeds Review
General

arcgis-popup-templates

No summary provided by upstream source.

Repository SourceNeeds Review
General

arcgis-geometry-operations

No summary provided by upstream source.

Repository SourceNeeds Review
General

arcgis-core-maps

No summary provided by upstream source.

Repository SourceNeeds Review