【问题标题】:R: shading specific tiles using geom_tileR:使用 geom_tile 对特定图块进行着色
【发布时间】:2018-08-14 01:51:55
【问题描述】:
library(tidyverse)
## make data
set.seed(3)
dat <- matrix(runif(100, 0, 1), ncol=10)

## reshape data (tidy/tall form)
dat2 <- dat %>%
  tbl_df() %>%
  rownames_to_column('Var1') %>%
  gather(Var2, value, -Var1) %>%
  mutate(
    Var1 = factor(Var1, levels=1:10),
    Var2 = factor(gsub("V", "", Var2), levels=1:10)
  )

## plot data
frames <- data.frame(Var1 = c(1, 1, 3, 4),
                     Var2 = c(8, 10, 3, 2))
ggplot(dat2, aes(Var1, Var2)) +
  geom_tile(aes(fill = value)) + 
  geom_text(aes(label = round(value, 1))) +
  scale_fill_gradient(low = "white", high = "red") +
  geom_rect(data=frames, size=1, fill=NA, colour="black",
            aes(xmin=Var1 - 0.5, xmax=Var1 + 0.5, ymin=Var2 - 0.5, ymax=Var2 + 0.5))

我在这里有一个热图,我已经对其进行了自定义,以便通过指定一个名为 frames 的 data.frame 来包含图块的位置,然后将其传递给 geom_rect,从而使某些图块具有黑色边框。

我想将其中 2 个图块完全着色为黑色,但将文本颜色更改为白色。以下 data.frame 包含这 2 个图块的位置:

frames_shade <- data.frame(Var1 = c(3, 9), Var2 = c(5, 2))

我可以使用哪个函数来做到这一点?

【问题讨论】:

    标签: r ggplot2 visualization heatmap


    【解决方案1】:

    覆盖另一个 geom_tile... 我在此处添加了最后一条语句,而不是您的矩形。这会让你得到黑色的矩形。我认为最后一行会做你的白色文本,但框架数据框需要在其中包含这些文本值。它现在会出错,因为 value 不在帧中。

    ggplot(dat2, aes(Var1, Var2)) +
    geom_tile(aes(fill = value)) +  
    geom_text(aes(label = round(value, 1))) +
    scale_fill_gradient(low = "white", high = "red") +
    geom_tile(data=frames,fill="black")  #+ 
    #geom_text(data=frames,aes(label = round(value, 1)),colour="white") 
    

    【讨论】:

    • 谢谢。我会试试这个。你知道如何让 ggplot 显示更多的数字吗?目前它只显示 1 个小数点
    • 您将其四舍五入到小数点后一位 round(value,1)。您可以增加它,然后您可能想要更改大小geom_text(aes(label=round(value,2)),size=4)
    猜你喜欢
    • 1970-01-01
    • 2015-03-10
    • 1970-01-01
    • 1970-01-01
    • 2021-04-28
    • 2021-03-02
    • 1970-01-01
    • 1970-01-01
    • 2015-12-09
    相关资源
    最近更新 更多