R语言 ggplot包含所有x轴值的x轴标签

6tr1vspr  于 2023-10-13  发布在  其他
关注(0)|答案(3)|浏览(104)

我在用geom_point标绘ggplot。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。
谢谢你,谢谢

mrfwxfqh

mrfwxfqh1#

这就是你要找的吗

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:**关于您的标签重叠问题:我猜这是因为有大量的身份证被标出来了我们有几种方法可以解决这个问题。假设你的plot看起来像这样:

一个想法是通过修改轴的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")

这就导致了

8ulbf1ek

8ulbf1ek2#

当ID是离散和不连续的时候,这对我很有效:

df$ID <- as.character(df$ID)
xlab <- sort(unique(df$ID))
ggplot(df, aes(x= ID, y= A)) + geom_point() + scale_x_discrete(labels= xlab)
ccgok5k5

ccgok5k53#

只需添加+ xlim()+ ylim()即可显示完整的x轴和y轴(即以使x轴和y轴从零开始)。

可复制示例

如果这是你的ggplot:

iris %>% 
  ggplot(aes(x=Sepal.Length, y=Sepal.Width)) +
  geom_point()

简单地添加这两条线,使x和y轴从零开始

iris %>% 
  ggplot(aes(x=Sepal.Length, y=Sepal.Width)) +
  geom_point() +     
  xlim(0, 8.2) +     # add this line for x axis limits
  ylim(0, 4.5)       # add this line for y axis limits

相关问题