在UpSetR中使用调色板来标记矩阵点。

8

我已经构建了一个失落图。我使用一组颜色定义条形颜色。是否有办法对连接点的矩阵也这样做?

library(dplyr)
library(RColorBrewer)
library(UpSetR)

movies <- read.csv(system.file("extdata", "movies.csv",
                   package = "UpSetR"), header=T, sep=";" )
movies <- select(movies, Action:Children)

upset(movies, main.bar.color=brewer.pal(2^ncol(movies)-1, "Set1"))

enter image description here

尝试将调色板应用于矩阵时,我收到了警告,只有第一个颜色——红色被使用。
upset(movies, main.bar.color=brewer.pal(2^ncol(movies)-1, "Set1"),
      matrix.color=brewer.pal(2^ncol(movies)-1, "Set1"))

enter image description here

1个回答

5

upset 只允许为 matrix.color 指定一种颜色。
解决方案是修改 UpSetR:::Create_layout 函数:

Create_layout <- function (setup, mat_color, mat_col, matrix_dot_alpha) 
{
    Matrix_layout <- expand.grid(y = seq(nrow(setup)), x = seq(ncol(setup)))
    Matrix_layout <- data.frame(Matrix_layout, value = as.vector(setup))
    for (i in 1:nrow(Matrix_layout)) {
        if (Matrix_layout$value[i] > as.integer(0)) {
            # Here I propose to change Matrix_layout$color[i] <- mat_color with
            # Matrix_layout$color[i] <- mat_color[i]
            Matrix_layout$color[i] <- mat_color[i]
            Matrix_layout$alpha[i] <- 1
            Matrix_layout$Intersection[i] <- paste(Matrix_layout$x[i], 
                "yes", sep = "")
        }
        else {
            Matrix_layout$color[i] <- "gray83"
            Matrix_layout$alpha[i] <- matrix_dot_alpha
            Matrix_layout$Intersection[i] <- paste(i, "No", sep = "")
        }
    }
    if (is.null(mat_col) == F) {
        for (i in 1:nrow(mat_col)) {
            mat_x <- mat_col$x[i]
            mat_color <- as.character(mat_col$color[i])
            for (i in 1:nrow(Matrix_layout)) {
                if ((Matrix_layout$x[i] == mat_x) && (Matrix_layout$value[i] != 
                  0)) {
                  Matrix_layout$color[i] <- mat_color
                }
            }
        }
    }
    return(Matrix_layout)
}

# Replace Create_layout in UpSetR with the modified function
assignInNamespace(x="Create_layout", value=Create_layout, ns="UpSetR")

# Now you can set colors for the matrix of connected dots
# The dimension of this matrix is 3 x 7
upset(movies, main.bar.color=brewer.pal(2^ncol(movies)-1, "Set1"),
      matrix.color=rainbow(21))

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接