R语言使用barplot绘制柱状图如何将旋转标签放置在柱子顶部
R语言barplot柱子顶部放置旋转标签的缺失参数说明
你现有代码存在两个核心问题,缺少对应的关键参数配置:
- y坐标参数设置错误:你当前
text()函数的y=-1.25是把标签渲染在坐标轴底部,要放在柱子顶部需要把y值设为对应柱子的高度df$b,可以额外加小偏移值避免标签和柱子顶边重叠,比如y = df$b + 1。 - 缺少对齐参数
adj:旋转标签(srt参数生效)后如果不配置对齐参数,会出现标签和柱子位置错位的问题,放在柱子顶部时可以根据展示需求调整adj取值,比如配adj = c(0, 0)表示标签左下角对齐柱子顶部坐标,配adj = c(0.5, 0)表示标签底部中心对齐柱子顶部中心点。
另外你当前barplot()调用第二个参数c(2,4,1,6)没有指定参数名,会被识别为柱子宽度width参数,而你有20个柱子,4个宽度值会被循环使用,不符合预期的话建议补充参数名或者调整取值;同时如果要把标签放在顶部,需要调整画布顶部边距、调高ylim上限,避免标签超出画布范围。
修正后的完整代码如下:
df<- data.frame(a=strrep(letters[1:20], 10) , b=runif(20, min=1, max=30)) df<- df[order(df$b, decreasing = TRUE),] row.names(df)<- df$a # 调整顶部边距预留标签展示空间 par(mar=c(5, 5, 8, 2)+ 0.2) # 调高ylim上限避免顶部标签被截断 x<- barplot(df$b, ylim = c(0, 35), ylab="statistics", col = heat.colors(20), xaxt="n") label = row.names(df) # 调整y值到柱子顶部,增加adj参数控制对齐 text(cex=0.5, x=x, y=df$b + 0.8, labels = label, xpd=TRUE, srt=45, adj = c(0, 0))
内容的提问来源于stack exchange,提问作者zeno Zeng
相关产品推荐
相关产品推荐

