Reputation: 173
I have the following dataframe:
df<-data.frame(ID = c(1,2,3,4,5,6,7,8,9,10),
group = c(1,1,1,1,1,2,2,2,3,3),
level = c(0.1,0.5,0.2,0.3,0.6,0.7,0.8,0.5,0.9,0.3))
I would like to use ggplot2 to plot a scatter plot, where every point (x,y) corresponds to the values of (ID,level)
. But I want to label the x-axis based on the group
value, so that the x-axis in this case would have 3 ticks: under tick "1", there would be 5 points, tick "2" with 3 points and tick "3" with 2 points.
Upvotes: 0
Views: 661
Reputation: 174278
Are you looking for facets?
ggplot(df, aes(ID, level)) +
geom_point() +
facet_grid(.~group, scales = "free_x", space = "free_x") +
scale_x_continuous(breaks = 1:10, expand = expansion(0, 0.5)) +
theme(panel.spacing = unit(0, "mm"),
text = element_text(size = 16),
strip.background = element_rect(fill = "#A0B6FF", color = "black"),
panel.border = element_rect(colour = "grey", fill = NA),
strip.text = element_text(size = 20))
Upvotes: 1
Reputation: 125053
Similar idea as by Allan but with some additional tweaking to show the group labels as tick labels:
library(ggplot2)
breaks <- tapply(df$ID, df$group, median)
ggplot(df, aes(ID, level)) +
geom_point() +
scale_x_continuous(breaks = breaks, labels = NULL) +
facet_grid(~group, scales = "free_x", switch = "x" , space = "free_x") +
theme(strip.placement = "outside",
strip.background.x = element_blank())
Upvotes: 1
Reputation: 133
The tidyverse way:
library(tidyverse)
df %>% ggplot(aes(x = group, y = level)) +
geom_point(aes(color = as.factor(ID)), size = 2) +
scale_x_continuous(breaks = seq(1:3))
Upvotes: 0