【问题标题】:How to put values to R Matrix cells?如何将值放入 R 矩阵单元格?
【发布时间】:2016-11-01 05:55:40
【问题描述】:

我想将数值 ages 放入矩阵单元格中,而现在,我将它们放在 x-ais 上

library("ggplot2")
library("reshape2")
mydata <- mtcars[, c(1,3,4,5,6,7)]
cormat <- round(cor(mydata),2)
melted_cormat <- melt(cormat)
ids = c(1, 2, 3, 4, 5,6)
ages = c(11, 22, 33, 44, 55,66)
ggplot(data = melted_cormat, aes(x=Var1, y=Var2, fill=value)) +
        scale_x_discrete(labels = ids ) +
        scale_y_discrete(labels = ids)

当前输出:

我的想法

使用geom_text,但在最后一次缩放后不成功

  + geom_text(aes(label = ages), size = 3)

各种尝试都出错

Error: Aesthetics must be either length 1 or the same as the data (4): label, x, y, fill

在评论中测试 rawr 的提案

+ geom_text(label = interaction(rep(ages, length(ages)), sep = ', '), size = 3)

使用真实数据的输出,您会看到它对所有列重复第一个单元格 ID 的年龄;也许,在对角线上包含第一个年龄就足够了,否则我们需要每个单元格两个年龄,这使得矩阵看起来很拥挤

尝试根据实际情况调整 wiki 答案

我无法将 wiki 答案及其 ifelse 调整为以下 geom-text 工作的真实案例

    geom_text(label = interaction(rep(ages, length(ages)), sep = ', ')) +

操作系统:Debian 8.5
R:3.1.1

【问题讨论】:

  • 函数需要返回值...子集用于交互使用,即不在函数内部...
  • 改用geom_text(label = interaction(rep(ids, length(ages)), ages, sep = ', '), size = 3)。你有 36 个数据点,你需要 36 个标签
  • 这是一个相关矩阵吗?或者如果对角线值被定义为 1(或 0),那么它们都将具有基于 value 的统一颜色
  • 所以只有对角线标记? ggplot(data = melted_cormat, aes(x=Var1, y=Var2, fill=value)) + geom_tile() + geom_text(label = ifelse(melted_cormat$Var1 == melted_cormat$Var2, ages, '')) 使用您想要的标签创建一个列并使用 geom_text(label = column_with_labels) 可能会更简单
  • 为什么interaction需要调整?添加一列以确保您需要的标签排列整齐 melted_cormat$label &lt;- with(melted_cormat, ifelse(Var1 == Var2, ages, '')) 并使用 geom_text(labels = melted_cormat$label)

标签: r


【解决方案1】:

改为这样做(将标签添加到数据对象,然后使用geom_tile,然后使用geom_text

gg <- ggplot(data = cbind(melted_cormat,ids, ages), 
             aes(x=Var1, y=Var2, fill=value)) +
        scale_x_discrete(labels = ids ) +
        scale_y_discrete(labels = ids)
 gg + geom_raster( aes(fill=value)) +
      geom_text(  aes(x=Var1, y=Var2, label = ages), color="red", size=3)

这会将所需的数据带入命名环境中,gg 函数将能够看到这些命名列。 geom_raster 函数构建一个单元格网格,可以向其中添加颜色或文本等属性(“美学”)。默认情况下,它模仿基本图形函数image,所有热图类型的函数都通过使用“填充”美学范围构造的色标进行着色来派生。

输出

【讨论】:

  • 这段代码是我正在为集成工作paste.ubuntu.com/23412503 我正在考虑如何在那里集成geom_raster。有多大必要?
  • 现在我们回到您没有描述“矩阵”对象(也没有加载所需的包)的问题,我们不知道我们正在处理什么。我当然不是修复深深嵌入 hadleyverse-dependencies 中的错误代码的人。
  • 是的,我明白了。你能描述一下geom_raster的用法吗?我想更好地理解,所以也许,我可以更好地理解如何为目标功能开发它和/或简化它。
  • 您的可视化显示我在所有方面都存在设计错误。每个单元格具有对应于两个 ID 的两个年龄。这个设计可以扩展吗? - - 这样的重复值在对角线中最能说明一次,因为对角线值在其他情况下是无用的。
  • 我们似乎使用不同的英语语言。您可能需要提出一个单独的问题,并说明您需要什么。
【解决方案2】:

Rawr 在评论中对对角线可视化的回答

library("ggplot2")
library("reshape2")
mydata <- mtcars[, c(1,3,4,5,6,7)]
cormat <- round(cor(mydata),2)
melted_cormat <- melt(cormat)
ids = c(1, 2, 3, 4, 5,6)
ages = c(11, 22, 33, 44, 55,66)

ggplot(data = melted_cormat, aes(x=Var1, y=Var2, fill=value)) + 
     geom_tile() + 
     geom_text(label = ifelse(melted_cormat$Var1 == melted_cormat$Var2, ages, ''))

输出

我无法将 wiki 答案及其 ifelse 调整为以下 geom-text 有效的真实案例

    geom_text(label = interaction(rep(ages, length(ages)), sep = ', ')) +

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-08
    相关资源
    最近更新 更多