2016-08-12 73 views
0

这是在我的数据如何使不同颜色的热图

df<- structure(list(name = structure(c(2L, 12L, 1L, 16L, 14L, 10L, 
9L, 5L, 15L, 4L, 8L, 13L, 7L, 6L, 3L, 11L), .Label = c("All", 
"Bab", "boro", "bra", "charli", "delta", "few", "hora", "Howe", 
"ist", "kind", "Kiss", "myr", "No", "TT", "where"), class = "factor"), 
    value = c(1.251, -1.018, -1.074, -1.137, 1.018, 1.293, 1.022, 
    -1.008, 1.022, 1.252, -1.005, 1.694, -1.068, 1.396, 1.646, 
    1.016)), .Names = c("name", "value"), class = "data.frame", row.names = c(NA, 
-16L)) 

我想有非常明确的遮阳分离。 如果我想和特定颜色的热图,我不喜欢这个

ggplot(df, aes(x = 1,y = name, fill = value)) + 
    geom_tile() + 
    ylab("") + 
    scale_fill_gradient(low='red', high='blue') 

它使红色到蓝色。我想要的是使前7行例如红色到蓝色和其余粉红色到黑色。

这可能吗?

+0

对我来说不是很明显怎么做到这一点。一个黑客可能会设置alpha,并使用geom_rect来给出不同的背景颜色 –

+0

“前7行”,你的意思是前7行“df”或剧情的前7行,或者底部7行?一个想法是有2个地块,然后使用“栅格”进行布局。 –

+0

@Weihuang Wong排名前7位的情节 – nik

回答

1

ggplot通常会鼓励每个数据序列具有一个标度,但是如果您真的想为不同的值的不同子集设置不同的标度,可以采用以下方法之一。

你说你想为前7行不同的比例。再次强调,将演示文稿与数据的位置绑定并不是一个好习惯,但假设我们创建了一个“组”列。由于我们将使用它来“欺骗”热图中的值,因此这一列很重要。这样分开分发一组组值将是一件好事:

library(dplyr) 
df <- arrange(df, name) %>% 
    mutate(group = c(rep(-3, 7), rep(3, 9))) 

fill美学就变成value - group,我们用scale_fill_gradientn指定颜色:

ggplot(df, aes(x = 1,y = name, fill = value - group)) + 
    geom_tile() + 
    ylab("") + 
    scale_fill_gradientn(colours = c('black', 'pink', 'red', 'blue')) 

,让你这样的情节: enter image description here

+0

谢谢,给我一些时间,我会检查出来,如果它给了我答案,我会definelty接受它 – nik