Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I add vline to all the graphs in facet_grid?

Tags:

r

ggplot2

I am working on the Boston data set and trying to see where the 8 room data are on each graph. I have commented out the line which is giving me the error.

I have to add vertical lines at all the points corresponding to rm = 8, to see the spread of data, in every graph of the grid. I want to know: 1. what I have done wrong. 2. A better way to find/represent data points where rm = 8.

library(ggplot2)
library(reshape2)
library(MASS)
library(data.table)

data("Boston")
Boston <- as.data.table(Boston)

molten_boston <- Boston[, `:=`(rm = round(rm),
                                  nox = nox * 100,
                                  chas = chas * 10)]
molten_boston <- melt(data = molten_boston, id.vars = "rm")

comments_bar <- ggplot(molten_boston) + 
    geom_bar(binwidth = 1, aes(x = value), color = "black", fill = "salmon") + 
    # geom_vline(data = molten_boston[rm == 8, .SD, by = variable, .SDcols = "value"], aes(xintercept = value)) +
    facet_wrap(~ variable, scales = "free")
print(comments_bar)
like image 853
foondar Avatar asked Nov 20 '25 09:11

foondar


1 Answers

One other visualization would be stacked bars, it looks ok when large:

molten_boston$EightRooms <- as.factor(molten_boston$rm == 8)
molten_boston$EightRooms <- relevel(molten_boston$EightRooms, 2)

ggplot(molten_boston, aes(x = value, fill = EightRooms)) + 
  geom_bar(binwidth = 1, color = "black") + 
  facet_wrap(~ variable, scales = "free")

enter image description here

Using a density plot in the background would be nice, but is a bit tricky in this case because of the changing y-axis. You probably have to do some pre-calculation. Here's my best attempt:

ggplot(molten_boston, aes(x = value)) + 
  geom_density(data = subset(molten_boston, rm == 8), aes(y =..density.. * 300),
               fill = 'blue', alpha = 0.5) +
  geom_bar(binwidth = 1, color = "black", fill = "salmon", alpha = 0.5) + 
  facet_wrap(~ variable, scales = "free")

enter image description here

like image 154
Axeman Avatar answered Nov 21 '25 22:11

Axeman



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!