【问题标题】:Using ggplot to make a heatmap places tiles in incorrect order使用 ggplot 制作热图以不正确的顺序放置图块
【发布时间】:2021-03-02 21:51:55
【问题描述】:

这可能是由于一些愚蠢的错误造成的,但我已经能够对我最初的问题进行再现,因此希望有人可以提供帮助。

我的目标是创建相关图上三角形的热图,但是当将数据变长并将其绘制在 NA 值未在顶部创建漂亮三角形的地方时,会发生一些事情。

我已经尝试将变量转换为因子并手动设置轴中断,但无法解决问题。提前致谢!

代表代码:

fake.cor <- cor(iris[,1:4])
fake.cor[upper.tri(fake.cor)] <- NA
#get in long form
fake.cor.df <- data.frame(fake.cor,
                             var1 = row.names(fake.cor)) %>%
  reshape2::melt(variable.name = "var2" , value.name = "spearman") %>%
  mutate_at(vars(var1, var2), function(x) factor(x, levels = c("Petal.Length", "Petal.Width", "Sepal.Length", "Sepal.Width")))


ggplot(fake.cor.df, aes(x = var1, y = var2, fill = spearman)) +
  geom_tile() +
  scale_x_discrete(breaks = c("Petal.Length", "Petal.Width", "Sepal.Length", "Sepal.Width")) +
  scale_y_discrete(breaks = c("Sepal.Width", "Sepal.Length", "Petal.Width", "Petal.Length"))

【问题讨论】:

    标签: r ggplot2 heatmap


    【解决方案1】:

    要手动设置factor 列的顺序,您需要正确设置级别

    fake.cor.df <- data.frame(fake.cor,
      var1 = row.names(fake.cor)) %>%
      reshape2::melt(variable.name = "var2" , value.name = "spearman") %>%
      mutate(var1 =  factor(var1, levels = rev(c("Sepal.Length", "Sepal.Width", "Petal.Length", "Petal.Width"))),
        var2 = factor(var2, levels = rev(levels(var1))))
    
    
    ggplot(fake.cor.df, aes(x = var1, y = var2, fill = spearman)) +
      geom_tile()
    

    输出

    【讨论】:

    • 这确实解决了我的代表问题,但不是我的实际问题,这让我认为这是我的数据集特有的问题。不过谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-05
    • 1970-01-01
    相关资源
    最近更新 更多