具有所有 x 轴值的 ggplot x 轴标签

Posted

技术标签:

【中文标题】具有所有 x 轴值的 ggplot x 轴标签【英文标题】:ggplot x-axis labels with all x-axis values 【发布时间】:2018-05-19 23:06:17 【问题描述】:

我正在用geom_point 绘制ggplot。 x 轴将是个人 ID,y 轴是变量 A。如何在 x 轴上 ggplot 所有和个人 ID 值而不重叠标签? ID 可能不连续。

df 样本(实际行长得多)

> df
ID     A
1      4
2      12
3      45
5      1

剧情代码:

ggplot(df, aes(x = ID, y = A)) + geom_point()

上面的代码有 x 轴间隔,但不显示单独的 ID。

谢谢!

【问题讨论】:

假设您的 ID 名称很长。旋转标签可能是个好主意?见:***.com/questions/1330989/… 【参考方案1】:

这就是你要找的吗?

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")

这导致了:

【讨论】:

谢谢!这就是我需要的。我怎样才能像你在第二个图中那样增加 x 标签之间的空间?我的是重叠的。 为什么你的标签重叠了?我猜你正在尝试绘制很多 ID。我已经编辑了我的答案并添加了一些信息,如果我的想法对你有用,请告诉我 太棒了!我一直在到处寻找这样的东西!

以上是关于具有所有 x 轴值的 ggplot x 轴标签的主要内容,如果未能解决你的问题,请参考以下文章

R语言删除ggplot可视化图中的所有x轴轴标签实战:ggplot可视化默认包含所有x轴轴标签删除ggplot可视化图中的所有x轴轴标签实战

删除ggplot中的所有x轴标签[重复]

R语言ggplot2可视化强制所有的X数值都显示在X轴标签上:x-axis labels with all x-axis values

ggplot2:显示 x 轴值的附加特定图例

使用ggplot2更改R中的x轴刻度标签[重复]

r 旋转x轴标签ggplot