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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了带有所有x轴值的ggplot x轴标签相关的知识,希望对你有一定的参考价值。

我正在用ggplot策划geom_point。 x轴将是个体ID,y轴是变量A.如何在不重叠标签的情况下在x轴上绘制所有和各个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 <- 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)

这将产生这个图像:

enter image description here

因此,您将获得每个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")

enter image description here

此方法的优点是您不会从缺少的ID中获取空白空间

编辑2:关于重叠标签的问题:我猜测它来自大量要绘制的ID。我们有几种方法可以解决这个问题。所以我们说你的情节看起来像这样:

enter image description here

一种想法是通过修改轴的break参数来隐藏x轴上的每个第3个标签:

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

这导致了这个:

enter image description here

如果无法隐藏标签,则可以将绘图拆分为子图。

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

这导致了这个:

enter image description here

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

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

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

ggplot2:x 和 y 轴带有黑色标签的经典绘图

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

在 R 中使用带有 facet_wrap 的 ggplot2 显示多个轴标签

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