【问题标题】:Coloring Cells of a Data.Frame RData.Frame R 的着色单元格
【发布时间】:2014-06-11 22:00:10
【问题描述】:

我有这个数据框(如下所示),我有兴趣绘制一个带有彩色单元格的表格

sample<- data.frame(c("k","k","k","k"), c("s","t","s","s"), c("t","n","t","t"), 
                   c("c","c","t","c"), c("n","c","c","c"))
rownames(sample)<- c("g1", "g2", "g3", "g4")
colnames(sample)<- c(10, 13, 20, 21, 25)    

我在这里找到了一些以前回答过的问题(例如:Conditional coloring of cells in table)并尝试了那里给出的建议。以下是我运行的代码示例:

#run ggplot2 suggestion by Drew Steen
sample$gene<- row.names(sample)
dfm<- melt(sample, id.vars="gene")
p <- ggplot(dfm, aes(x=variable, y=gene, label=value, fill=as.factor(value))) + 
  geom_text(colour="black") +
  geom_tile(alpha=0.5)
p    

但是,这并不是我正在寻找的配色方案。我需要该图遵循下面描述的另一个数据框提供的指南:

data<- data.frame(c("K", "s", "t", "c", "c"), c(10, 13, 20, 21, 25))
colnames(data)<- c("type", "position")    

因此,例如,在sample$"13" 中,我需要所有“s”显示为一种颜色,而所有其他非“s”的值显示为另一种颜色。我需要根据data 提供的指南对sample 的所有列执行此操作。

【问题讨论】:

    标签: r graph plot ggplot2 dataframe


    【解决方案1】:

    dfm 添加一个新列如何指示特定变量/值组合是否在数据中?

    dfm$ismatch<-ifelse(
        with(dfm,interaction(variable, value)) %in% 
          with(data, interaction(position,type)),
        "match","nomatch")
    

    然后我们可以根据这个值来着色

    ggplot(dfm, aes(x=variable, y=gene, label=value, fill=ismatch)) + 
        geom_text(colour="black") +
        geom_tile(alpha=0.5)
    

    这给了

    【讨论】:

    • 抱歉,分析数据后,似乎 k10 给出了“不匹配”,即使它是匹配的......有没有办法解决这个错误?
    • 忽略之前的评论,data 中的“K”是大写的
    猜你喜欢
    • 1970-01-01
    • 2013-01-09
    • 2011-08-19
    • 2016-05-08
    • 1970-01-01
    • 2011-08-17
    • 2013-03-14
    • 2016-05-05
    相关资源
    最近更新 更多