part2 = vl
.markSquare({ size: width })
.data([...data].reverse())
.encode(
vl
.y()
.fieldQ('r')
.scale({ reverse: true })
.axis(null),
vl
.x()
.fieldQ('c')
.axis(null),
vl
.color()
.fieldO('p')
.scale({ range: ['white', 'red', 'blue'] })
.legend(false),
vl
.opacity()
.fieldQ('p')
.scale({ domain: [0, 1, 2], range: [1, 1, 0] })
.legend(false)
)
.width(width)
.height((width / w) * h)
.autosize('fit')
.render()