{
const point1 = vl.markPoint({color:"#90C5C1", point: {filled:true, size:50}}).encode(
vl
.x()
.max('excitement')
.axis({title: "Excitement", labelFontSize: 12, titleFontSize: 13}),
vl
.y()
.fieldN('theme').title("Theme")
.axis({labelFontSize: 12})
);
const point2 = vl.markPoint({color:"#90C5C1", point: {filled:true, size:50}}).encode(
vl
.x()
.min('excitement')
.axis({title: "Excitement", labelFontSize: 12, titleFontSize: 13}),
vl
.y()
.fieldN('theme')
.axis({labelFontSize: 12}),
);
const lines = vl.markRule().encode(
vl.x().min('excitement'),
vl.x2().max('excitement'),
vl
.y()
.fieldN('theme'),
vl.color({ value: 'Grey' })
);
const point3 = vl.markPoint({color:"#7094B7", point: {filled:true, size:50}}).encode(
vl
.x()
.max('intensity')
.axis({title: "Intensity", labelFontSize: 12, titleFontSize: 13}),
vl
.y()
.fieldN('theme').title(null)
.axis(null),
//.sort(sortOrder),
);
const point4 = vl.markPoint({color:"#7094B7", point: {filled:true, size:50}}).encode(
vl
.x()
.min('intensity')
.axis({title: "Intensity", labelFontSize: 12, titleFontSize: 13}),
vl
.y()
.fieldN('theme')
.axis({labelFontSize: 12}),
//.sort(sortOrder),
);
const point5 = vl.markPoint({color:"#E77979", point: {filled:true, size:50}}).encode(
vl
.x()
.max('nausea')
.axis({title: "Nausea", labelFontSize: 12, titleFontSize: 13}),
vl
.y()
.fieldN('theme').title(null)
.axis(null),
//.sort(sortOrder),
);
const point6 = vl.markPoint({color:"#E77979", point: {filled:true, size:50}}).encode(
vl
.x()
.min('nausea')
.axis({title: "Nausea", labelFontSize: 12, titleFontSize: 13}),
vl
.y()
.fieldN('theme')
.axis({labelFontSize: 12}),
//.sort(sortOrder),
);
const base = vl.markRule({stroke: 'firebrick',strokeWidth: 2, color: '#608BA6'})
.data([{'excitement': 6.6}])
.encode(
vl.x().fieldQ('excitement')
);
const base2 = vl.markRule({stroke: 'firebrick',strokeWidth: 2,color: '#608BA6'})
.data([{'intensity': 7.5}])
.encode(
vl.x().fieldQ('intensity')
);
const base3 = vl.markRule({stroke: 'firebrick',strokeWidth: 2,color: '#608BA6'})
.data([{'nausea': 5.16}])
.encode(
vl.x().fieldQ('nausea')
);
const line1 = vl.markRule().encode(
vl.x().min('intensity'),
vl.x2().max('intensity'),
// vl.x3().q3('intensity'),
vl
.y()
.fieldN('theme'),
vl.color({ value: 'Grey' })
);
const line2 = vl.markRule().encode(
vl.x().min('nausea'),
vl.x2().max('nausea'),
// vl.x3().q3('nausea'),
vl
.y()
.fieldN('theme'),
vl.color({ value: 'Grey' })
);
const nausealevel = vl
.layer(point5,point6,line2,base3)
.data(df1)
.width(350)
.height(550)
.title({
text: 'Range of ride nausea by theme park',
anchor: 'middle',
font: 'Tahoma',
fontSize: 14
})
const intensitylevel = vl
.layer(base2, point3,point4,line1)
.data(df1)
.width(350)
.height(550)
.title({
text: 'Range of ride intensity by theme park',
anchor: 'middle',
font: 'Tahoma',
fontSize: 14
})
const excitementlevel = vl
.layer(base, point1, lines, point2)
.data(df1)
.width(350)
.height(550)
.title({
text: 'Range of ride excitement by theme park',
anchor: 'middle',
font: 'Tahoma',
fontSize: 14
})
return vl.hconcat(excitementlevel, intensitylevel, nausealevel)
.title({
text: 'Comparison of Ride Excitement, Intensity, and Nausea by Theme Park',
anchor: 'middle',
fontSize: 18
})
.render();
}