Vega Lite
composition
How Can I Repeat a View in Vega-Lite?

How Can I Repeat a View in Vega-Lite?

When working with data visualizations, you might want to create multiple plots from an array of fields effortlessly. The repeat operator in Vega-Lite is your go-to tool for this. Let's dive into how it works, why you might need it, and how to use it effectively.

What is the Repeat Operator?

The repeat operator is part of Vega-Lite's view composition capabilities. It allows you to create a series of views, each corresponding to a field in an array, easily and efficiently. Unlike the facet operator, which creates small multiples sharing the same data but faceted by a particular field, repeat fully replicates the dataset in each view.

Here's a basic syntax for using the repeat operator:

{
  "repeat": {
    ... // Repeat definition, like rows or columns
  },
  "spec": ... // Specification of what each repeated view should look like
}

Row/Column/Layer Repeat Mapping

The repeat property can include:

  • "row": Fields to repeat into rows.
  • "column": Fields to repeat into columns.
  • "layer": Fields to repeat into layers.

Let's break it down with more examples.

Example: Repeated Line Charts

Imagine you have multiple variables, such as temperature, humidity, and wind speed, and you want to see trends for each of them. You can use repeat to create a series of line charts quickly:

{
  "repeat": {
    "row": ["temperature", "humidity", "windSpeed"]
  },
  "spec": {
    "mark": "line",
    "encoding": {
      "x": {"field": "date", "type": "temporal"},
      "y": {
        "field": {"repeat": "row"},
        "type": "quantitative"
      }
    }
  }
}

Now, you get a separate line chart for each variable, stacked row-wise.

Example: Multi-series Line Chart with Repeated Layers

Suppose you want to create a multi-series line chart where each line represents a different variable but all within the same chart:

{
  "repeat": {
    "layer": ["temperature", "humidity", "windSpeed"]
  },
  "spec": {
    "layer": [{
      "mark": "line",
      "encoding": {
        "x": {"field": "date", "type": "temporal"},
        "color": {"datum": {"repeat": "layer"}}
      }
    }]
  }
}

This example will layer multiple lines on top of each other, each representing a different variable.

Example: Scatterplot Matrix (SPLOM)

To create a scatterplot matrix (SPLOM), where each cell shows a different 2D projection of your dataset:

{
  "repeat": {
    "row": ["var1", "var2"],
    "column": ["var1", "var2"]
  },
  "spec": {
    "mark": "point",
    "encoding": {
      "x": {"field": {"repeat": "column"}, "type": "quantitative"},
      "y": {"field": {"repeat": "row"}, "type": "quantitative"}
    }
  }
}

You get a grid of scatter plots showing all pairwise comparisons between the variables.

How to Configure Repeat

The repeat operator uses the concat configuration for its layout. You can set properties like spacing and the number of columns:

{
  "config": {
    "concat": {
      "spacing": 10,
      "columns": 2
    }
  }
}

FAQs

What is the difference between repeat and facet in Vega-Lite?

repeat replicates the entire dataset in each view and allows for more complex customizations. facet creates small multiples based on the unique values of a specified field.

Can I use different chart types for repeated views?

Yes, you can specify different chart types within the spec for each view you repeat.

How do I control the layout of the repeated views?

Use the concat configuration within the config attribute to manage spacing and the number of columns.

Hopefully, this makes the repeat operator in Vega-Lite more approachable and easier to understand. Now you can start creating complex and insightful visualizations with ease! 🎉