plotnine
plotnine copied to clipboard
Bottom legend overlaps x axis labels
Using plotnine==0.7.1 and the following code
"""Bug."""
from plotnine import aes, geom_point, ggplot, guide_legend, guides, theme
p = ggplot() + aes(x=1, y=2, color=3) + geom_point()
p = p + guides(color=guide_legend()) + theme(legend_position="bottom")
p.save("bug.png")
I can produce this figure where the bottom legend overlaps the x axis labels:

More version information:
plotnine==0.7.1
- descartes [required: >=1.1.0, installed: 1.1.0]
- matplotlib [required: Any, installed: 3.3.3]
- cycler [required: >=0.10, installed: 0.10.0]
- six [required: Any, installed: 1.15.0]
- kiwisolver [required: >=1.0.1, installed: 1.3.1]
- numpy [required: >=1.15, installed: 1.19.4]
- pillow [required: >=6.2.0, installed: 7.1.2]
- pyparsing [required: >=2.0.3,!=2.1.6,!=2.1.2,!=2.0.4, installed: 2.4.7]
- python-dateutil [required: >=2.1, installed: 2.8.1]
- six [required: >=1.5, installed: 1.15.0]
- matplotlib [required: >=3.1.1, installed: 3.3.3]
- cycler [required: >=0.10, installed: 0.10.0]
- six [required: Any, installed: 1.15.0]
- kiwisolver [required: >=1.0.1, installed: 1.3.1]
- numpy [required: >=1.15, installed: 1.19.4]
- pillow [required: >=6.2.0, installed: 7.1.2]
- pyparsing [required: >=2.0.3,!=2.1.6,!=2.1.2,!=2.0.4, installed: 2.4.7]
- python-dateutil [required: >=2.1, installed: 2.8.1]
- six [required: >=1.5, installed: 1.15.0]
- mizani [required: >=0.7.1, installed: 0.7.2]
- matplotlib [required: >=3.1.1, installed: 3.3.3]
- cycler [required: >=0.10, installed: 0.10.0]
- six [required: Any, installed: 1.15.0]
- kiwisolver [required: >=1.0.1, installed: 1.3.1]
- numpy [required: >=1.15, installed: 1.19.4]
- pillow [required: >=6.2.0, installed: 7.1.2]
- pyparsing [required: >=2.0.3,!=2.1.6,!=2.1.2,!=2.0.4, installed: 2.4.7]
- python-dateutil [required: >=2.1, installed: 2.8.1]
- six [required: >=1.5, installed: 1.15.0]
- numpy [required: Any, installed: 1.19.4]
- palettable [required: Any, installed: 3.3.0]
- pandas [required: >=1.1.0, installed: 1.2.0]
- numpy [required: >=1.16.5, installed: 1.19.4]
- python-dateutil [required: >=2.7.3, installed: 2.8.1]
- six [required: >=1.5, installed: 1.15.0]
- pytz [required: >=2017.3, installed: 2020.5]
- numpy [required: >=1.16.0, installed: 1.19.4]
- pandas [required: >=1.1.0, installed: 1.2.0]
- numpy [required: >=1.16.5, installed: 1.19.4]
- python-dateutil [required: >=2.7.3, installed: 2.8.1]
- six [required: >=1.5, installed: 1.15.0]
- pytz [required: >=2017.3, installed: 2020.5]
- patsy [required: >=0.5.1, installed: 0.5.1]
- numpy [required: >=1.4, installed: 1.19.4]
- six [required: Any, installed: 1.15.0]
- scipy [required: >=1.2.0, installed: 1.4.1]
- numpy [required: >=1.13.3, installed: 1.19.4]
- statsmodels [required: >=0.11.1, installed: 0.12.1]
- numpy [required: >=1.15, installed: 1.19.4]
- pandas [required: >=0.21, installed: 1.2.0]
- numpy [required: >=1.16.5, installed: 1.19.4]
- python-dateutil [required: >=2.7.3, installed: 2.8.1]
- six [required: >=1.5, installed: 1.15.0]
- pytz [required: >=2017.3, installed: 2020.5]
- patsy [required: >=0.5, installed: 0.5.1]
- numpy [required: >=1.4, installed: 1.19.4]
- six [required: Any, installed: 1.15.0]
- scipy [required: >=1.1, installed: 1.4.1]
- numpy [required: >=1.13.3, installed: 1.19.4]
This is a known issue related to not having a good layout manager (#46) to rely on. As such all legend positions other than the left hand side are not guaranteed to not overlap other objects. The work around is to use the legend_spacing themeable to push the legend away from the axis. i.e + theme(legend_position="bottom", legend_box_spacing=.5)
Thanks, understood. Similar reason as #452 (and a bunch of other issues) then...
Thanks, understood. Similar reason as #452 (and a bunch of other issues) then...
Yes.
Cheers. Just tested v0.10.1 (installed via mamba) and at least in case of rotated x-labels it's apparently not working. Was it actually fixed in v0.10.0?

It was not fixed.
Fixed and shipping soon.