Vega-Lite supports autosizing such that one can specify the dimensions of the outputted image instead of the plot:
https://vega.github.io/vega/docs/specification/
Example:
{
"$schema": "https://vega.github.io/schema/vega-lite/v5.json",
"description": "A scatterplot showing body mass and flipper lengths of penguins.",
"width": 400,
"height": 300,
"autosize": {
"type": "fit",
"contains": "padding"
},
"data": {
"url": "data/penguins.json"
},
"mark": "point",
"encoding": {
"x": {
"field": "Flipper Length (mm)",
"type": "quantitative",
"scale": {"zero": false}
},
"y": {
"field": "Body Mass (g)",
"type": "quantitative",
"scale": {"zero": false}
},
"color": {"field": "Species", "type": "nominal"},
"shape": {"field": "Species", "type": "nominal"}
}
}