为什么geom_text_repel()的size美学映射参数不生效?
问题原因
错误核心是将固定属性值放在了美学映射aes()内部:aes()的作用是将数据集中的变量绑定到图表的视觉属性上,当你在aes()中传入固定数值时,ggplot会将该数值识别为统一的分类常量,而非直接设置属性值:
- 无论你传入
size=100还是size=0.01,ggplot都会判定为「所有文本共用同一个size映射值」,最终调用默认的文本大小渲染,因此两张图的文字大小没有差异 - 额外的size映射会触发对应的图例生成,就是你图表中多余的size图例项
解决方法
将size参数从aes()中移出,作为geom_text_repel()的直接参数即可正常生效,修改后的示例代码如下:
ggplot(xx, aes(log2FC_OEIPtoOEC, -log10(adj.pvalue_OEIPtoOEC), label = ifelse(interactor, SYMBOL, ""), colour = interactor)) + geom_point() + geom_text_repel(size = 6) + # size放在aes外部,直接设置固定大小 geom_hline(yintercept = -log10(0.05), linetype = "dashed") + geom_vline(xintercept = 1, linetype = "dashed") + xlab("Log2 fold change of IP to control") + ylab("-Log10 of adjusted p-value") + theme_classic()
补充说明
如果你需要根据数据集中的某个变量动态调整文本大小,才需要将size放进aes()绑定对应的变量,例如aes(size = log2FC_OEIPtoOEC),这种场景下可以配合scale_size_continuous()自定义大小映射的范围。
内容的提问来源于stack exchange,提问作者Pavel Shliaha
相关产品推荐
相关产品推荐

