【问题标题】:Plot a graph with all row names and column names绘制包含所有行名和列名的图形
【发布时间】:2017-06-02 03:25:48
【问题描述】:

我有一个包含 5 个列名和 10 个行名的数据框。此数据帧中的值由 -1 到 1 和 NA 之间的数字组成。

                Comp.1 Comp.2 Comp.3 Comp.4    Comp.5
Param1              NA     NA     NA     NA        NA
Param2              NA     NA     NA     NA 0.9035769
Param3       0.9810636     NA     NA     NA        NA
Param4              NA     NA     NA     NA        NA
Param5              NA     NA     NA     NA        NA
...
Param10              NA     NA     NA     NA        NA

我想绘制一个图表,其中所有行的行名位于 Y 轴,列的列名位于 X 轴。此外,值表示某种颜色的点,这种颜色的深浅决定了值更接近 1 或 -1。 NA 可以是叉号,也可以忽略。

提前致谢!

【问题讨论】:

    标签: r plot


    【解决方案1】:

    我想我不完全确定您在寻找什么,但我想这样做的一种方法是:

    library(reshape2)
    df$row.names<-rownames(df)
    long.df<-melt(df,id=c("row.names"))
    plotted<-ggplot(long.df,aes(x=row.names,y=variable,color=value))+geom_point()
    

    注意:如果您有多个行和列值组合,那么这将导致过度绘图。这可以由geom_jitter() 或facet_wrap() / facet_grid() 处理

    注意 2 :: 如果您希望根据 Yang Li 的回答获得更多热图输出并且没有重叠数据,您可以使用 geom_tiles() 或 geom_raster() 代替 geom_point()

    【讨论】:

    • 非常感谢!这对我有用。将代码修改为此,因为我有很多 NA。 df1$row.names&lt;-rownames(df1) long.df1&lt;-melt(df1,id=c("row.names"), na.rm = TRUE) plotted&lt;-ggplot(long.df1,aes(x=variable,y=row.names,color=value, size = 2) )+geom_point() print(plotted)
    • 另一个问题,我有很多这样的数据框(列相同但行数可能不同),因此会生成许多这样的图。我应该如何将它们组合成一个情节?
    • 您应该能够将数据集rbind() 放在一起。如果列相同,则长度无关紧要。
    • 另外,如果这个答案对你有用,你能接受吗?
    【解决方案2】:

    如果我理解正确,您基本上需要一张热图。在这种情况下,您的问题可能是duplicate,但我会根据您拥有的特定数据框向您展示一些制作热图的方法。

    假设这是您的数据,为简单起见,我将减少行数和列数:

    df <- data.frame(Comp.1 = c(0.3, -0.2, -1, NA, 1),
                 Comp.2 = c(-0.4, -0.1, NA, 0, 0.6),
                 Comp.3 = c(0.2, NA, -0.4, 0.3, NA))
    row.names(df) <- c("Param1", "Param2", "Param3", "Param4", "Param5")
    

    基础 R

    首先,转换为矩阵:

    df_matrix <- data.matrix(df)
    

    接下来,你可以像这样使用heatmap()函数:

    heatmap(df_matrix, Rowv=NA, Colv=NA, col = cm.colors(256), scale="column", margins=c(5,10))
    

                                                    

    您可以使用col 参数更改您使用的颜色。还有其他内置的调色板,如rainbow()、heat.colors()、topo.colors(),但看起来仍然不是那么好,所以你应该尝试其他包,例如...

    剧情包

    安装plotly 包,然后使用此代码:

    library(plotly)
    
    plot_ly(
        x = names(df), y = row.names(df),
        z = df_matrix, type = "heatmap"
    )
    

                                                

    而且,如果您想自定义颜色,只需添加 colors = &lt;Insert your color range here&gt; 作为额外参数。此热图也是交互式的。

    【讨论】:

      猜你喜欢
      • 2015-01-10
      • 1970-01-01
      • 2021-10-21
      • 1970-01-01
      • 2013-04-24
      • 1970-01-01
      • 2021-09-07
      • 1970-01-01
      • 2022-09-28
      相关资源
      最近更新 更多