render({
width: 600,
height: 100,
layer: [
{
mark: 'bar',
data: {
values: [{ y: 0, x: stats.q1, x2: stats.q3 }]
},
encoding: {
x: {
field: 'x',
type: 'quantitative',
scale: { domain: [47.64, 47.68] },
axis: {
title: 'Latitude',
tickMinStep: 0.01,
values: [47.64, 47.65, 47.66, 47.67, 47.68]
}
},
x2: { field: 'x2' },
y: { field: 'y', type: 'ordinal', axis: null },
height: { value: 15 },
color: { value: '#d0d0d0' }
}
},
{
mark: 'tick',
data: {
values: [
{ label: 'min', lat: stats.min },
{ label: 'mean', lat: stats.mean },
{ label: 'max', lat: stats.max }
]
},
encoding: {
x: { field: 'lat', type: 'quantitative', scale: { domain: [47.64, 47.68] } },
y: { value: 0 },
color: { field: 'label', type: 'nominal' }
}
},
{
mark: 'text',
data: {
values: [
{ label: `min: ${stats.min.toFixed(5)}`, lat: stats.min },
{ label: `mean: ${stats.mean.toFixed(5)}`, lat: stats.mean },
{ label: `max: ${stats.max.toFixed(5)}`, lat: stats.max }
]
},
encoding: {
x: { field: 'lat', type: 'quantitative', scale: { domain: [47.64, 47.68] } },
y: { value: -10 },
text: { field: 'label' },
color: { value: 'black' },
size: { value: 12 }
}
},
{
mark: 'text',
data: {
values: [
{
label: `IQR: ${stats.q1.toFixed(5)} – ${stats.q3.toFixed(5)}`,
x: (stats.q1 + stats.q3) / 2
}
]
},
encoding: {
x: { field: 'x', type: 'quantitative', scale: { domain: [47.64, 47.68] } },
y: { value: 20 },
text: { field: 'label' },
color: { value: '#555' },
size: { value: 12 }
}
}
]
})