绘制具有不同颜色的离散值

时间:2015-09-29 11:53:18

标签: r plot ggplot2

给定具有离散值的数据帧

d=data.frame(id=1:6, a=c(1,1,1,0,0,0), b=c(0,0,0,1,1,1), c=c(10,20,30,30,10,20))

我想制作一个类似

的情节

enter image description here

但是我想为每一层制作不同的颜色,例如红色和绿色表示" a"黄色/蓝色表示" b"。

4 个答案:

答案 0 :(得分:1)

我们的想法是重塑您的数据(定义绘制矩形的坐标),以便使用geom_rect中的ggplot

library(ggplot2)
library(reshape2)

i = setNames(expand.grid(1:nrow(d),1:ncol(d[-1])),c('x1','y1'))

ggplot(cbind(i,melt(d, id.vars='id')), 
       aes(xmin=x1, xmax=x1+1, ymin=y1,  ymax=y1+1, color=variable, fill=value)) + 
       geom_rect()

enter image description here

答案 1 :(得分:0)

试试geom_tile()。但是你需要重塑你的数据以获得与你所呈现的完全相同的数字。

df  <- data.frame(id=factor(c(1:6)), a=c(1,1,1,0,0,0), b=c(0,0,0,1,1,1), c=c(10,20,30,30,10,20))
    library(reshape2)

    df <- melt(df, vars.id  = c(df$id))

       library(ggplot2)
        ggplot(aes(x = id, y = variable, fill = value), data = df) + geom_tile() 

enter image description here

答案 2 :(得分:0)

首先,我们使用reshape2将数据从wide变换为long。然后,为了获得离散值,我们使用as.factor(value),最后我们使用scale_fill_manual来分配我们需要的5种不同颜色。在geom_tile中,我们指定了图块边框的颜色。

library(reshape2)
library(ggplot2)
df <- data.frame(id=1:6, a=c(1,1,1,0,0,0), b=c(0,0,0,1,1,1), c=c(10,20,30,30,10,20))    
df <- melt(df, id.vars=c("id"))
ggplot(df, aes(id, variable, fill = as.factor(value))) + geom_tile(colour = "white") + 
  scale_fill_manual(values = c("lightblue", "steelblue2", "steelblue3", "steelblue4", "darkblue"), name = "Values")+
  scale_x_discrete(limits = 1:6)

enter image description here

答案 3 :(得分:0)

require("dplyr")
require("tidyr")
require("ggplot2")

d=data.frame(id=1:6, a=c(1,1,1,0,0,0), b=c(0,0,0,1,1,1), c=c(10,20,30,30,10,20))

ggplot(d %>% gather(type, value, a, b, c) %>% mutate(value = paste0(type, value)), 
       aes(x = id, y = type)) +
  geom_tile(aes(fill = value), color = "white") +
  scale_fill_manual(values = c("forestgreen", "indianred", "lightgoldenrod1", 
                               "royalblue", "plum1", "plum2", "plum3"))

enter image description here