繁体   English   中英

r-使用ggplot2的列明智热图

[英]r - column wise heatmap using ggplot2

如果有人可以指导我应对以下挑战,我将不胜感激。

我正在尝试建立列明智的热图。 对于每一列,我希望最小值为绿色,最大值为红色。 当前的解决方案采用矩阵范围的方法。

用ggplot2每列热图上看到了解决方案。 如您所见,我实现了相同的代码,但没有得到想要的结果[下图]

在此处输入图片说明

df <- data.frame(
                     F1 = c(0.66610194649319, 0.666123551800434,
                            0.666100611954119, 0.665991102703081,
                            0.665979885730484),
            acc_of_pred = c(0.499541627510021, 0.49960260221954,
                            0.499646067768102, 0.499447308828986,
                            0.499379552967265),
   expected_mean_return = c(2.59756065316356e-07, 2.59799087404167e-07,
                            2.86466725381146e-07, 2.37977452007967e-07,
                            2.94242908573705e-07),
         win_loss_ratio = c(0.998168189343307, 0.998411671274781,
                            0.998585272507726, 0.997791676357902,
                            0.997521287688458),
           corr_pearson = c(0.00161443345430616, -0.00248811119331013,
                            -0.00203407575954095, -0.00496817102369628,
                            -0.000140531627184482),
          corr_spearman = c(0.00214838517340878, -0.000308343671725617,
                            0.00228492127281917, -0.000359577740835049,
                            0.000608090759428587),
                roc_vec = c(0.517972308828151, 0.51743161463546,
                            0.518033230192484, 0.518033294993802,
                            0.517931553535524)

)

combo <- data.frame(combo = c("baseline_120", "baseline_20",
                    "baseline_60", "baseline_288",
                    "baseline_5760"))

df.scaled <- scale(df)
df.scaled <- cbind(df.scaled,combo)

df.melt <- melt(df.scaled, id.vars = "combo")

ggplot(df.melt, aes(combo, variable)) + 
  geom_tile(aes(fill = value), colour = "white") + 
  scale_fill_gradient(low = "green", high = "red") +
  geom_text(aes(label=value)) + 
  theme_grey(base_size = 9) + 
  labs(x = "", y = "") + scale_x_discrete(expand = c(0, 0)) + 
  scale_y_discrete(expand = c(0, 0)) + 
  theme(legend.position = "none", axis.ticks = element_blank(), 
        axis.text.x = element_text(size = 9 * 0.8, 
                                   angle = 0, hjust = 0, colour = "grey50"))

您几乎是正确的。 您实现的代码与绘图相同。 但是问这个问题的人在数据准备中迈出了第一步,他添加了一个比例变量。

如果在绘制变量之前先对变量进行缩放并使用缩放因子作为填充参数,则它可以工作(我在计算scale_fill_gradient变量后才在scale_fill_gradient中的scale_fill_gradient中添加了重新缩放):

df.melt <- melt(df.scaled, id.vars = "combo")
df.melt<- ddply(df.melt, .(combo), transform, rescale = rescale(value))

ggplot(df.melt, aes(combo, variable)) + 
  geom_tile(aes(fill = rescale), colour = "white") + 
  scale_fill_gradient( low= "green", high = "red") +
  geom_text(aes(label=round(value,4))) + 
  theme_grey(base_size = 9) + 
  labs(x = "", y = "") + scale_x_discrete(expand = c(0, 0)) + 
  scale_y_discrete(expand = c(0, 0)) + 
  theme(legend.position = "none", axis.ticks = element_blank(), 
        axis.text.x = element_text(size = 9 * 0.8, 
                                   angle = 0, hjust = 0, colour = "grey50"))

给出情节:

解图

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM