Ggplot scale_x_continuous with character: make bold

Here is the problem: I use ggplot to create a graph in which the x axis is in the range of -90 to 90 degrees. I have successfully used the function to add degree characters to label labels created by scale_x_continuous . However, when I adjust the font using theme() , the tick marks do not become bold. However, changing the font size. Here is an example of reproducibility:

 # function to add degree symbols add_degree <- function(x) { parse(text = paste(x, "*degree",sep = "")) } y<- c(0.00552243346007605, 0.00553155893536122, 0.005693536121673, 0.0054722433460076, 0.00562661596958175, 0.00546768060836502, 0.00561292775665399, 0.00550950570342205, 0.0056851711026616, 0.00551558935361217, 0.0055041825095057, 0.00556501901140684, 0.00552699619771863, 0.00552623574144487, 0.0055680608365019, 0.00567148288973384, 0.00550342205323194, 0.00553764258555133, 0.00538098859315589, 0.00573307984790875, 0.00564486692015209, 0.00561444866920152, 0.00556349809885932, 0.00571254752851711, 0.00544030418250951, 0.00557946768060837, 0.00546083650190114, 0.00549049429657795, 0.00557414448669202, 0.00553916349809886, 0.00551787072243346, 0.00557794676806084, 0.0055041825095057, 0.00552699619771863, 0.0056509505703422, 0.00544790874524715, 0.00555555555555556) x <- seq(-90,90,by = 5) dat <- data.frame(x,y) ggplot(dat,aes(x = x, y = y))+ geom_line()+ scale_x_continuous(limits = c(-90,90), breaks = seq(-90,90, by = 15), labels = add_degree)+ theme_bw() + theme( # Adjust axis label and title font sizes below axis.title = element_text(size=12, face= "bold"), plot.title = element_text(size=12, face = "bold"), # Adjust size of tick labels axis.text.x = element_text(size=12, face = "bold"), axis.text.y = element_text(size=12, face = "bold"), panel.grid.major = element_blank(), panel.grid.minor = element_blank(), panel.border = element_blank(), panel.background = element_blank(), axis.line = element_line(colour = "black") ) 

I tried parse up the parse function above, but so far no luck. I considered the following solution, but could not get it to work in ggplot : How to make beta italics and bold in the axial label and P italics and bold in the text

Here is my output for sessionInfo() :

 R version 3.2.2 (2015-08-14) Platform: x86_64-pc-linux-gnu (64-bit) Running under: Ubuntu 14.04.3 LTS locale: [1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8 LC_MONETARY=en_US.UTF-8 [6] LC_MESSAGES=en_US.UTF-8 LC_PAPER=en_US.UTF-8 LC_NAME=C LC_ADDRESS=C LC_TELEPHONE=C [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C attached base packages: [1] stats graphics grDevices utils datasets methods base other attached packages: [1] reshape2_1.4.1 ggplot2_1.0.1 moments_0.14 loaded via a namespace (and not attached): [1] Rcpp_0.12.0 digest_0.6.8 MASS_7.3-44 grid_3.2.2 plyr_1.8.3 gtable_0.1.2 magrittr_1.5 scales_0.2.5 stringi_0.5-5 [10] proto_0.3-10 labeling_0.3 tools_3.2.2 stringr_1.0.0 munsell_0.4.2 colorspace_1.2-6 

Ps I find this to be a very similar (if not identical) question to the following unanswered question: making the y axis labels in bold in ggplot (the x axis is in bold, but the y axis label doesn’t matter 't change) .

Any help would be greatly appreciated!

+4
source share
2 answers

I read the comment here , which mentions that labels take on the meaning of a character. The output of your function was an expression. Changing add_degree() to the following output values ​​of characters instead of expressions and seems to work for me:

 add_degree <- function(x) { paste(x, "ΒΊ",sep = "") } 

Here is my output for sessionInfo()

 R version 3.0.3 (2014-03-06) Platform: x86_64-apple-darwin10.8.0 (64-bit) locale: [1] en_CA.UTF-8/en_CA.UTF-8/en_CA.UTF-8/C/en_CA.UTF-8/en_CA.UTF-8 attached base packages: [1] stats graphics grDevices utils datasets methods [7] base other attached packages: [1] ggplot2_1.0.0 loaded via a namespace (and not attached): [1] colorspace_1.2-4 digest_0.6.4 grid_3.0.3 [4] gtable_0.1.2 labeling_0.2 MASS_7.3-31 [7] munsell_0.4.2 plyr_1.8.1 proto_0.3-10 [10] Rcpp_0.11.1 reshape2_1.4 scales_0.2.4 [13] stringr_0.6.2 tools_3.0.3 
+3
source

I am reusing a function taken from a similar question , which requires only a slight adjustment.

 make_labels <- function(value) { x <- as.character(value) do.call(expression, lapply(x, function(y) bquote(bold(.(y))^degree))) } 

Now in your ggplot call use labels = make_labels instead of add_degree and you will get

enter image description here

+4
source

All Articles