0

我正在尝试使用ggplot2 geom_pointin 中的调用绘制图表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) 

我发现最接近我的错误的是这篇文章:Unable to plot points from a data.frame。按照那里的说明,我按照建议的代码添加了一个单一级别的因素:

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),但这些选项都不起作用。

此外,传递以下代码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
4

1 回答 1

1

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

我不确定您的目的,但是如果您想要ASV_Famx 轴上的所有 24 个标签()并且每个标签一个点,而不是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)) 

在此处输入图像描述

于 2021-10-20T02:53:33.793 回答