p <- ggplot(mtcars, aes(mpg, wt)) + geom_point() p p + theme(panel.background = element_rect(colour = "pink")) p + theme_bw() # Scatter plot of gas mileage by vehicle weight p <- ggplot(mtcars, aes(wt, mpg)) + geom_point() # Calculate slope and intercept of line of best fit coef(lm(mpg ~ wt, data = mtcars)) p + geom_abline(intercept = 37, slope = -5) # Calculate correlation coefficient with(mtcars, cor(wt, mpg, use = "everything", method = "pearson")) #annotate the plot p + geom_abline(intercept = 37, slope = -5) + geom_text(data = data.frame(), aes(4.5, 30, label = "Pearson-R = -.87")) # Change the axis labels # Original plot p p + labs(x = "Vehicle Weight", y = "Miles per Gallon") # Or p + labs(x = "Vehicle Weight", y = "Miles per Gallon") # Change title appearance p <- p + labs(title = "Vehicle Weight-Gas Mileage Relationship") # Set title to twice the base font size p + theme(plot.title = element_text(size = rel(2))) p + theme(plot.title = element_text(size = rel(2), colour = "blue")) # Changing plot look with themes DF <- data.frame(x = rnorm(400)) m <- ggplot(DF, aes(x = x)) + geom_histogram() # Default is theme_grey() m # Compare with m + theme_bw() # Manipulate Axis Attributes m + theme(axis.line = element_line(size = 3, colour = "red", linetype = "dotted")) m + theme(axis.text = element_text(colour = "blue")) m + theme(axis.text.y = element_blank()) m + theme(axis.ticks = element_line(size = 2)) m + theme(axis.title.y = element_text(size = rel(1.5), angle = 90)) m + theme(axis.title.x = element_blank()) m + theme(axis.ticks.length = unit(.85, "cm")) # Legend Attributes z <- ggplot(mtcars, aes(wt, mpg)) + geom_point(aes(colour = factor(cyl))) z z + theme(legend.position = "none") z + theme(legend.position = "bottom") # Or use relative coordinates between 0 and 1 z + theme(legend.position = c(.5, .5)) # Add a border to the whole legend z + theme(legend.background = element_rect(colour = "black")) # Legend margin controls extra space around outside of legend: z + theme(legend.background = element_rect(), legend.margin = unit(1, "cm")) z + theme(legend.background = element_rect(), legend.margin = unit(0, "cm")) # Or to just the keys z + theme(legend.key = element_rect(colour = "black")) z + theme(legend.key = element_rect(fill = "yellow")) z + theme(legend.key.size = unit(2.5, "cm")) z + theme(legend.text = element_text(size = 20, colour = "red", angle = 45)) z + theme(legend.title = element_text(face = "italic")) # To change the title of the legend use the name argument # in one of the scale options z + scale_colour_brewer(name = "My Legend") z + scale_colour_grey(name = "Number of \nCylinders") # Panel and Plot Attributes z + theme(panel.background = element_rect(fill = "black")) z + theme(panel.border = element_rect(linetype = "dashed", colour = "black")) z + theme(panel.grid.major = element_line(colour = "blue")) z + theme(panel.grid.minor = element_line(colour = "red", linetype = "dotted")) z + theme(panel.grid.major = element_line(size = 2)) z + theme(panel.grid.major.y = element_blank(), panel.grid.minor.y = element_blank()) z + theme(plot.background = element_rect()) z + theme(plot.background = element_rect(fill = "green")) # Faceting Attributes set.seed(4940) dsmall <- diamonds[sample(nrow(diamonds), 1000), ] k <- ggplot(dsmall, aes(carat, ..density..)) + geom_histogram(binwidth = 0.2) + facet_grid(. ~ cut) k + theme(strip.background = element_rect(colour = "purple", fill = "pink", size = 3, linetype = "dashed")) k + theme(strip.text.x = element_text(colour = "red", angle = 45, size = 10, hjust = 0.5, vjust = 0.5)) k + theme(panel.margin = unit(5, "lines")) k + theme(panel.margin.y = unit(0, "lines")) # Put gridlines on top meanprice <- tapply(diamonds$price, diamonds$cut, mean) cut <- factor(levels(diamonds$cut), levels = levels(diamonds$cut)) df <- data.frame(meanprice, cut) g <- ggplot(df, aes(cut, meanprice)) + geom_bar(stat = "identity") g + geom_bar(stat = "identity") + theme(panel.background = element_blank(), panel.grid.major.x = element_blank(), panel.grid.minor.x = element_blank(), panel.grid.minor.y = element_blank(), panel.ontop = TRUE) # Modify a theme and save it mytheme <- theme_grey() + theme(plot.title = element_text(colour = "red")) p + mytheme Run the code above in your browser using DataLab