Skip to content

Unexpectedly large object.size(theme_grey()) #6784

@aphalo

Description

@aphalo

This maybe either a bug or a feature... Anyway, I find surprising that the size of theme objects in 'ggplot2' (4.0.x) is more than 15 MB compared to 0.1 MB in 'ggplot2' (3.5.2). This makes 'gg' objects containing a 'theme' defintion much larger than in earlier versions. I do not know if this can be avoided in the new S7 implementation. The two reprexes below are for Windows 11 Pro for Workstations 25H2 and R version 4.5.2 (2025-10-31 ucrt). Platform: x86_64-w64-mingw32/x64.

v 4.0.1

library(ggplot2)

packageVersion("ggplot2")
#> [1] '4.0.1'

my.theme <- theme_grey()

format(object.size(my.theme), units = "MB")
#> [1] "15.3 Mb"
str(lapply(my.theme, function(x) {format(object.size(x), units = "KB")}))
#> List of 144
#>  $ line                            : chr "321.7 Kb"
#>  $ rect                            : chr "274.1 Kb"
#>  $ text                            : chr "581 Kb"
#>  $ title                           : chr "507.2 Kb"
#>  $ point                           : chr "252.8 Kb"
#>  $ polygon                         : chr "249.8 Kb"
#>  $ geom                            : chr "575.8 Kb"
#>  $ spacing                         : chr "0.6 Kb"
#>  $ margins                         : chr "72 Kb"
#>  $ aspect.ratio                    : chr "0 Kb"
#>  $ axis.title                      : chr "0 Kb"
#>  $ axis.title.x                    : chr "579.5 Kb"
#>  $ axis.title.x.top                : chr "579.5 Kb"
#>  $ axis.title.x.bottom             : chr "0 Kb"
#>  $ axis.title.y                    : chr "579.7 Kb"
#>  $ axis.title.y.left               : chr "0 Kb"
#>  $ axis.title.y.right              : chr "579.7 Kb"
#>  $ axis.text                       : chr "507.8 Kb"
#>  $ axis.text.x                     : chr "579.5 Kb"
#>  $ axis.text.x.top                 : chr "579.5 Kb"
#>  $ axis.text.x.bottom              : chr "0 Kb"
#>  $ axis.text.y                     : chr "579.5 Kb"
#>  $ axis.text.y.left                : chr "0 Kb"
#>  $ axis.text.y.right               : chr "579.5 Kb"
#>  $ axis.text.theta                 : chr "0 Kb"
#>  $ axis.text.r                     : chr "579.5 Kb"
#>  $ axis.ticks                      : chr "320.9 Kb"
#>  $ axis.ticks.x                    : chr "0 Kb"
#>  $ axis.ticks.x.top                : chr "0 Kb"
#>  $ axis.ticks.x.bottom             : chr "0 Kb"
#>  $ axis.ticks.y                    : chr "0 Kb"
#>  $ axis.ticks.y.left               : chr "0 Kb"
#>  $ axis.ticks.y.right              : chr "0 Kb"
#>  $ axis.ticks.theta                : chr "0 Kb"
#>  $ axis.ticks.r                    : chr "0 Kb"
#>  $ axis.minor.ticks.x.top          : chr "0 Kb"
#>  $ axis.minor.ticks.x.bottom       : chr "0 Kb"
#>  $ axis.minor.ticks.y.left         : chr "0 Kb"
#>  $ axis.minor.ticks.y.right        : chr "0 Kb"
#>  $ axis.minor.ticks.theta          : chr "0 Kb"
#>  $ axis.minor.ticks.r              : chr "0 Kb"
#>  $ axis.ticks.length               : chr "0.3 Kb"
#>  $ axis.ticks.length.x             : chr "0 Kb"
#>  $ axis.ticks.length.x.top         : chr "0 Kb"
#>  $ axis.ticks.length.x.bottom      : chr "0 Kb"
#>  $ axis.ticks.length.y             : chr "0 Kb"
#>  $ axis.ticks.length.y.left        : chr "0 Kb"
#>  $ axis.ticks.length.y.right       : chr "0 Kb"
#>  $ axis.ticks.length.theta         : chr "0 Kb"
#>  $ axis.ticks.length.r             : chr "0 Kb"
#>  $ axis.minor.ticks.length         : chr "0.3 Kb"
#>  $ axis.minor.ticks.length.x       : chr "0 Kb"
#>  $ axis.minor.ticks.length.x.top   : chr "0 Kb"
#>  $ axis.minor.ticks.length.x.bottom: chr "0 Kb"
#>  $ axis.minor.ticks.length.y       : chr "0 Kb"
#>  $ axis.minor.ticks.length.y.left  : chr "0 Kb"
#>  $ axis.minor.ticks.length.y.right : chr "0 Kb"
#>  $ axis.minor.ticks.length.theta   : chr "0 Kb"
#>  $ axis.minor.ticks.length.r       : chr "0 Kb"
#>  $ axis.line                       : chr "32.2 Kb"
#>  $ axis.line.x                     : chr "0 Kb"
#>  $ axis.line.x.top                 : chr "0 Kb"
#>  $ axis.line.x.bottom              : chr "0 Kb"
#>  $ axis.line.y                     : chr "0 Kb"
#>  $ axis.line.y.left                : chr "0 Kb"
#>  $ axis.line.y.right               : chr "0 Kb"
#>  $ axis.line.theta                 : chr "0 Kb"
#>  $ axis.line.r                     : chr "0 Kb"
#>  $ legend.background               : chr "273.3 Kb"
#>  $ legend.margin                   : chr "0 Kb"
#>  $ legend.spacing                  : chr "0.3 Kb"
#>  $ legend.spacing.x                : chr "0 Kb"
#>  $ legend.spacing.y                : chr "0 Kb"
#>  $ legend.key                      : chr "0 Kb"
#>  $ legend.key.size                 : chr "0.6 Kb"
#>  $ legend.key.height               : chr "0 Kb"
#>  $ legend.key.width                : chr "0 Kb"
#>  $ legend.key.spacing              : chr "0 Kb"
#>  $ legend.key.spacing.x            : chr "0 Kb"
#>  $ legend.key.spacing.y            : chr "0 Kb"
#>  $ legend.key.justification        : chr "0 Kb"
#>  $ legend.frame                    : chr "0 Kb"
#>  $ legend.ticks                    : chr "0 Kb"
#>  $ legend.ticks.length             : chr "0.3 Kb"
#>  $ legend.axis.line                : chr "0 Kb"
#>  $ legend.text                     : chr "507.6 Kb"
#>  $ legend.text.position            : chr "0 Kb"
#>  $ legend.title                    : chr "507.4 Kb"
#>  $ legend.title.position           : chr "0 Kb"
#>  $ legend.position                 : chr "0.1 Kb"
#>  $ legend.position.inside          : chr "0 Kb"
#>  $ legend.direction                : chr "0 Kb"
#>  $ legend.byrow                    : chr "0 Kb"
#>  $ legend.justification            : chr "0.1 Kb"
#>  $ legend.justification.top        : chr "0 Kb"
#>  $ legend.justification.bottom     : chr "0 Kb"
#>  $ legend.justification.left       : chr "0 Kb"
#>  $ legend.justification.right      : chr "0 Kb"
#>  $ legend.justification.inside     : chr "0 Kb"
#>   [list output truncated]

