Customize dotplot function to group by multiple .obs columns

I understand that the sc.pl.dotplot function is intended to display gene names on one axis and some observation from .obs on the other axis (usually cell type label).

I have a different use case. I have a concatenated AnnData object from different studies.
For one specific gene, I want to create a dotplot grouping by both cell type and by study.
Right now, this is my function call:
sc.pl.dotplot(adata, var_names=['CD4'], groupby=['celltype', 'study'])
but the resulting plot is quite ugly, as all dots show up in a single (super-long) column.
I want the shape of the dotplot to be num_studies x num_celltypes.
Can anybody help me out?