R语言绘制条形图时图例覆盖图表无法修复问题求助
解决R基础条形图图例覆盖绘图区域的方法
- 首先通过
par()函数调整绘图边距,给右侧留出足够放置图例的空间 - 调整
args.legend参数,允许图例绘制在绘图区域外,同时指定外侧坐标位置
修正后可直接运行的代码
# 调整绘图边距:四个值依次对应 下、左、上、右 的边距,放大右侧边距预留图例位置 par(mar = c(5, 4, 4, 8)) # 绘制条形图,将条形位置返回值存为bp方便精确定位图例 bp <- barplot(Type.freq, main = "Breast Cancer Classes", col = blues9, border = "black", legend = rownames(Type.freq), args.legend = list( title = "Type", x = max(bp) + 0.5, # 定位到最右侧条形的外侧 xpd = TRUE, # 允许在绘图区域外的边距区域绘制元素 cex = 0.4 )) # 计算类别占比 paste(prop.table(Type.freq)*100, "%", sep = "")
参数说明
mar = c(5,4,4,8):将右侧边距从默认值2左右调整为8,给图例留出足够空间xpd = TRUE:默认R仅允许在核心绘图区域内绘制元素,开启该参数后可在边距区域绘制图例- 用
max(bp)作为基准定位图例X坐标,可适配不同长度的条形图,避免手动填写坐标的适配问题
可选方案:图例放置到底部
如果不希望占用右侧空间,也可将图例放到绘图区域下方,调整代码如下:
par(mar = c(8, 4, 4, 2)) bp <- barplot(Type.freq, main = "Breast Cancer Classes", col = blues9, border = "black", legend = rownames(Type.freq), args.legend = list( title = "Type", x = "bottom", inset = c(0, -0.3), xpd = TRUE, ncol = 2, # 图例数量多可分多列展示 cex = 0.4 ))
补充说明
你提供的样本数据存在语法错误,两个基因向量之间缺少逗号,修正后可正常读取:
df <- data.frame( A1BG = c(5.620562952, 7.591106401, 8.348814005, 7.399435165, 7.494443613, 7.005119237, 7.825150239, 9.84125156, 7.711686244, 8.019511781), A2LD1 = c(5.243981286, 6.148334212,7.334008637, 6.853456781, 7.026735889, 5.723555831, 7.032773092, 5.538007298, 6.077351966, 6.283886593), Class = c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0) )
内容的提问来源于stack exchange,提问作者Khawlah
相关产品推荐
相关产品推荐

