wilkox / treemapify

🌳 Draw treemaps in ggplot2
http://wilkox.org/treemapify
213 stars 18 forks source link

Legend size overridden by subgroup border #36

Open dekaufman opened 4 years ago

dekaufman commented 4 years ago

Code example, using theme() to control the size and shape of the legend key items:

library(treemapify)

plot_11 <- ggplot(diamonds %>% head(12), 
                     aes(area = carat, fill = color, label = color, 
                         subgroup = cut, subgroup2 = color)) +
  geom_treemap(size = 3) +
  # geom_treemap_subgroup_border(color = "grey", size = 20) +
  geom_treemap_subgroup2_border(color = "grey", size = 2) +
  geom_treemap_subgroup_text(place = "center", grow = FALSE, alpha = 0.5, colour =
                               "black", fontface = "italic", min.size = 2,
                             padding.x = grid::unit(3,"mm"), padding.y = grid::unit(3,"mm") ) +
  theme(legend.key.size = unit(1, "cm"), 
        legend.key.width = unit(0.3, "cm")) +
  theme(legend.background = element_rect(fill = 'grey'))
plot_11

Result: image

However, when geom_treemap_subgroup_border() is uncommented to introduce some separation between major groupings, the legend key sizing no longer works: image

(Actually, it partly works. Values of legend.key.size bigger than 2 cm will take effect.)

Is there a way to use both features fully?

wilkox commented 4 years ago

To be honest, I don't really understand why this happens. geom_subgroup_border() uses draw_key_blank(), so in principle it shouldn't have any effect on the legend. Somehow though the size aesthetic seems to percolate back up from geom_subgroup_border() and affect how the keys for the tiles are drawn.

A workaround is to manually specify the aesthetics for geom_subgroup_border():

library(treemapify)
library(tidyverse)

ggplot(diamonds %>% head(12), 
                     aes(area = carat, fill = color, label = color, 
                         subgroup = cut, subgroup2 = color)) +
  geom_treemap(size = 3) +
  geom_treemap_subgroup_border(aes(area = carat, subgroup = cut), color = "grey", size = 20, inherit.aes = FALSE) +
  geom_treemap_subgroup2_border(color = "grey", size = 2) +
  geom_treemap_subgroup_text(place = "center", grow = FALSE, alpha = 0.5, colour =
                               "black", fontface = "italic", min.size = 2,
                             padding.x = grid::unit(3,"mm"), padding.y = grid::unit(3,"mm") ) +
  theme(legend.key.size = unit(1, "cm"), 
        legend.key.width = unit(0.3, "cm")) +
  theme(legend.background = element_rect(fill = 'grey'))
#> Warning: Ignoring unknown aesthetics: subgroup

Created on 2019-10-19 by the reprex package (v0.3.0)

This produces a warning but at least it draws the plot the way you want.