这就是你要找的吗?
ID <- 1:50
A <- runif(50,1,100)
df <- data.frame(ID,A)
ggplot(df, aes(x = ID, y = A)) +
geom_point() +
theme(axis.text.x = element_text(angle = 90, vjust = 0.5)) +
scale_x_continuous("ID", labels = as.character(ID), breaks = ID)
这将产生这个图像:
因此,您将获得每个 ID 值的标签。如果您想删除网格线(我的口味太多了),您可以通过添加 theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank()) 来删除它们
编辑: 更简单的方法是仅使用 ID 作为绘图的一个因素。像这样:
ggplot(df, aes(x = factor(ID), y = A)) +
geom_point() +
theme(axis.text.x = element_text(angle = 90, vjust = 0.5)) +
xlab("ID")
这种方法的优点是你不会因为缺少 ID 而得到空格
EDIT2:关于重叠标签的问题:我猜它来自要绘制的大量 ID。有几种方法可以解决这个问题。所以假设你的情节是这样的:
一个想法是通过修改轴的 break 参数来隐藏 x 轴的每个第三个标签:
ggplot(df, aes(x = factor(ID), y = A)) +
geom_point() +
scale_x_discrete(breaks = ID[c(T,F,F)]) +
theme(axis.text.x = element_text(angle = 90, vjust = 0.5)) +
xlab("ID")
这导致了:
如果隐藏标签不是一个选项,您可以将情节拆分为子情节。
df$group <- as.numeric(cut(df$ID, 4))
ggplot(df, aes(x = factor(ID), y = A)) +
geom_point() +
theme(axis.text.x = element_text(angle = 90, vjust = 0.5)) +
xlab("ID") +
facet_wrap(~group, ncol = 1, scales = "free_x")
这导致了: