如何调整base R散点图的图例形状并匹配散点颜色
修正后可直接运行的代码
cols = c("deepskyblue", "magenta", "gray50") # 将 cyl 转为因子,保证分组和颜色一一对应 cyl_group <- as.factor(mtcars$cyl) plot(mpg ~ wt, xlab = "Weight (1000lbs)", ylab = "Miles / gallon", col = cols[cyl_group], pch = 19, data = mtcars) legend(x = "topright", title = "Number of cylinders", horiz = TRUE, legend = levels(cyl_group), bty = 'n', cex = 0.7, pch = 19, # 替换fill参数,指定和绘图一致的点样式 col = cols) # 指定和绘图一致的颜色向量
问题逐一解答
如何将图例中的正方形转换为圆点?
你原来的代码里用了fill参数,这个参数是用来绘制填充色块(正方形)的,只需要删除fill参数,新增pch = 19,和你plot函数里设置的点样式保持一致,就能生成圆点图例。如何让图例颜色与散点颜色完全一致?
你之前的代码中plot的col = cyl逻辑是:R会把cyl作为数值索引,调用系统默认调色板的颜色,和你自定义的cols向量没有关联,所以颜色对应不上。修正方案是把cyl转为因子后,用cols[cyl_group]的方式给每个分组明确指定你定义的颜色,同时legend里传入相同的cols作为col参数值即可。如何确认图例的格式设置逻辑?
base R的图例参数和绘图参数是完全一一对应的:- 绘制点图时,
legend传入和plot一致的pch(点类型)、col(点颜色)参数 - 绘制填充类图形(柱状图、箱线图填充等)时,才用
fill参数指定填充色 - 绘制折线图时,传入和绘图一致的
lty(线型)、lwd(线宽)、col(线颜色)参数
只要保持图例参数和绘图参数完全对齐,就能保证图例样式和图中元素一致。
- 绘制点图时,
更合理的颜色方案实现
你自定义纯色向量的方式是可行的,如果需要更专业、可读性更强的配色,可以用成熟的内置调色板:
- 色盲友好的viridis调色板:
library(viridis) cols <- viridis(3, option = "D") # 3对应分组数量,可调整option参数换配色风格
- 经典的RColorBrewer定性调色板:
library(RColorBrewer) cols <- brewer.pal(3, "Set2") # 3对应分组数量,Set2可替换为其他定性调色板名称
另外建议将分组变量转为因子,自动生成legend标签,不需要手动填写c("4","6","8"),避免写错分组值。
内容的提问来源于stack exchange,提问作者Wutruvic
相关产品推荐
相关产品推荐

