R 不同颜色的颜色波动

R 不同颜色的颜色波动,r,ggplot2,R,Ggplot2,我用GG绘制了一个缺失值的相关矩阵。矩阵范围为-1到+1。这些值由红方块大小表示,因此缺少的值为纯灰色 我想知道是否有一种方法可以将负值涂成不同的颜色,比如蓝色 这是我使用的代码 data = as.matrix(tt) data[data == 100] = NA cc <- matrix(data, nr=nrow(data)) ggfluctuation(as.table(cc)) + opts(legend.position="none") + ggfluctuation(cc

我用GG绘制了一个缺失值的相关矩阵。矩阵范围为-1到+1。这些值由红方块大小表示,因此缺少的值为纯灰色

我想知道是否有一种方法可以将负值涂成不同的颜色,比如蓝色

这是我使用的代码

data = as.matrix(tt)
data[data == 100] = NA
cc <- matrix(data, nr=nrow(data))
ggfluctuation(as.table(cc)) + opts(legend.position="none") + 

ggfluctuation(cc, type = "size", floor = 0, ceiling = max(table$freq, na.rm = TRUE))
labs(x="", y="") +
opts(axis.text.x=theme_text(size=4)) +
opts(axis.text.y=theme_text(size=4)) +
scale_x_discrete(labels=rownames(data)) +
scale_y_discrete(labels=rownames(data)) +
theme(axis.text.x = element_text(angle = 90, hjust = 1)) +
scale_fill_discrete(breaks=c("trt1","ctrl","trt2"))
ggsave("cmap2sorted.pdf", width=25, height=25)

仅供参考,在您的问题中包含实际数据是个好主意。我制作了一个虚拟的4x4矩阵来演示

我不知道有什么简单的方法可以在不修改gginvalization函数的情况下更改填充,因为它需要一个表,并将其修改为所需的data.frame结构。您可以修改GG波动图,以包含基于数字是正还是负的因子。我已经从GGInvolution2获取了代码来制作GGInvolution2。我已经评论了更改的位置:

ggfluctuation2 <- function (table, type = "size", floor = 0, ceiling = max(table$freq, 
                                                                          na.rm = TRUE)) 
{
  gg_dep("0.9.1", "ggfluctuation is deprecated.")
  if (is.table(table)) 
    table <- as.data.frame(t(table))
  oldnames <- names(table)
  names(table) <- c("x", "y", "result")
  table <- transform(table, x = as.factor(x), y = as.factor(y), 
                     freq = result)
  if (type == "size") {
    table <- transform(table, freq = sqrt(pmin(freq, ceiling)/ceiling), 
                       border = ifelse(is.na(freq), "grey90", ifelse(freq > 
                                                                       ceiling, "grey30", "grey50")),
                       ##Adding a fill factor based on negative or positive
                       fill = ifelse(result < 0, "negative", "positive"))
    table[is.na(table$freq), "freq"] <- 1
    table <- subset(table, freq * ceiling >= floor)
  }
  if (type == "size") {
    nx <- length(levels(table$x))
    ny <- length(levels(table$y))
    p <- ggplot(table, aes_string(x = "x", y = "y", height = "freq", 
                                  width = "freq", 
                                  ##Change fill from 'border' to 'fill'
                                  fill = "fill")) + geom_tile(colour = "white") + 
      ##Remove scale_fill_identity()
      theme(aspect.ratio = ny/nx)
  }
  else {
    p <- ggplot(table, aes_string(x = "x", y = "y", fill = "freq")) + 
      geom_tile(colour = "grey50") + scale_fill_gradient2(low = "white", 
                                                          high = "darkgreen")
  }
  p$xlabel <- oldnames[1]
  p$ylabel <- oldnames[2]
  p
}

您应该能够从这里了解如何进行任何其他更改,以供参考,在您的问题中包含实际数据是一个好主意。我制作了一个虚拟的4x4矩阵来演示

我不知道有什么简单的方法可以在不修改gginvalization函数的情况下更改填充,因为它需要一个表,并将其修改为所需的data.frame结构。您可以修改GG波动图,以包含基于数字是正还是负的因子。我已经从GGInvolution2获取了代码来制作GGInvolution2。我已经评论了更改的位置:

ggfluctuation2 <- function (table, type = "size", floor = 0, ceiling = max(table$freq, 
                                                                          na.rm = TRUE)) 
{
  gg_dep("0.9.1", "ggfluctuation is deprecated.")
  if (is.table(table)) 
    table <- as.data.frame(t(table))
  oldnames <- names(table)
  names(table) <- c("x", "y", "result")
  table <- transform(table, x = as.factor(x), y = as.factor(y), 
                     freq = result)
  if (type == "size") {
    table <- transform(table, freq = sqrt(pmin(freq, ceiling)/ceiling), 
                       border = ifelse(is.na(freq), "grey90", ifelse(freq > 
                                                                       ceiling, "grey30", "grey50")),
                       ##Adding a fill factor based on negative or positive
                       fill = ifelse(result < 0, "negative", "positive"))
    table[is.na(table$freq), "freq"] <- 1
    table <- subset(table, freq * ceiling >= floor)
  }
  if (type == "size") {
    nx <- length(levels(table$x))
    ny <- length(levels(table$y))
    p <- ggplot(table, aes_string(x = "x", y = "y", height = "freq", 
                                  width = "freq", 
                                  ##Change fill from 'border' to 'fill'
                                  fill = "fill")) + geom_tile(colour = "white") + 
      ##Remove scale_fill_identity()
      theme(aspect.ratio = ny/nx)
  }
  else {
    p <- ggplot(table, aes_string(x = "x", y = "y", fill = "freq")) + 
      geom_tile(colour = "grey50") + scale_fill_gradient2(low = "white", 
                                                          high = "darkgreen")
  }
  p$xlabel <- oldnames[1]
  p$ylabel <- oldnames[2]
  p
}
您应该能够了解如何从此处进行任何其他更改

一旦美学填充被映射,默认情况下它将生成图例。它们是这样标记的,因为我专门将它们命名为:fill=ifelseresult<0,负,正。一旦美学填充被映射,它将默认生成图例。它们是这样标记的,因为我专门将它们命名为:fill=ifelseresult<0,负值,正值。