ggplot2:使用 geom_point() 并且并非我所有的字符标签都绘制在 X 轴上

ggplot2: using geom_point() and not all of my character labels are plotting on the X-axis

我正在尝试使用 ggplot2 geom_point 调用 R 来绘制图表。但是,当我绘制所需的图形时,我的 X 标签(不是数字)并没有全部显示在 X 轴上。

首先,这里有一些可重现的数据:

Bac <- data.frame(logFC = seq(-1, 3.5, 0.19), 
             ASV_Fam = c("ASV_31; Bdellovibrionaceae", "ASV_152; Reyranellaceae", "ASV_102; Hymenobacteraceae", "ASV_124; Nitrospiraceae", "ASV_141; NA", 
                                                          "ASV_180; Microscillaceae", "ASV_259; Microscillaceae", "ASV_272; Chitinophagaceae", "ASV_79; Chthoniobacteraceae", 
                                                          "ASV_266; Chthoniobacteraceae", "ASV_106; Nitrosomonadaceae", "ASV_121; Nitrospiraceae", "ASV_184; Methylophilaceae", "ASV_115; Chthoniobacteraceae",
                                                          "ASV_123; Nitrosomonadaceae", "ASV_143; Haliangiaceae", "ASV_139; NA", "ASV_159; Micrococcaceae", "ASV_185; Xanthobacteraceae", "ASV_227; Chitinophagaceae",   
                                                          "ASV_233; NA", "ASV_239; Chitinophagaceae", "ASV_255; NA", "ASV_204; Longimicrobiaceae"), 
             Phylum = c("Bdellovibrionota", "Proteobacteria", "Bacteroidota", "Nitrospirota",     
                        "Proteobacteria", "Bacteroidota", "Bacteroidota", "Bacteroidota",     
                        "Verrucomicrobiota", "Verrucomicrobiota", "Proteobacteria", "Nitrospirota",     
                        "Proteobacteria", "Verrucomicrobiota", "Proteobacteria", "Myxococcota",      
                        "Proteobacteria", "Actinobacteriota", "Proteobacteria", "Bacteroidota",     
                        "Proteobacteria", "Bacteroidota", "Cyanobacteria","Gemmatimonadota"))

Bac$Family <- gsub("^[^.]*;", "", Bac$ASV_Fam) 

我发现最接近错误的是 post:。按照那里的说明,我按照建议的代码添加了一个具有单个级别的因子:

Bac$logFC <- factor(Bac$logFC, levels = unique(Bac$logFC))
Bac$ASV_Fam <- factor(Bac$ASV_Fam, levels = unique(Bac$ASV_Fam))

作图:

ggplot(Bac, aes(x = Family, y = logFC, color = Phylum)) + geom_point() +
scale_x_discrete(labels = toShow$ASV_Fam) + theme(axis.text.x = element_text(colour = "black", size = 9, angle = -90)) 

但是,这仍然没有绘制我需要查看的所有 X 标签。这是我得到的图表:

如您所见,它只绘制了我为 X 轴传递的 24 个标签中的 14 个。我所有的点都在那里,但有些垂直线显示超过 1 个点,并且只有 1 个标签与该垂直线相关联。参见例如 X 轴标签:ASV_152; ReyranellaceaeASV_102; HymenobacteraceaeASV_266; Chthoniobacteraceae

我不确定为什么没有给它们单独的 X 轴标签,而是将它们绘制在同一垂直线上,从而减少了绘制在 X 轴上的标签总数。

我尝试过的其他解决方法:通过 pdf() 命令加宽 pdf,通过传递 coord_fixed(ratio = 0.25) 加宽图表,但这些选项中的 none 有效。

此外,传递以下代码 scale_y_discrete(breaks = seq(-1, 4, 0.5)) 这样我就不会在 Y 轴上显示这么多数字,这是行不通的。我认为这是因为 y 轴已被设置为一个因素,所以我试图将其保留为数字,但这也不起作用。

任何有关正在发生的事情的线索都会非常有帮助!

作为参考,这是我的会话的输出 sessionInfo()

R version 4.1.1 (2021-08-10)
Platform: x86_64-apple-darwin17.0 (64-bit)
Running under: macOS Big Sur 11.6

当您检查 dim(table(Bac$Family)) 时,Family 中存在 14 个唯一值,并且当您通过 x = Family 设置绘图的 x 轴时,只有 14 个值存在。

我不确定你的目的,但如果你想要 x 轴上的所有 24 个标签 (ASV_Fam) 并且每个标签一个点,而不是 x = Family,请尝试 x = ASV_Fam

如果这个情节不是你想要的,请告诉我。

ggplot(Bac, aes(x = ASV_Fam, y = logFC, color = Phylum)) + geom_point() +
  theme(axis.text.x = element_text(colour = "black", size = 9, angle = -90))