【问题标题】:Plot matrix with custom labels R使用自定义标签绘制矩阵 R
【发布时间】:2014-01-06 23:45:55
【问题描述】:

我必须使用 R 制作一个情节,但不知道该怎么做。 想象一下:

sample_names = c("a","b","d","e","f","g","h","i","l","m")
M = cbind(seq(0,1,length.out=10), c(1,1,1,1,2,2,2,3,3,3))

M 是一个 2 列矩阵,其中第一列是连续测量值, 第二列是与测量相关的标签(例如,1 代表“低”,2 代表“中”,3 代表“高”)。

我想要创建的基本上是一个垂直颜色条,左侧和右侧都有标签。颜色应代表连续测量的值。 左边的标签是样本名称,右边的​​标签是对应的 数据的“低”、“中”、“高”标签。

可能我希望颜色范围从绿色 (0) 到红色 (1),深色约为 0.5。

如何使用 R 绘制这样的图表?

【问题讨论】:

  • 看看:filled.contour(z=matrix(1:10,10,2), nlevels=10),然后看看filled.contour用来绘制它的key的代码。

标签: r labels colorbar


【解决方案1】:

这是使用ggplot2的解决方案:

levels <- c('low','med','high')
df <- data.frame(
    sample = c("a","b","d","e","f","g","h","i","l","m"),
    value = seq(0,1,length.out=10),
    level = factor(levels[c(1,1,1,1,2,2,2,3,3,3)], level=rev(levels))
)    

# require(ggplot2)
# require(grid)
ggplot(data=df, aes(x=TRUE, y=sample, fill=value)) + geom_tile() +
scale_fill_gradientn(colours=c('green','black','red')) + 
facet_grid(level~., scales='free', space='free') +
scale_y_discrete(expand=c(0,0)) +
theme(panel.margin=unit(0.1,'mm'), axis.title=element_blank(), 
      axis.text.x=element_blank(), axis.ticks.x=element_blank(), 
      legend.title=element_blank())

【讨论】:

  • @LucaCerone,不客气。请注意,在您的示例中,样本的字母顺序对应于增加的数值。这在实际情况下不太可能,在这种情况下,ggplot2 会将样本视为因子并按字母顺序显示。为避免这种情况,最好先根据观察值对样本进行排名,然后使用df$sample &lt;- factor(df$sample, level=df$sample) 将它们在数据框中的顺序保留下来。在 R 中,因子水平始终按字母顺序排列,除非通过 level 参数以不同方式指定。
  • 我正好遇到了这个问题 :) 非常感谢您的友好解释!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-22
  • 2017-09-16
  • 2022-01-28
  • 2023-03-02
相关资源
最近更新 更多