R 不同颜色的颜色波动
我用GG绘制了一个缺失值的相关矩阵。矩阵范围为-1到+1。这些值由红方块大小表示,因此缺少的值为纯灰色 我想知道是否有一种方法可以将负值涂成不同的颜色,比如蓝色 这是我使用的代码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
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,负值,正值。