簡體   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