You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言使用SIBER包绘制椭圆图时散点颜色不显示问题求助

R语言SIBER包散点无填充色问题解决方案

核心原因

  1. 分组索引失效:你读入的group列为字符类型(如"Passo de Torres"),无法作为数字下标匹配颜色向量,导致points函数的bg参数取值为空,散点无填充色。
  2. Mac图形设备兼容问题:新版R for Mac默认的Quartz图形设备对基础绘图系统的填充色支持存在兼容问题,同时也会导致ggplot2渲染异常。
  3. 全局调色板设置方式错误:你将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 17:39:03