我正在尝试使用R
中的ggplot2
geom_point
调用来绘制图形。但是,当我绘制所需的图形时,作为单词(而不是数字)的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个点,并且只有一个标签与该垂直线相关联。请参见X轴标签示例:ASV_152; Reyranellaceae
、ASV_102; Hymenobacteraceae
、ASV_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
发布于 2021-10-19 18:53:34
当您选中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))
https://stackoverflow.com/questions/69639727
复制相似问题