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

二分图交互颜色与数值不匹配问题求助(plotweb)

R语言plotweb绘制二分图颜色异常问题排查

我使用R语言的plotweb函数绘制二分图时,希望将交互值≥1000的元素设为半透明黄色(adjustcolor("#E6AB02", alpha.f=0.5)),<1000的设为半透明灰色(adjustcolor("grey80", alpha.f=0.5)),但实际输出图像颜色不符合预期:大交互值对应的粗条未显示黄色,小值细条也未显示灰色。

问题代码

plotweb(data.mat,
        method="normal",
        text.rot = 90,
        labsize = 1,
        y.width.low = 0.05,
        col.high = "#66A61E",
        #col.interaction = "#E6AB02",
        col.low = "#E7298A",
        bor.col.interaction =  NA,
        arrow="none",
        empty=TRUE,
        plot.axes=FALSE,
        ybig=1,
        col.interaction = (ifelse(data.mat[,] < 1000,
                                  adjustcolor("grey80", alpha.f=0.5),
                                  adjustcolor("#E6AB02", alpha.f = 0.5))))

数据集

> dput(data.mat)
structure(c(7336L, 1640L, 26293L, 111533L, 71255L, 161705L, 104046L, 
169975L, 395822L, 153999L, 6780L, 10866L, 131162L, 239110L, 130786L, 
88922L, 46725L, 99169L, 109625L, 203947L, 2258L, 550L, 47109L, 
1813L, 362753L, 14451L, 17025L, 30251L, 308L, 34412L, 11L, 0L, 
56988L, 1360L, 4L, 5L, 107L, 31L, 56L, 868L, 31775L, 31L, 327L, 
19L, 180L, 4284L, 77L, 27L, 0L, 854L, 5L, 143L, 4622L, 264L, 
7945L, 51L, 14545L, 32L, 8L, 126L, 66L, 0L, 6L, 14130L, 5L, 9L, 
165L, 1017L, 5L, 115L, 65L, 5L, 9572L, 77L, 820L, 165L, 521L, 
788L, 17L, 538L), dim = c(10L, 8L), dimnames = list(c("Arctium lappa", 
"Cichorium intybus", "Circium arvense", "Circium vulgare", "Hypericum perforatum", 
"Leucanthemum vulgare", "Plantago lanceolata", "Trifolium pratense", 
"Trifolium repens", "Tripleurospermum inodorum"), c("Cladosporium", 
"Alternaria", "Aureobasidium", "X....1", "Golovinomyces", "Podosphaera", 
"Ampelomyces", "X....2")))

异常输出

图像中二分图的交互条颜色未按预期区分:大交互值对应的粗条未显示设定的半透明黄色,小值对应的细条也未显示半透明灰色。

问题原因

ifelse函数无法正确处理adjustcolor返回的颜色向量。adjustcolor会返回包含RGBA信息的向量(长度为4),而ifelse会将整个向量视为单个元素进行判断,最终仅返回一个颜色值,导致所有交互条都使用同一种颜色,无法实现按值区分。

修正方案

先创建一个与数据集维度完全匹配的颜色矩阵,根据交互值逐个赋值对应颜色,再传入col.interaction参数:

修正后代码

# 先创建颜色矩阵,初始全部设为半透明灰色
color_mat <- matrix(adjustcolor("grey80", alpha.f=0.5), 
                    nrow = nrow(data.mat), 
                    ncol = ncol(data.mat))

# 将交互值≥1000的位置替换为半透明黄色
color_mat[data.mat >= 1000] <- adjustcolor("#E6AB02", alpha.f = 0.5)

# 绘制二分图
plotweb(data.mat,
        method="normal",
        text.rot = 90,
        labsize = 1,
        y.width.low = 0.05,
        col.high = "#66A61E",
        col.low = "#E7298A",
        bor.col.interaction = NA,
        arrow="none",
        empty=TRUE,
        plot.axes=FALSE,
        ybig=1,
        col.interaction = color_mat)

内容的提问来源于stack exchange,提问作者Katherine Chau

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 10:55:20