R语言使用SIBER包绘制椭圆图时散点颜色不显示问题求助
R语言SIBER包散点无填充色问题解决方案
核心原因
- 分组索引失效:你读入的
group列为字符类型(如"Passo de Torres"),无法作为数字下标匹配颜色向量,导致points函数的bg参数取值为空,散点无填充色。 - Mac图形设备兼容问题:新版R for Mac默认的Quartz图形设备对基础绘图系统的填充色支持存在兼容问题,同时也会导致ggplot2渲染异常。
- 全局调色板设置方式错误:你将
palette()直接写进community.hulls.args列表内,会立即修改全局绘图参数,可能和后续填充色设置冲突。
具体修复步骤
第一步:处理分组索引
读入数据后先将group列转为有序因子,匹配你图例的分组顺序,再转为数字索引:
dados <- read.csv(file="siber_local_temporada_names.csv", sep=";" , header=T) # 按图例顺序设置因子水平,保证索引和颜色一一对应 dados$group <- factor(dados$group, levels = c("Itapeva", "Lagoa do Peixe", "Passo de Torres", "Praia das Cabras", "Praia Grande")) group_idx <- as.integer(dados$group)
第二步:修改散点绘制代码
主动指定散点边框色,用转换后的数字索引匹配颜色:
points(dados$iso1,dados$iso2, pch=21, col = "black", # 加边框避免散点和背景融合 bg=c("darkred","darkblue", "darkgreen", "black", "grey")[group_idx], cex= 1.2)
第三步:修复Mac图形设备兼容问题
绘图前运行以下代码切换为Cairo图形设备,同时解决基础绘图和ggplot2的颜色异常问题:
options(bitmapType = "cairo") # 若仍有异常,可在启动绘图时主动指定设备 x11(type = "cairo")
验证测试
你可以先运行以下测试代码判断是否为设备问题:
plot(1:5, 1:5, pch=21, bg=c("red","blue","green","black","grey"), cex=2)
如果测试图的散点也没有填充色,运行第三步的设备配置代码后再重新测试即可。
修改后完整可运行代码
library(rjags) library(coda) library(sp) library(splancs) library(ggplot2) library(SIBER) rm(list=ls()) graphics.off() set.seed(1) # 修复Mac设备兼容 options(bitmapType = "cairo") # 读入数据并处理分组 dados <- read.csv(file="siber_local_temporada_names.csv", sep=";" , header=T) dados$group <- factor(dados$group, levels = c("Itapeva", "Lagoa do Peixe", "Passo de Torres", "Praia das Cabras", "Praia Grande")) group_idx <- as.integer(dados$group) siberobject <- createSiberObject(dados) # 单独设置调色板,不要放在参数列表内 palette(c("red","blue", "green", "black", "grey")) community.hulls.args <- list(lty = 1, lwd = 1) group.ellipses.args <- list(n = 10000, p.interval = 0.95, lty = 1, lwd = 4) # 绘制基础图 plot(dados$iso1,dados$iso2, xlab=expression({delta}^13*C~'‰'), ylab=expression({delta}^15*N~'‰'), xlim=c(-18,-11),ylim=c(7,16), xaxt="n", yaxt="n") axis(1, at = seq(-18, -11, by = 2), las=2) axis(2, at = seq(7, 16, by = 2), las=2) # 绘制带填充色的散点 points(dados$iso1,dados$iso2, pch=21, col = "black", bg=c("darkred","darkblue", "darkgreen", "black", "grey")[group_idx], cex= 1.2) # 绘制图例 legend("bottomright", c("Itapeva", "Lagoa do Peixe", "Passo de Torres", "Praia das Cabras", "Praia Grande"), fill=c("red","blue", "green", "black", "grey"), lty=0, bty="n") # 绘制椭圆 plotGroupEllipses(siberobject, n = 10000, p.interval = 0.95, lty = 1, lwd = 2)
内容的提问来源于stack exchange,提问作者Lais Gliesch Silva
相关产品推荐
相关产品推荐

