ggplot2中stat_cor的hjust右对齐失效问题求助
ggplot2中stat_cor标签位置调整问题
我了解hjust的取值范围是0到1,0代表左对齐,1代表右对齐,但在我的示例里这个设置没生效。以下是我的代码:
library(ggplot2) abundance_environment <- read.table('/home/agalvez/data/environmental_data/vanellid/environmental_parameters.csv', sep="\t", header=TRUE) lineplot9 <- ggplot(abundance_environment, aes( x = abundance_environment$Chlorophyll_A..mg.m..3., y = abundance_environment$log, group = abundance_environment$Depth_Nominal , colour = abundance_environment$Depth_Nominal)) + geom_point( size =2, shape =16) + xlab("Chlorophyll A (mg/m³)") + ylab("Relative abundance") + ggtitle("Abundance-Chlorophyll A") + theme_bw() + labs(colour = "Depth") + stat_cor(method = "spearman", size= 3, p.accuracy = 0.001, r.accuracy = 0.001, hjust=1) + geom_smooth(method= lm, se= FALSE, size= 1) lineplot9 cor(x= abundance_environment$Chlorophyll_A..mg.m..3., y= abundance_environment$log, method = "spearman", use = "complete.obs")

如图所示,相关性数值位置不正确,该如何解决?
编辑补充
我尝试使用以下代码调整位置:
stat_cor(label.y.npc="top", label.x.npc = "right", method = "spearman", size= 3, p.accuracy = 0.001, r.accuracy = 0.001)

数据示例
> dput(head(abundance_environment)) structure(list(OGA_ID = c(20L, 22L, 66L, 75L, 91L, 126L), sample_ID = structure(c(8L, 3L, 4L, 6L, 7L, 5L), .Label = c("TARA_A100001640", "TARA_N000000077", "TARA_N010000218", "TARA_N010000238", "TARA_N010000586", "TARA_N010000911", "TARA_N010000955", "TARA_N010000980"), class = "factor"), log = c(-5.57153717588776, -6.37156046083652, -6.50881538403584, -6.32529538161919, -6.19086429282228, -6.38251610427271), Chlorophyll_A..mg.m..3. = c(-0.0018, 1.98441, -0.0081, 2.6546, -0.0018, 0.83187), Depth..m. = c(391L, 5L, 491L, 17L, 391L, 5L), PAR..mol.quanta.m..2.day. = c(0, NA, NA, NA, 0, 14.83323), O2..µmol.kg. = c(271.8744, 353.1935, 227.316, 373.061, 271.8744, 271.064125), NO3..µmol.l. = c(16.017641, 3.880872, 22.810319, NA, 16.017641, 4.467439), Iron_5m...µmol.l. = c(0.000208521, 0.000596423, 0.000596423, 0.001304139, 0.000208521, 0.000426156 ), Ammonium_5m...µmol.l. = c(0.035179306, 0.018947516, 0.018947516, 0.002257904, 0.035179306, 0.007189205), Nitrite_5m...µmol.l. = c(0.348001957, 0.152390116, 0.152390116, 0.010750825, 0.348001957, 0.010129768 ), Nitrate_5m...µmol.l. = c(2.06166782, 1.684819688, 1.684819688, 4.442976594, 2.06166782, 0.689068984)), row.names = c(NA, 6L), class = "data.frame")
解决方案
1. 为什么hjust不生效?
stat_cor是ggpubr包中的函数,它的文本位置默认由专门的定位参数控制,而非通用的hjust。hjust仅在标签位置确定后,用于微调文本自身的对齐方式,而非控制标签在绘图区域的整体位置。
2. 精准控制标签位置的方法
相对坐标定位(推荐):
用label.x.npc和label.y.npc参数,取值可以是0-1的相对比例,或者便捷字符串:stat_cor(method = "spearman", size=3, p.accuracy=0.001, r.accuracy=0.001, label.x.npc = 0.95, # 靠近右侧95%的位置 label.y.npc = 0.95, # 靠近顶部95%的位置 hjust=1) # 文本自身右对齐,避免超出绘图区域字符串取值支持:
"left"/"right"/"top"/"bottom"/"center"。绝对坐标定位:
如果需要固定在某个具体数据值位置,使用label.x和label.y:stat_cor(method = "spearman", size=3, p.accuracy=0.001, r.accuracy=0.001, label.x = max(abundance_environment$Chlorophyll_A..mg.m..3., na.rm=TRUE), label.y = max(abundance_environment$log, na.rm=TRUE))微调对齐:
结合hjust和vjust调整文本自身的对齐,比如标签在右上角时,设置hjust=1让文本靠右对齐,避免超出绘图边界。
3. 代码优化建议
ggplot中不要在aes()里用data$column的形式,直接写列名更规范:
lineplot9 <- ggplot(abundance_environment, aes( x = Chlorophyll_A..mg.m..3., y = log, group = Depth_Nominal, colour = Depth_Nominal )) + geom_point(size =2, shape =16) + xlab("Chlorophyll A (mg/m³)") + ylab("Relative abundance") + ggtitle("Abundance-Chlorophyll A") + theme_bw() + labs(colour = "Depth") + stat_cor(method = "spearman", size=3, p.accuracy=0.001, r.accuracy=0.001, label.x.npc="right", label.y.npc="top", hjust=1) + geom_smooth(method=lm, se=FALSE, size=1)
内容的提问来源于stack exchange,提问作者Alex galvez morante
相关产品推荐
相关产品推荐

