---
title: Point Plot Widget
description: >-
  Visualize individual events over time to spot anomalies and outliers without
  aggregation.
breadcrumbs: Docs > Dashboards > Widgets > Point Plot Widget
---

# Point Plot Widget

A point plot displays one dot per individual event over time, giving you an unaggregated view of your data. Unlike a [Timeseries widget](https://docs.datadoghq.com/dashboards/widgets/timeseries.md), which visualizes trends as averaged or aggregated lines, a point plot surfaces the raw underlying datapoints. Use it to catch the single slow request hidden in an otherwise healthy p95, identify which specific host or service is the outlier, and click directly into that event to investigate.

Point plots are already available in APM Traces, Database Monitoring, and LLM Observability explorers. This widget lets you bring that same view into your own dashboards.

{% image
   source="https://docs.dd-static.net/images/dashboards/widgets/point_plot/point_plot.b1b04b50701baddd2e27c00e5dfd4cc2.png?auto=format&fit=max&w=850 1x, https://docs.dd-static.net/images/dashboards/widgets/point_plot/point_plot.b1b04b50701baddd2e27c00e5dfd4cc2.png?auto=format&fit=max&w=850&dpr=2 2x"
   alt="A Point Plot widget showing individual span latency events over time with outliers visible" /%}

## Setup{% #setup %}

### Configuration{% #configuration %}

1. Choose a data source. Supported sources include Logs, RUM, Traces, Spans, Database Monitoring, and LLM Observability.
1. Define a query to filter to the events you want to plot.
1. Choose the attribute or measure to display on the y-axis (for example, `duration` for latency or `error_rate` for error tracking).
1. Optional: group events by a tag or attribute (for example, `service`, `host`, or `env`) to color-code dots by group.
1. Give your graph a title or leave the field blank for a suggested title.

### Options{% #options %}

#### Y-axis controls{% #y-axis-controls %}

| Option    | Description                                                                          |
| --------- | ------------------------------------------------------------------------------------ |
| Scale     | Set the y-axis scale to **Linear** or **Log** to handle data with wide value ranges. |
| Min / Max | Pin the y-axis to a fixed range, or leave as **Auto** to fit the data.               |

#### Horizontal markers{% #horizontal-markers %}

Add reference lines to mark thresholds such as SLO targets or alert boundaries. Each marker can have a label and a color.

#### Cross-widget highlighting{% #cross-widget-highlighting %}

When cross-widget highlighting is enabled, hovering over a datapoint highlights the corresponding time range across other compatible widgets on the dashboard.

#### Context links{% #context-links %}

[Context links](https://docs.datadoghq.com/dashboards/guide/context-links.md) are enabled by default and can be toggled on or off. Context links bridge dashboard widgets with other pages in Datadog or third-party applications, so you can pivot from a point plot directly into the relevant trace, log, or query.

#### Global time{% #global-time %}

Choose whether your widget has a custom time frame or uses the dashboard's global time frame.

## Supported data sources{% #supported-data-sources %}

| Data source         | Example use case                                    |
| ------------------- | --------------------------------------------------- |
| APM Traces / Spans  | Per-span latency, error rate by service             |
| Logs                | Individual log event values over time               |
| RUM                 | Per-session load times, individual action durations |
| Database Monitoring | Individual query durations to identify slow queries |
| LLM Observability   | Per-request token counts, latency, or error rates   |

## Use cases{% #use-cases %}

- **Spot outliers hiding in aggregates**: A healthy p95 can mask a single extremely slow request. The point plot surfaces that individual event so you can investigate it directly.
- **Identify the source of anomalies**: Color-code dots by `service`, `host`, or `env` to pinpoint which specific entity is behaving differently.
- **Monitor per-event performance**: Track individual query durations, span latencies, or error rates without aggregation flattening the data.

## API{% #api %}

This widget can be used with the **[Dashboards API](https://docs.datadoghq.com/api/latest/dashboards.md)**. See the following table for the [widget JSON schema definition](https://docs.datadoghq.com/dashboards/graphing_json/widget_json.md):

{% tab %}
ModelExample
{% tab title="-model" %}
Expand AllFieldTypeDescription custom_links[object]List of custom links.is_hiddenbooleanThe flag for toggling context menu link visibility.labelstringThe label for the custom link URL. Keep the label short and descriptive. Use metrics and tags as variables.linkstringThe URL of the custom link. URL must include `http` or `https`. A relative URL must start with `/`.override_labelstringThe label ID that refers to a context menu link. Can be `logs`, `hosts`, `traces`, `profiles`, `processes`, `containers`, or `rum`.descriptionstringThe description of the widget. legendobjectLegend configuration for the point plot widget.type [*required*]enumType of legend to show for the point plot widget. Allowed enum values: `automatic,none` markers[object]List of markers for the widget.display_typestringCombination of:
- A severity error, warning, ok, or info
- A line type: dashed, solid, or bold In this case of a Distribution widget, this can be set to be `percentile`.
labelstringLabel to display over the marker.timestringTimestamp for the widget.value [*required*]stringValue to apply. Can be a single value y = 15 or a range of values 0 < y < 10. For Distribution widgets with `display_type` set to `percentile`, this should be a numeric percentile value (for example, "90" for P90). requests [*required*][object]List of request configurations for the widget.limitint64Maximum number of data points to return. projection [*required*]objectProjection configuration for the point plot widget. dimensions [*required*][object]List of dimension mappings for the projection.aliasstringAlias for the column.column [*required*]stringSource column name from the dataset.dimension [*required*]enumDimension of the point plot. Allowed enum values: `group,time,y,radius`extra_columns[string]Additional columns to include in the projection.type [*required*]enumType of the projection. Allowed enum values: `point_plot` query [*required*]objectQuery configuration for a data projection request.data_source [*required*]stringData source for the query.indexes[string]List of indexes to query.query_string [*required*]stringThe query string to filter events.storagestringStorage location for the query.request_type [*required*]enumType of a data projection request. Allowed enum values: `data_projection` time <oneOf>Time setting for the widget. Option 1objectWrapper for live spanhide_incomplete_cost_databooleanWhether to hide incomplete cost data in the widget.live_spanenumThe available timeframes depend on the widget you are using. Allowed enum values: `1m,5m,10m,15m,30m,1h,4h,1d,2d,1w`Show 7 more`,1mo,3mo,6mo,week_to_date,month_to_date,1y,alert`

 Option 2objectUsed for arbitrary live span times, such as 17 minutes or 6 hours.hide_incomplete_cost_databooleanWhether to hide incomplete cost data in the widget.type [*required*]enumType "live" denotes a live span in the new format. Allowed enum values: `live`unit [*required*]enumUnit of the time span. Allowed enum values: `minute,hour,day,week,month,year`value [*required*]int64Value of the time span. Option 3objectUsed for fixed span times, such as 'March 1 to March 7'.from [*required*]int64Start time in milliseconds since epoch.hide_incomplete_cost_databooleanWhether to hide incomplete cost data in the widget.to [*required*]int64End time in milliseconds since epoch.type [*required*]enumType "fixed" denotes a fixed span. Allowed enum values: `fixed`titlestringTitle of the widget.title_alignenumHow to align the text on the widget. Allowed enum values: `center,left,right`title_sizestringSize of the title.type [*required*]enumType of the point plot widget. Allowed enum values: `point_plot`
default: `point_plot`
 yaxisobjectAxis controls for the widget.include_zerobooleanSet to `true` to include zero.labelstringThe label of the axis to display on the graph. Only usable on Scatterplot Widgets.maxstringSpecifies maximum numeric value to show on the axis. Defaults to `auto`.
default: `auto`
minstringSpecifies minimum numeric value to show on the axis. Defaults to `auto`.
default: `auto`
scalestringSpecifies the scale type. Possible values are `linear`, `log`, `sqrt`, and `pow##` (for example `pow2` or `pow0.5`).
default: `linear`
{% /tab %}

{% tab title="example" %}

```json
{
  "custom_links": [
    {
      "is_hidden": false,
      "label": "Search logs for {{host}}",
      "link": "https://app.datadoghq.com/logs?query={{host}}",
      "override_label": "logs"
    }
  ],
  "description": "string",
  "legend": {
    "type": "automatic"
  },
  "markers": [
    {
      "display_type": "error dashed",
      "label": "Error threshold",
      "time": "string",
      "value": "y = 15"
    }
  ],
  "requests": [
    {
      "limit": "integer",
      "projection": {
        "dimensions": [
          {
            "alias": "string",
            "column": "duration",
            "dimension": "y"
          }
        ],
        "extra_columns": [],
        "type": "point_plot"
      },
      "query": {
        "data_source": "logs",
        "indexes": [],
        "query_string": "service:web-store",
        "storage": "string"
      },
      "request_type": "data_projection"
    }
  ],
  "time": {
    "hide_incomplete_cost_data": false,
    "live_span": "5m"
  },
  "title": "string",
  "title_align": "string",
  "title_size": "string",
  "type": "point_plot",
  "yaxis": {
    "include_zero": false,
    "label": "string",
    "max": "string",
    "min": "string",
    "scale": "string"
  }
}
```

{% /tab %}

{% /tab %}

## Further reading{% #further-reading %}

- [Building Dashboards using JSON](https://docs.datadoghq.com/dashboards/graphing_json.md)
- [Timeseries Widget](https://docs.datadoghq.com/dashboards/widgets/timeseries.md)
- [Scatter Plot Widget](https://docs.datadoghq.com/dashboards/widgets/scatter_plot.md)
