Component tag
<vgg-repeat>
Description
The Repeat component is used to quickly position and align 'square' components
in a 2d matrix format. 'Square' here refers to any component that has
x1, x2, y1 and y2 props. This includes the Section
component, the Rectangle mark, and any custom component
that you would want to create, given it has the props mentioned above.
Props
| Prop | Required | Types | Default | Description |
|---|---|---|---|---|
| x | depends | Array | undefined | Values corresponding to matrix columns |
| y | depends | Array | undefined | Values corresponding to matrix rows |
| layout-padding | false | [Number, Object] | 0 | Padding with respect to parent element |
| cell-padding | false | [Number, Object] | 0 | Padding between child elements |
| sides | false | Array | undefined | On which sides the axes should be drawn |
The repeat component is useful for quickly creating a 2d matrix of Sections. This is useful for creating, for example, a scatterplot matrix.
Either the x prop, y prop, or both the x and y props are required.
The x and y props take an Array of values. For every entry in the Array passed
to the x prop, one column will be rendered- the same for the y prop and rows.
Besides creating one Section for each matrix cell and positioning the Section (like
the Grid component), the Repeat component also exposes the values
that are in the Arrays passed to x and y.
The layout-padding and cell-padding props work exactly the same as props
of the same names used in the Grid component.
The sides prop can be used in combination with the axes and gridlines props
of the Section component to only draw the necessary axes. This will give a less
chaotic view than to have every repeated Section have its own axes. See the example
below for a demonstration on how to use the sides prop.
Usage
Scatterplot matrix
In this example, someData is a data structure with three columns of quantitative
data, called a, b and c.
<vgg-data :data="someData">
<vgg-repeat
v-slot="{ x, y }"
:x="['a', 'b', 'c']"
:y="['a', 'b', 'c']"
:cell-padding="20"
:sides="['right', 'bottom']"
>
<vgg-section
:axes="{
right: { scale: y, flip: true, 'label-font-size': 10 },
bottom: { scale: x, labelRotate: true, 'label-font-size': 8 }
}"
:grid-lines="{
x: { scale: x },
y: { scale: y }
}"
>
<vgg-map v-slot="{ row }">
<vgg-point
:x="{ val: row[x], scale: x }"
:y="{ val: row[y], scale: y }"
:fill="{ val: row[x], scale: x }"
/>
</vgg-map>
</vgg-section>
</vgg-repeat>
</vgg-data>