ggplot2绘图技术求助:移除图例'a'符号及标签置于柱顶方法
解决方案:移除图例中的'a'并调整标签位置
我来帮你搞定这两个问题,一步步来:
1. 移除图例里的'a'符号
你遇到的这个问题,是因为把label放在了全局的aes()映射里。ggplot会把所有在全局aes()里的属性都当成需要图例展示的映射项,label也不例外,默认就会在图例里显示一个'a'来代表这个映射。
解决方法很直接:把label从全局aes()中移除,只放到geom_text()专属的aes()里,这样它就不会被纳入图例的生成逻辑了。
2. 将标签放在点的顶部(对应你说的柱形顶部)
你当前的geom_text()用了hjust=0, vjust=0,这会让标签出现在点的右下角。要把它移到点的正上方,只需要调整这两个参数:
hjust=0.5:让标签在点的水平方向居中vjust=-0.5:让标签在点的垂直方向上方(负数代表向上偏移,数值可以根据你的需求微调,比如-0.3或-0.6)
修改后的完整代码
m <- read.csv('example.csv', header=T, row.names=1) boxOdds = m$Odd df <- data.frame( yAxis = length(boxOdds):1, boxnucleotide = m$Position, boxCILow = m$lower, boxCIHigh = m$upper, Mutation = m$Resistance) ticksy<-c(seq(0,0.3,by=.1), seq(0, 1, by =.5), seq(0, 20, by =5), seq(0, 150, by =50)) ticksx<-c(seq(0,300,by=25)) # 全局aes移除label,只保留颜色和坐标映射 p <- ggplot(df, aes(x = boxnucleotide, y = boxOdds, colour=Mutation)) p1 <- p + geom_errorbar(aes(ymax = boxCIHigh, ymin = boxCILow), size = .5, height = .01) + geom_point(size = 1) + theme_bw() + theme(panel.grid.minor = element_blank()) + scale_y_continuous(breaks=ticksy, labels = ticksy) + scale_x_continuous(breaks=ticksx, labels = ticksx) + coord_trans(y = "log10") + ylab("Odds ratio (log scale)") + scale_color_manual(values=c("#00BFC4","#F8766D","#619CFF")) + xlab("Integrase nucleotide position") + # 将label移到geom_text的aes里,同时调整位置参数 geom_text(aes(label=rownames(m)), size=4, hjust=0.5, vjust=-0.5)+ theme(legend.position = c(0.9, 0.9)) p1
关键修改点总结
- 全局
aes()中删除label=rownames(m):避免label被当作图例映射项 geom_text()内新增aes(label=rownames(m)):仅让文本标签使用这个映射- 调整
hjust和vjust参数:实现标签在点顶部居中的效果
内容的提问来源于stack exchange,提问作者Mariano Avino
相关产品推荐
相关产品推荐

