I created pie charts displaying different scores (0 - 100%) in ggplot with the help of facet_grid(). However the last score is a total score combining the other scores and in order to distinguish it better from the other scores I would like to change the parameters for this specific facet. Ideally, I would like to make the facet-label bold and move the facet a bit further away from the other facets, but I have no idea how to change the parameters of only one specific facet.
library(ggplot2)
df <- data.frame(label = c("A", "B", "Total"), score = c(60, 70, 65))
ggplot(df, aes(x = "", y = score)) +
geom_bar(width = 1, stat = "identity") +
coord_polar("y", start=0) + scale_y_continuous(limits = c(0, 100)) +
facet_grid(. ~ label)
Facet labels can be modified using the option labeller , which should be a function. In the following R code, facets are labelled by combining the name of the grouping variable with group levels. The labeller function label_both is used.
You can use the following basic syntax to specify the order of facets in ggplot2: p + facet_grid(~factor(my_variable, levels=c('val1', 'val2', 'val3', ...))) The following example shows how to use this syntax in practice.
Note that you can add as many (categorical) variables as you'd like in your facet wrap, however, this will result in a longer loading period for R.
By default, the size of the label is given by the Facets, here it is 9. But we can change the size. For that, we use theme() function, which is used to customize the appearance of plot. We can change size of facet labels, using strip.
1. Get the label done based on the link that @Richard posted
library(ggplot2)
df <- data.frame(label = c("A", "B", "Total"), score = c(60, 70, 65))
df$label2 <- factor(df$label, labels = c("A", "B", "bold(Total)"))
p1 <- ggplot(df, aes(x = "", y = score)) +
geom_bar(width = 1, stat = "identity") +
coord_polar("y", start=0) + scale_y_continuous(limits = c(0, 100)) +
facet_grid(. ~ label2, labeller = label_parsed)
p1
2. Modify the space between facets using gtable
library(grid)
library(gtable)
# create gtable object
gt = ggplot_gtable(ggplot_build(p1))
Check the layout
# gt$layout
# gt$layout$name
print(gt)
#> TableGrob (13 x 13) "layout": 23 grobs
#> z cells name
#> 1 0 ( 1-13, 1-13) background
#> 2 1 ( 8- 8, 5- 5) panel-1-1
#> 3 1 ( 8- 8, 7- 7) panel-2-1
#> 4 1 ( 8- 8, 9- 9) panel-3-1
#> 5 3 ( 6- 6, 5- 5) axis-t-1
#> 6 3 ( 6- 6, 7- 7) axis-t-2
#> 7 3 ( 6- 6, 9- 9) axis-t-3
#> 8 3 ( 9- 9, 5- 5) axis-b-1
#> 9 3 ( 9- 9, 7- 7) axis-b-2
#> 10 3 ( 9- 9, 9- 9) axis-b-3
#> 11 3 ( 8- 8, 4- 4) axis-l-1
#> 12 3 ( 8- 8,10-10) axis-r-1
#> 13 2 ( 7- 7, 5- 5) strip-t-1
#> 14 2 ( 7- 7, 7- 7) strip-t-2
#> 15 2 ( 7- 7, 9- 9) strip-t-3
#> 16 4 ( 5- 5, 5- 9) xlab-t
#> 17 5 (10-10, 5- 9) xlab-b
#> 18 6 ( 8- 8, 3- 3) ylab-l
#> 19 7 ( 8- 8,11-11) ylab-r
#> 20 8 ( 4- 4, 5- 9) subtitle
#> 21 9 ( 3- 3, 5- 9) title
#> 22 10 (11-11, 5- 9) caption
#> 23 11 ( 2- 2, 2- 2) tag
#> grob
#> 1 rect[plot.background..rect.121]
#> 2 gTree[panel-1.gTree.29]
#> 3 gTree[panel-2.gTree.46]
#> 4 gTree[panel-3.gTree.63]
#> 5 zeroGrob[NULL]
#> 6 zeroGrob[NULL]
#> 7 zeroGrob[NULL]
#> 8 absoluteGrob[GRID.absoluteGrob.70]
#> 9 absoluteGrob[GRID.absoluteGrob.77]
#> 10 absoluteGrob[GRID.absoluteGrob.84]
#> 11 absoluteGrob[GRID.absoluteGrob.91]
#> 12 zeroGrob[NULL]
#> 13 gtable[strip]
#> 14 gtable[strip]
#> 15 gtable[strip]
#> 16 zeroGrob[NULL]
#> 17 titleGrob[axis.title.x.bottom..titleGrob.112]
#> 18 titleGrob[axis.title.y.left..titleGrob.115]
#> 19 zeroGrob[NULL]
#> 20 zeroGrob[plot.subtitle..zeroGrob.117]
#> 21 zeroGrob[plot.title..zeroGrob.116]
#> 22 zeroGrob[plot.caption..zeroGrob.119]
#> 23 zeroGrob[plot.tag..zeroGrob.118]
Visualize the layout
library(lemon)
lemon::gtable_show_names(gt)
Check the name
names(gt)
#> [1] "grobs" "layout" "widths" "heights"
#> [5] "respect" "rownames" "colnames" "name"
#> [9] "gp" "vp" "children" "childrenOrder"
Take a look at the widths
parameter. It shows that the space is 5.5pt
in between each facet (1null
).
gt$widths
#> [1] 5.5pt 0cm 1grobwidth
#> [4] 0.173972602739726cm 1null 5.5pt
#> [7] 1null 5.5pt 1null
#> [10] 0cm 0cm 0pt
#> [13] 5.5pt
We need to modify gt$widths[8] to increase the space between B
and Total
facets
gt$widths[8] = 3*gt$widths[8]
Check the result
grid.newpage()
grid.draw(gt)
Created on 2018-09-06 by the reprex package (v0.2.0.9000).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With