arcgis-charts
Skill0 starsChanged 7 months agoMITView on GitHub
Render interactive charts from ArcGIS layer data using the Charts Components package. Use for bar, line, pie, histogram, scatter, box plot, gauge, radar, and heat charts.
1 other project uses a version of this.
Adopted by
Most recently taken up by
- geoai-latam/SKILL_JS5_ARCGIStheir own version, first seen Nov 8, 2026
Other versions1 project uses a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 1
- geoai-latam/SKILL_JS5_ARCGIS★ 1same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository47 other files it gives its agents.
- AGENTS.mdAGENTS.md
- skills/arcgis-ai-components/AGENTS.mdAGENTS.md
- skills/arcgis-authentication/AGENTS.mdAGENTS.md
- skills/arcgis-charts/AGENTS.mdAGENTS.md
- skills/arcgis-coding-components/AGENTS.mdAGENTS.md
- skills/arcgis-core-maps/AGENTS.mdAGENTS.md
- skills/arcgis-editing/AGENTS.mdAGENTS.md
- skills/arcgis-embeddable-maps/AGENTS.mdAGENTS.md
- skills/arcgis-interaction/AGENTS.mdAGENTS.md
- skills/arcgis-layers/AGENTS.mdAGENTS.md
- skills/arcgis-starter-app/AGENTS.mdAGENTS.md
- skills/arcgis-visualization/AGENTS.mdAGENTS.md
- skills/arcgis-widgets-ui/AGENTS.mdAGENTS.md
- arcgis-3d-layersSkill
- arcgis-advanced-layersSkill
- arcgis-ai-componentsSkill
- arcgis-arcadeSkill
- arcgis-authenticationSkill
- arcgis-cim-symbolsSkill
- arcgis-coding-componentsSkill
- arcgis-coordinates-projectionSkill
- arcgis-core-mapsSkill
- arcgis-core-utilitiesSkill
- arcgis-custom-renderingSkill
- arcgis-editingSkill
- arcgis-embeddable-mapsSkill
- arcgis-feature-effectsSkill
- arcgis-geometry-operationsSkill
- arcgis-imagerySkill
- arcgis-interactionSkill
- arcgis-knowledge-graphsSkill
- arcgis-layersSkill
- arcgis-map-toolsSkill
- arcgis-performanceSkill
- arcgis-popup-templatesSkill
- arcgis-portal-contentSkill
- arcgis-rest-servicesSkill
- arcgis-scene-environmentSkill
- arcgis-smart-mappingSkill
- arcgis-spatial-analysisSkill
- arcgis-starter-appSkill
- arcgis-tables-formsSkill
- arcgis-time-animationSkill
- arcgis-utility-networksSkill
- arcgis-visualizationSkill
- arcgis-widgets-advancedSkill
- arcgis-widgets-uiSkill
The file
We split this skill into the rules it gives an agent
1 rule. About 0 are common, 0 are distinctive, and 1 is very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈0
Distinctive · estimate
This author's own choices. Worth a look.
1
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 8
Use this skill when visualizing layer data as charts (bar, line, pie, histogram, scatter, etc.) using the @arcgis/charts-components package.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
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/"></script>
<!-- Load Charts Components -->
<script
type="module"
src="https://js.arcgis.com/5.0/charts-components/"
></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 `<b>${tooltipData.category}</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/"></script>
<script
type="module"
src="https://js.arcgis.com/5.0/charts-components/"
></script>
<script
type="module"
src="https://js.arcgis.com/5.0/map-components/"
></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
layerproperty: The chart requires a layer data source. Setting onlymodelwithoutlayerproduces 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/"></script> <arcgis-chart></arcgis-chart><!-- Correct: include charts-components --> <script src="https://js.arcgis.com/5.0/"></script> <script type="module" src="https://js.arcgis.com/5.0/charts-components/" ></script> <arcgis-chart></arcgis-chart>Impact: The
arcgis-chartelement is not defined and renders as an empty inline element.Setting
modelas an HTML attribute: Themodelproperty 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
filterByExtentwithoutview: Extent filtering requires theviewproperty 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 resultsfeaturereduction-cluster-popup-chart- Charts inside cluster popupsfeaturereduction-cluster-pie-charts- Pie chart cluster representationsvisualization-pie-chart- Pie chart visualization
Related Skills
- See
arcgis-layersfor configuring FeatureLayers that supply chart data. - See
arcgis-core-mapsfor setting up the MapView referenced by charts. - See
arcgis-arcadefor Arcade expressions used with chart data computation. - See
arcgis-widgets-uifor layout components to host chart panels.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

