首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >ggplot2:使用geom_point(),但并非所有字符标签都绘制在X轴上

ggplot2:使用geom_point(),但并非所有字符标签都绘制在X轴上
EN

Stack Overflow用户
提问于 2021-10-20 02:44:46
回答 1查看 59关注 0票数 0

我正在尝试使用R中的ggplot2 geom_point调用来绘制图形。但是,当我绘制所需的图形时,作为单词(而不是数字)的X标签并不都显示在X轴上。

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

代码语言:javascript
运行
复制
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。按照那里的说明,我按照建议的代码添加了一个具有单个级别的因子:

代码语言:javascript
运行
复制
Bac$logFC <- factor(Bac$logFC, levels = unique(Bac$logFC))
Bac$ASV_Fam <- factor(Bac$ASV_Fam, levels = unique(Bac$ASV_Fam))

作图:

代码语言:javascript
运行
复制
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; 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()的输出

代码语言:javascript
运行
复制
R version 4.1.1 (2021-08-10)
Platform: x86_64-apple-darwin17.0 (64-bit)
Running under: macOS Big Sur 11.6
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-20 02:53:34

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

我不确定您的用途,但如果您想要x轴上的所有24个标注(ASV_Fam),每个标注一个点,而不是x = Family,请尝试x = ASV_Fam

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

代码语言:javascript
运行
复制
ggplot(Bac, aes(x = ASV_Fam, y = logFC, color = Phylum)) + geom_point() +
  theme(axis.text.x = element_text(colour = "black", size = 9, angle = -90)) 

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69639727

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档