ggplot2热图,带条件的色标

时间:2014-12-11 13:18:42

标签: r graph scale heatmap

我需要更改R中ggplot的比例颜色。 我的表是:

tt<-data.frame(C1=c(0.4,.5,.5, 0, .8,.8),C2=c(.5,.6,.7, 0, .7,.8), C3=c(.8,.7,.9, 0, .8,.7), 
  C4=c(rep(0,6)), C5=c(0.4,.6,.6, 0, .8,.8),C6=c(0.8,.7,.5, 0, .8,.8), C7=c(0.8,.6,.4, 0, .8,.8))

row.names(tt)<-paste("F", 1:6, sep='')
tt<-as.matrix(tt)

然后我做了重塑:

library(ggplot2)
library(reshape2)
tt_melt <- melt(tt)
tt_melt
colnames(tt_melt)<-c('fila', 'columna', 'performance')

我的图表是呼叫中心的表示以及与每个职位相关的指标:

ggplot(data=tt_melt,
       aes(x=columna, y=fila, fill=performance)) + geom_tile() + 
  geom_text(aes(label=performance), color='white') 
+ theme_minimal(base_size = 12, base_family = "")+
labs(title = 'Performance por posicion en el call')+
  scale_colour_manual(values = c("red","yellow", "green"))
scale_fill_gradient(low = "yellow",  high = "darkgreen")

enter image description here

但它并没有达到规模。我需要得到白色的0(因为这意味着那个空间里没有人),其余的从红色到绿色。所以它不是一个真正连续的规模(但应该是从红色到绿色的连续)。 如何让ggplot取得规模?另外,如何创建一个具有超过值的条件的比例?最后,如果有更好的方法,我会很高兴听到它。非常感谢。

2 个答案:

答案 0 :(得分:4)

我希望代码格式化是SO粘贴的工件。我更喜欢更结构化的ggplot构建。

如果生成离散中断,则可以拥有更多控制权:

library(ggplot2)
library(reshape2) 

tt <- data.frame(C1=c(0.4,.5,.5, 0, .8,.8),
                 C2=c(.5,.6,.7, 0, .7,.8), 
                 C3=c(.8,.7,.9, 0, .8,.7), 
                 C4=c(rep(0,6)), 
                 C5=c(0.4,.6,.6, 0, .8,.8),
                 C6=c(0.8,.7,.5, 0, .8,.8), 
                 C7=c(0.8,.6,.4, 0, .8,.8))

row.names(tt) <- paste("F", 1:6, sep='')
tt <- as.matrix(tt)

tt_melt <- melt(tt) 
colnames(tt_melt) <- c('fila', 'columna', 'performance')

tt_melt$cut <- cut(tt_melt$performance, 
                   breaks=c(0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0),
                   labels=as.character(c(0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9)),
                   include.lowest=TRUE)

perf_cols <- c("white", colorRampPalette(c("red", "green"))( 9 ))
perf_text_cols <- c("black", rep("white", 9))

gg <- ggplot(data=tt_melt, aes(x=columna, y=fila, fill=cut))
gg <- gg + geom_tile()
gg <- gg + geom_text(aes(label=performance, color=cut)) 
gg <- gg + labs(title = 'Performance por posicion en el call')
gg <- gg + coord_equal()
gg <- gg + scale_colour_manual(values = perf_text_cols)
gg <- gg + scale_fill_manual(values=perf_cols)
gg <- gg + theme_minimal(base_size = 12, base_family = "")
gg <- gg + theme(legend.position="none")
gg

enter image description here

你应该撬起Color Brewer并改变斜坡。此方法还允许您确保文本在白色磁贴上可见。此外,coord_equal可以帮助您避免使用高度/宽度来获得偶数块。您还可以通过向color添加aes(非geom_tile)参数为图块添加边框。

要使0值保持白色(根据您的评论),只需使用非原始aes颜色:

gg <- ggplot(data=tt_melt, aes(x=columna, y=fila, fill=cut))
gg <- gg + geom_tile()
gg <- gg + geom_text(aes(label=performance), color="white") 
gg <- gg + labs(title = 'Performance por posicion en el call')
gg <- gg + coord_equal()
gg <- gg + scale_fill_manual(values=perf_cols)
gg <- gg + theme_minimal(base_size = 12, base_family = "")
gg <- gg + theme(legend.position="none")
gg

enter image description here

答案 1 :(得分:1)

尝试:

ggplot(data=tt_melt, aes(x=columna, y=fila, fill=performance))+
    geom_tile()+ 
    geom_text(aes(label=performance), color='white') +
    theme_minimal(base_size = 12, base_family = "")+
    labs(title = 'Performance por posicion en el call')+
    scale_colour_manual(values = c("red","yellow", "green"))+
    scale_fill_gradient(low = "yellow",  high = "darkgreen")

enter image description here

您的代码中只有输入错误。如果你想在ggplot代码中继续下一行,那么在行的末尾应该有一个“+”符号。