Multi-line mark
The vgg-multi-line
mark is used to plot line elements that consist of multiple line segments. This is in contrast to the Line Mark, which consists of only a single line segment.
<vgg-map
v-slot="{ dataframe }"
unit="dataframe">
<vgg-multi-line
:x="dataframe.year"
:y="dataframe.population"
stroke="#c66366"
/>
</vgg-map>
Properties
A vgg-multi-line
can contain the following position properties.
Positioning
Prop | Required | Types | Default | Description | Unit(s) |
---|---|---|---|---|---|
x | depends | Array | undefined | x-coordinates of multi-line path | Local coordinates |
y | depends | Array | undefined | y-coordinates of multi-line path | Local coordinates |
geometry | depends | Object | undefined | GeoJSON object of type LineString or MultiLineString | Local coordinates |
Other aesthetics
Prop | Required | Types | Default | Description | Unit(s) |
---|---|---|---|---|---|
stroke | false | String | undefined | Stroke color | Named color, hex, rgb, hsl |
stroke-width | false | Number | undefined | Stroke width | Screen pixel |
stroke-opacity | false | Number | undefined | Stroke opacity | Number between 0 to 1 |
fill | false | String | '#000000' | Fill color | Named color, hex, rgb, hsl |
fill-opacity | false | Number | undefined | Fill opacity | Number between 0 and 1 |
opacity | false | Number | undefined | Mark opacity | Number between 0 and 1 |
These are analogous to the CSS properties of the same names.
Other props
Prop | Required | Types | Default | Description |
---|---|---|---|---|
interpolate | false | Boolean | false | Interpolate between points (when using non-cartesian coordinate systems) |
sort | false | String | 'x' | Sort points in ascending order in x or y dimension |
close | false | Boolean | false | Whether line should be closed, i.e. return to its origin |
Events
Event | Description |
---|---|
click | Triggered when user clicks on mark |
hover | Triggered when user hovers over mark |
mouseover | Triggered when user's mouse is above mark |
mouseout | Triggered when user's mouse leaves mark |
select | Triggered when mark is selected |
deselect | Triggered when mark is removed from selection |
For more information on these events, see the Interactivity documentation.
Usage
Positioning
To render a Multi-line mark, you will need to set the x
and y
or the geometry
props. The two uses are mutually exclusive.
x
and y
have to be passed an Array of values/coordinates of the same length, with one exception: when the shorter of the two arrays has length 1, its value will be repeated to match the length of the other array. For example
<vgg-multi-line
:x="[1, 2, 3, 4]"
:y="[100]"
/>
will be treated as
<vgg-multi-line
:x="[1, 2, 3, 4]"
:y="[100, 100, 100, 100]"
/>
It is also possible to use an entire column within the data scope as coordinates using vgg-map
with unit="dataframe"
. The rule of equal lengths still holds: if x
is passed a dataframe column, and y
is passed an array, the array has to be of the same length as the data column (except, again, if y
is of length 1).
<vgg-map
v-slot="{ dataframe }"
unit="dataframe">
<!-- the entire year and population columns are passed to x and y -->
<vgg-multi-line
:x="dataframe.year"
:y="dataframe.population"
stroke="#c66366"
/>
geometry
accepts GeoJSON LineString, MultiLineString, Polygon and MultiPolygon objects only. To render other geometry types, see the overview on Geo marks.
It can only be mapped with row:
<vgg-map v-slot="{ row }">
<vgg-multi-line
:geometry="row.geometry"
/>
</vgg-map>
For a more in-depth explanation on how mapping works, see the Map section under Core components.
Other props
The interpolate
option is switched off by default for Multi-line marks. Only
turn it on when strictly necessary, otherwise it will slow down performance.
sort
is by default 'x'
, because most users will use the x
dimension for
variables that must be sorted ascendingly, like points in time, while using the
y
dimension for values that do not need sorting, like measurements at points
in time. If you want to plot time in the y
dimension instead, make sure to
set sort
to 'y'
.
Example
<vgg-graphic
:width="200"
:height="250"
:data="{
year: [
2000, 2005, 2010, 2015,
2000, 2005, 2010, 2015
],
population: [
100, 110, 130, 180,
200, 310, 430, 480
],
color: [
'#c66366', '#c66366', '#c66366',
'#c66366', '#008080', '#008080',
'#008080', '#008080'
]
}">
<vgg-section
:x1="25"
:x2="175"
:y1="25"
:y2="225"
scale-x="year"
scale-y="population"
:axes="{
left: {'tick-count': 4, 'w': 30},
bottom: {'tick-count': 4}
}"
>
<vgg-data :transform="{ groupBy: 'color' }">
<vgg-map v-slot="{ row }">
<vgg-multi-line
:x="row.grouped.year"
:y="row.grouped.population"
:stroke="row.color"
/>
</vgg-map>
</vgg-data>
</vgg-section>
</vgg-graphic>