format(object.size(ggplot()), units = "KB")
#> [1] "349.7 Kb"
format(object.size(ggplot() + theme_grey()), units = "KB")
#> [1] "16007.1 Kb"

my.theme <- complete_theme()
format(object.size(my.theme), units = "MB")
#> [1] "15.3 Mb"
str(lapply(my.theme, function(x) {format(object.size(x), units = "KB")}))
#> List of 144
#>  $ line                            : chr "321.7 Kb"
#>  $ rect                            : chr "274.1 Kb"
#>  $ text                            : chr "581 Kb"
#>  $ title                           : chr "507.2 Kb"
#>  $ point                           : chr "252.8 Kb"
#>  $ polygon                         : chr "249.8 Kb"
#>  $ geom                            : chr "575.8 Kb"
#>  $ spacing                         : chr "0.6 Kb"
#>  $ margins                         : chr "72 Kb"
#>  $ aspect.ratio                    : chr "0 Kb"
#>  $ axis.title                      : chr "0 Kb"
#>  $ axis.title.x                    : chr "579.5 Kb"
#>  $ axis.title.x.top                : chr "579.5 Kb"
#>  $ axis.title.x.bottom             : chr "0 Kb"
#>  $ axis.title.y                    : chr "579.7 Kb"
#>  $ axis.title.y.left               : chr "0 Kb"
#>  $ axis.title.y.right              : chr "579.7 Kb"
#>  $ axis.text                       : chr "507.8 Kb"
#>  $ axis.text.x                     : chr "579.5 Kb"
#>  $ axis.text.x.top                 : chr "579.5 Kb"
#>  $ axis.text.x.bottom              : chr "0 Kb"
#>  $ axis.text.y                     : chr "579.5 Kb"
#>  $ axis.text.y.left                : chr "0 Kb"
#>  $ axis.text.y.right               : chr "579.5 Kb"
#>  $ axis.text.theta                 : chr "0 Kb"
#>  $ axis.text.r                     : chr "579.5 Kb"
#>  $ axis.ticks                      : chr "320.9 Kb"
#>  $ axis.ticks.x                    : chr "0 Kb"
#>  $ axis.ticks.x.top                : chr "0 Kb"
#>  $ axis.ticks.x.bottom             : chr "0 Kb"
#>  $ axis.ticks.y                    : chr "0 Kb"
#>  $ axis.ticks.y.left               : chr "0 Kb"
#>  $ axis.ticks.y.right              : chr "0 Kb"
#>  $ axis.ticks.theta                : chr "0 Kb"
#>  $ axis.ticks.r                    : chr "0 Kb"
#>  $ axis.minor.ticks.x.top          : chr "0 Kb"
#>  $ axis.minor.ticks.x.bottom       : chr "0 Kb"
#>  $ axis.minor.ticks.y.left         : chr "0 Kb"
#>  $ axis.minor.ticks.y.right        : chr "0 Kb"
#>  $ axis.minor.ticks.theta          : chr "0 Kb"
#>  $ axis.minor.ticks.r              : chr "0 Kb"
#>  $ axis.ticks.length               : chr "0.3 Kb"
#>  $ axis.ticks.length.x             : chr "0 Kb"
#>  $ axis.ticks.length.x.top         : chr "0 Kb"
#>  $ axis.ticks.length.x.bottom      : chr "0 Kb"
#>  $ axis.ticks.length.y             : chr "0 Kb"
#>  $ axis.ticks.length.y.left        : chr "0 Kb"
#>  $ axis.ticks.length.y.right       : chr "0 Kb"
#>  $ axis.ticks.length.theta         : chr "0 Kb"
#>  $ axis.ticks.length.r             : chr "0 Kb"
#>  $ axis.minor.ticks.length         : chr "0.3 Kb"
#>  $ axis.minor.ticks.length.x       : chr "0 Kb"
#>  $ axis.minor.ticks.length.x.top   : chr "0 Kb"
#>  $ axis.minor.ticks.length.x.bottom: chr "0 Kb"
#>  $ axis.minor.ticks.length.y       : chr "0 Kb"
#>  $ axis.minor.ticks.length.y.left  : chr "0 Kb"
#>  $ axis.minor.ticks.length.y.right : chr "0 Kb"
#>  $ axis.minor.ticks.length.theta   : chr "0 Kb"
#>  $ axis.minor.ticks.length.r       : chr "0 Kb"
#>  $ axis.line                       : chr "32.2 Kb"
#>  $ axis.line.x                     : chr "0 Kb"
#>  $ axis.line.x.top                 : chr "0 Kb"
#>  $ axis.line.x.bottom              : chr "0 Kb"
#>  $ axis.line.y                     : chr "0 Kb"
#>  $ axis.line.y.left                : chr "0 Kb"
#>  $ axis.line.y.right               : chr "0 Kb"
#>  $ axis.line.theta                 : chr "0 Kb"
#>  $ axis.line.r                     : chr "0 Kb"
#>  $ legend.background               : chr "273.3 Kb"
#>  $ legend.margin                   : chr "0 Kb"
#>  $ legend.spacing                  : chr "0.3 Kb"
#>  $ legend.spacing.x                : chr "0 Kb"
#>  $ legend.spacing.y                : chr "0 Kb"
#>  $ legend.key                      : chr "0 Kb"
#>  $ legend.key.size                 : chr "0.6 Kb"
#>  $ legend.key.height               : chr "0 Kb"
#>  $ legend.key.width                : chr "0 Kb"
#>  $ legend.key.spacing              : chr "0 Kb"
#>  $ legend.key.spacing.x            : chr "0 Kb"
#>  $ legend.key.spacing.y            : chr "0 Kb"
#>  $ legend.key.justification        : chr "0 Kb"
#>  $ legend.frame                    : chr "0 Kb"
#>  $ legend.ticks                    : chr "0 Kb"
#>  $ legend.ticks.length             : chr "0.3 Kb"
#>  $ legend.axis.line                : chr "0 Kb"
#>  $ legend.text                     : chr "507.6 Kb"
#>  $ legend.text.position            : chr "0 Kb"
#>  $ legend.title                    : chr "507.4 Kb"
#>  $ legend.title.position           : chr "0 Kb"
#>  $ legend.position                 : chr "0.1 Kb"
#>  $ legend.position.inside          : chr "0 Kb"
#>  $ legend.direction                : chr "0 Kb"
#>  $ legend.byrow                    : chr "0 Kb"
#>  $ legend.justification            : chr "0.1 Kb"
#>  $ legend.justification.top        : chr "0 Kb"
#>  $ legend.justification.bottom     : chr "0 Kb"
#>  $ legend.justification.left       : chr "0 Kb"
#>  $ legend.justification.right      : chr "0 Kb"
#>  $ legend.justification.inside     : chr "0 Kb"
#>   [list output truncated]

