Forum Discussion
Deneb Faceted Chart Size
I am building a chart with Deneb and can't work out part of it. I'd like faceted charts to have a different size. When I use "independent" "resolve" for the "x" axis, I get the look I want (different chart widths). However, the chart is too small and I can't change the overall chart size.
{
"data": {"values": [
{"xvalue": 1, "yvalue": 1, "category": "a"}, {"xvalue": 1, "yvalue": 1, "category": "b"}, {"xvalue": 2, "yvalue": 2, "category": "b"}, {"xvalue": 1, "yvalue": 1, "category": "c"}, {"xvalue": 2, "yvalue": 2, "category": "c"}, {"xvalue": 3, "yvalue": 3, "category": "c"}, {"xvalue": 4, "yvalue": 4, "category": "c"}]},
"facet": {
"column": {"field": "category"}
},
"spec": {
"mark": {
"type": "point"
},
"encoding": {
"x": {
"field": "xvalue",
"type": "ordinal"
},
"y": {
"field": "yvalue",
"type": "ordinal"
}
}
},
"resolve": {
"scale": {"x": "independent"}
}
}
I added hard-coded "values" to make it easier to troubleshoot. I can set the "height" and "width" in the "spec", but then they all have the same size. I'd like to use a parameter to find the max "xvalue" in each, and then use that to calculate a dynamic chart width. However, I haven't been able to work out how to do that. Alternative approach would be welcomed too.
Pat
Hey mahoneypat,
I'm not 100% across what the final look should be as I assume you're looking to data-drive the widths? I'm not sure that this is possible in Vega-Lite currently, as it would appear that there is no expression support for height and width properties outside the special cases.
I believe that when you use the facet channel, you aren't able to have things dynamically size; manual heights/widths are needed for the spec to drive how each facet should resolve. I believe there are some ideas being discussed for Vega-Lite (here and here), although this may not be appropriate for your case.
It's quite fascinating that you've been able to dynamically set width with the independent x-axis though 🙂
From a quick look, the closest I could manage is by using the height at a fixed value, and width having a given step value, e.g.:
I get that this might not work well as more (or less) categories are introduced, but does this get you closer towards where you need to go?
I think that anything else might need a change to Vega-Lite. It might be possible to switch your language to Vega and use signals to calculate everything though there though. This might take a bit more figuring out if it's a path you want to go down.
Daniel
2 Replies
- dm-pSuper User
Hey mahoneypat,
I'm not 100% across what the final look should be as I assume you're looking to data-drive the widths? I'm not sure that this is possible in Vega-Lite currently, as it would appear that there is no expression support for height and width properties outside the special cases.
I believe that when you use the facet channel, you aren't able to have things dynamically size; manual heights/widths are needed for the spec to drive how each facet should resolve. I believe there are some ideas being discussed for Vega-Lite (here and here), although this may not be appropriate for your case.
It's quite fascinating that you've been able to dynamically set width with the independent x-axis though 🙂
From a quick look, the closest I could manage is by using the height at a fixed value, and width having a given step value, e.g.:
I get that this might not work well as more (or less) categories are introduced, but does this get you closer towards where you need to go?
I think that anything else might need a change to Vega-Lite. It might be possible to switch your language to Vega and use signals to calculate everything though there though. This might take a bit more figuring out if it's a path you want to go down.
Daniel
- mahoneypatMicrosoft Employee
Thank you, dm-p . I've used "step" before, and should have thought to try that. I think your approach will get me there.
Pat