p <- ggplot(mtcars, aes(wt, mpg, label = rownames(mtcars)))

p1 <- p + geom_text()
format(object.size(p1), units = "KB")
#> [1] "359.6 Kb"

p2 <- p1 + theme_grey()
format(object.size(p2), units = "KB")
#> [1] "16017 Kb"
str(lapply(p2, function(x) {format(object.size(x), units = "KB")}))
#> List of 12
#>  $ data       : chr "7 Kb"
#>  $ layers     : chr "0.8 Kb"
#>  $ scales     : chr "0.4 Kb"
#>  $ guides     : chr "0.4 Kb"
#>  $ mapping    : chr "40.8 Kb"
#>  $ theme      : chr "15703.4 Kb"
#>  $ coordinates: chr "0.5 Kb"
#>  $ facet      : chr "0.5 Kb"
#>  $ layout     : chr "0.4 Kb"
#>  $ labels     : chr "21.2 Kb"
#>  $ meta       : chr "0 Kb"
#>  $ plot_env   : chr "0.1 Kb"

Created on 2025-12-22 with reprex v2.1.1

v 3.5.2

library(ggplot2)

packageVersion("ggplot2")
#> [1] '3.5.2'

my.theme <- theme_grey()

format(object.size(my.theme), units = "MB")
#> [1] "0.1 Mb"
str(lapply(my.theme, function(x) {format(object.size(x), units = "KB")}))
#> List of 136
#>  $ line                            : chr "1.4 Kb"
#>  $ rect                            : chr "1.3 Kb"
#>  $ text                            : chr "2.7 Kb"
#>  $ title                           : chr "0 Kb"
#>  $ aspect.ratio                    : chr "0 Kb"
#>  $ axis.title                      : chr "0 Kb"
#>  $ axis.title.x                    : chr "2.1 Kb"
#>  $ axis.title.x.top                : chr "2.1 Kb"
#>  $ axis.title.x.bottom             : chr "0 Kb"
#>  $ axis.title.y                    : chr "2.2 Kb"
#>  $ axis.title.y.left               : chr "0 Kb"
#>  $ axis.title.y.right              : chr "2.2 Kb"
#>  $ axis.text                       : chr "1.8 Kb"
#>  $ axis.text.x                     : chr "2.1 Kb"
#>  $ axis.text.x.top                 : chr "2.1 Kb"
#>  $ axis.text.x.bottom              : chr "0 Kb"
#>  $ axis.text.y                     : chr "2.1 Kb"
#>  $ axis.text.y.left                : chr "0 Kb"
#>  $ axis.text.y.right               : chr "2.1 Kb"
#>  $ axis.text.theta                 : chr "0 Kb"
#>  $ axis.text.r                     : chr "2.1 Kb"
#>  $ axis.ticks                      : chr "1.2 Kb"
#>  $ axis.ticks.x                    : chr "0 Kb"
#>  $ axis.ticks.x.top                : chr "0 Kb"
#>  $ axis.ticks.x.bottom             : chr "0 Kb"
#>  $ axis.ticks.y                    : chr "0 Kb"
#>  $ axis.ticks.y.left               : chr "0 Kb"
#>  $ axis.ticks.y.right              : chr "0 Kb"
#>  $ axis.ticks.theta                : chr "0 Kb"
#>  $ axis.ticks.r                    : chr "0 Kb"
#>  $ axis.minor.ticks.x.top          : chr "0 Kb"
#>  $ axis.minor.ticks.x.bottom       : chr "0 Kb"
#>  $ axis.minor.ticks.y.left         : chr "0 Kb"
#>  $ axis.minor.ticks.y.right        : chr "0 Kb"
#>  $ axis.minor.ticks.theta          : chr "0 Kb"
#>  $ axis.minor.ticks.r              : chr "0 Kb"
#>  $ axis.ticks.length               : chr "0.6 Kb"
#>  $ axis.ticks.length.x             : chr "0 Kb"
#>  $ axis.ticks.length.x.top         : chr "0 Kb"
#>  $ axis.ticks.length.x.bottom      : chr "0 Kb"
#>  $ axis.ticks.length.y             : chr "0 Kb"
#>  $ axis.ticks.length.y.left        : chr "0 Kb"
#>  $ axis.ticks.length.y.right       : chr "0 Kb"
#>  $ axis.ticks.length.theta         : chr "0 Kb"
#>  $ axis.ticks.length.r             : chr "0 Kb"
#>  $ axis.minor.ticks.length         : chr "0.3 Kb"
#>  $ axis.minor.ticks.length.x       : chr "0 Kb"
#>  $ axis.minor.ticks.length.x.top   : chr "0 Kb"
#>  $ axis.minor.ticks.length.x.bottom: chr "0 Kb"
#>  $ axis.minor.ticks.length.y       : chr "0 Kb"
#>  $ axis.minor.ticks.length.y.left  : chr "0 Kb"
#>  $ axis.minor.ticks.length.y.right : chr "0 Kb"
#>  $ axis.minor.ticks.length.theta   : chr "0 Kb"
#>  $ axis.minor.ticks.length.r       : chr "0 Kb"
#>  $ axis.line                       : chr "0.3 Kb"
#>  $ axis.line.x                     : chr "0 Kb"
#>  $ axis.line.x.top                 : chr "0 Kb"
#>  $ axis.line.x.bottom              : chr "0 Kb"
#>  $ axis.line.y                     : chr "0 Kb"
#>  $ axis.line.y.left                : chr "0 Kb"
#>  $ axis.line.y.right               : chr "0 Kb"
#>  $ axis.line.theta                 : chr "0 Kb"
#>  $ axis.line.r                     : chr "0 Kb"
#>  $ legend.background               : chr "1 Kb"
#>  $ legend.margin                   : chr "0.7 Kb"
#>  $ legend.spacing                  : chr "0.6 Kb"
#>  $ legend.spacing.x                : chr "0 Kb"
#>  $ legend.spacing.y                : chr "0 Kb"
#>  $ legend.key                      : chr "0 Kb"
#>  $ legend.key.size                 : chr "0.6 Kb"
#>  $ legend.key.height               : chr "0 Kb"
#>  $ legend.key.width                : chr "0 Kb"
#>  $ legend.key.spacing              : chr "0.6 Kb"
#>  $ legend.key.spacing.x            : chr "0 Kb"
#>  $ legend.key.spacing.y            : chr "0 Kb"
#>  $ legend.frame                    : chr "0 Kb"
#>  $ legend.ticks                    : chr "0 Kb"
#>  $ legend.ticks.length             : chr "0.3 Kb"
#>  $ legend.axis.line                : chr "0 Kb"
#>  $ legend.text                     : chr "1.7 Kb"
#>  $ legend.text.position            : chr "0 Kb"
#>  $ legend.title                    : chr "1.5 Kb"
#>  $ legend.title.position           : chr "0 Kb"
#>  $ legend.position                 : chr "0.1 Kb"
#>  $ legend.position.inside          : chr "0 Kb"
#>  $ legend.direction                : chr "0 Kb"
#>  $ legend.byrow                    : chr "0 Kb"
#>  $ legend.justification            : chr "0.1 Kb"
#>  $ legend.justification.top        : chr "0 Kb"
#>  $ legend.justification.bottom     : chr "0 Kb"
#>  $ legend.justification.left       : chr "0 Kb"
#>  $ legend.justification.right      : chr "0 Kb"
#>  $ legend.justification.inside     : chr "0 Kb"
#>  $ legend.location                 : chr "0 Kb"
#>  $ legend.box                      : chr "0 Kb"
#>  $ legend.box.just                 : chr "0 Kb"
#>  $ legend.box.margin               : chr "0.7 Kb"
#>  $ legend.box.background           : chr "0.3 Kb"
#>  $ legend.box.spacing              : chr "0.6 Kb"
#>   [list output truncated]

format(object.size(ggplot()), units = "KB")
#> [1] "4.6 Kb"
format(object.size(ggplot() + theme_grey()), units = "KB")
#> [1] "77.9 Kb"

my.theme <- complete_theme()
#> Error in complete_theme(): could not find function "complete_theme"
format(object.size(my.theme), units = "MB")
#> [1] "0.1 Mb"
str(lapply(my.theme, function(x) {format(object.size(x), units = "KB")}))
#> List of 136
#>  $ line                            : chr "1.4 Kb"
#>  $ rect                            : chr "1.3 Kb"
#>  $ text                            : chr "2.7 Kb"
#>  $ title                           : chr "0 Kb"
#>  $ aspect.ratio                    : chr "0 Kb"
#>  $ axis.title                      : chr "0 Kb"
#>  $ axis.title.x                    : chr "2.1 Kb"
#>  $ axis.title.x.top                : chr "2.1 Kb"
#>  $ axis.title.x.bottom             : chr "0 Kb"
#>  $ axis.title.y                    : chr "2.2 Kb"
#>  $ axis.title.y.left               : chr "0 Kb"
#>  $ axis.title.y.right              : chr "2.2 Kb"
#>  $ axis.text                       : chr "1.8 Kb"
#>  $ axis.text.x                     : chr "2.1 Kb"
#>  $ axis.text.x.top                 : chr "2.1 Kb"
#>  $ axis.text.x.bottom              : chr "0 Kb"
#>  $ axis.text.y                     : chr "2.1 Kb"
#>  $ axis.text.y.left                : chr "0 Kb"
#>  $ axis.text.y.right               : chr "2.1 Kb"
#>  $ axis.text.theta                 : chr "0 Kb"
#>  $ axis.text.r                     : chr "2.1 Kb"
#>  $ axis.ticks                      : chr "1.2 Kb"
#>  $ axis.ticks.x                    : chr "0 Kb"
#>  $ axis.ticks.x.top                : chr "0 Kb"
#>  $ axis.ticks.x.bottom             : chr "0 Kb"
#>  $ axis.ticks.y                    : chr "0 Kb"
#>  $ axis.ticks.y.left               : chr "0 Kb"
#>  $ axis.ticks.y.right              : chr "0 Kb"
#>  $ axis.ticks.theta                : chr "0 Kb"
#>  $ axis.ticks.r                    : chr "0 Kb"
#>  $ axis.minor.ticks.x.top          : chr "0 Kb"
#>  $ axis.minor.ticks.x.bottom       : chr "0 Kb"
#>  $ axis.minor.ticks.y.left         : chr "0 Kb"
#>  $ axis.minor.ticks.y.right        : chr "0 Kb"
#>  $ axis.minor.ticks.theta          : chr "0 Kb"
#>  $ axis.minor.ticks.r              : chr "0 Kb"
#>  $ axis.ticks.length               : chr "0.6 Kb"
#>  $ axis.ticks.length.x             : chr "0 Kb"
#>  $ axis.ticks.length.x.top         : chr "0 Kb"
#>  $ axis.ticks.length.x.bottom      : chr "0 Kb"
#>  $ axis.ticks.length.y             : chr "0 Kb"
#>  $ axis.ticks.length.y.left        : chr "0 Kb"
#>  $ axis.ticks.length.y.right       : chr "0 Kb"
#>  $ axis.ticks.length.theta         : chr "0 Kb"
#>  $ axis.ticks.length.r             : chr "0 Kb"
#>  $ axis.minor.ticks.length         : chr "0.3 Kb"
#>  $ axis.minor.ticks.length.x       : chr "0 Kb"
#>  $ axis.minor.ticks.length.x.top   : chr "0 Kb"
#>  $ axis.minor.ticks.length.x.bottom: chr "0 Kb"
#>  $ axis.minor.ticks.length.y       : chr "0 Kb"
#>  $ axis.minor.ticks.length.y.left  : chr "0 Kb"
#>  $ axis.minor.ticks.length.y.right : chr "0 Kb"
#>  $ axis.minor.ticks.length.theta   : chr "0 Kb"
#>  $ axis.minor.ticks.length.r       : chr "0 Kb"
#>  $ axis.line                       : chr "0.3 Kb"
#>  $ axis.line.x                     : chr "0 Kb"
#>  $ axis.line.x.top                 : chr "0 Kb"
#>  $ axis.line.x.bottom              : chr "0 Kb"
#>  $ axis.line.y                     : chr "0 Kb"
#>  $ axis.line.y.left                : chr "0 Kb"
#>  $ axis.line.y.right               : chr "0 Kb"
#>  $ axis.line.theta                 : chr "0 Kb"
#>  $ axis.line.r                     : chr "0 Kb"
#>  $ legend.background               : chr "1 Kb"
#>  $ legend.margin                   : chr "0.7 Kb"
#>  $ legend.spacing                  : chr "0.6 Kb"
#>  $ legend.spacing.x                : chr "0 Kb"
#>  $ legend.spacing.y                : chr "0 Kb"
#>  $ legend.key                      : chr "0 Kb"
#>  $ legend.key.size                 : chr "0.6 Kb"
#>  $ legend.key.height               : chr "0 Kb"
#>  $ legend.key.width                : chr "0 Kb"
#>  $ legend.key.spacing              : chr "0.6 Kb"
#>  $ legend.key.spacing.x            : chr "0 Kb"
#>  $ legend.key.spacing.y            : chr "0 Kb"
#>  $ legend.frame                    : chr "0 Kb"
#>  $ legend.ticks                    : chr "0 Kb"
#>  $ legend.ticks.length             : chr "0.3 Kb"
#>  $ legend.axis.line                : chr "0 Kb"
#>  $ legend.text                     : chr "1.7 Kb"
#>  $ legend.text.position            : chr "0 Kb"
#>  $ legend.title                    : chr "1.5 Kb"
#>  $ legend.title.position           : chr "0 Kb"
#>  $ legend.position                 : chr "0.1 Kb"
#>  $ legend.position.inside          : chr "0 Kb"
#>  $ legend.direction                : chr "0 Kb"
#>  $ legend.byrow                    : chr "0 Kb"
#>  $ legend.justification            : chr "0.1 Kb"
#>  $ legend.justification.top        : chr "0 Kb"
#>  $ legend.justification.bottom     : chr "0 Kb"
#>  $ legend.justification.left       : chr "0 Kb"
#>  $ legend.justification.right      : chr "0 Kb"
#>  $ legend.justification.inside     : chr "0 Kb"
#>  $ legend.location                 : chr "0 Kb"
#>  $ legend.box                      : chr "0 Kb"
#>  $ legend.box.just                 : chr "0 Kb"
#>  $ legend.box.margin               : chr "0.7 Kb"
#>  $ legend.box.background           : chr "0.3 Kb"
#>  $ legend.box.spacing              : chr "0.6 Kb"
#>   [list output truncated]

p <- ggplot(mtcars, aes(wt, mpg, label = rownames(mtcars)))

p1 <- p + geom_text()
format(object.size(p1), units = "KB")
#> [1] "14.8 Kb"

p2 <- p1 + theme_grey()
format(object.size(p2), units = "KB")
#> [1] "88.1 Kb"
str(lapply(p2, function(x) {format(object.size(x), units = "KB")}))
#> List of 11
#>  $ data       : chr "7 Kb"
#>  $ layers     : chr "0.5 Kb"
#>  $ scales     : chr "0.4 Kb"
#>  $ guides     : chr "0.4 Kb"
#>  $ mapping    : chr "2.8 Kb"
#>  $ theme      : chr "73.4 Kb"
#>  $ coordinates: chr "0.5 Kb"
#>  $ facet      : chr "0.5 Kb"
#>  $ plot_env   : chr "0.1 Kb"
#>  $ layout     : chr "0.4 Kb"
#>  $ labels     : chr "0.8 Kb"

Created on 2025-12-22 with reprex v2.1.1

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions