按行彩色数据框

时间:2019-06-05 20:12:49

标签: r

有人可以帮助我为数据框着色吗?任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

这是使用ggplot和dplyr的方法。

首先,我将给定的数据转换为长格式,每表行一个字母,并带有数字列和行坐标。

library(dplyr); library(ggplot2)
ltrs_tidy <- alpha_ltrs %>%
  rownames_to_column(var = "row") %>%
  mutate_all(as.character) %>%
  tidyr::gather(col, ltr, -row) %>%
  mutate_at(vars(c("row", "col")), 
            ~str_remove(., "r|c") %>% as.integer)

然后,我通过添加新列以显示该列的第2行值来计算要使用的颜色,然后在case_when语句中指定规则。

ltrs_tidy2 <- ltrs_tidy %>%
  left_join(ltrs_tidy %>% filter(row == 2) %>% select(col, ltr_row2 = ltr), by = "col") %>%
  mutate(fill_calc = case_when(
    row == 1         ~ "white",
    row == 2         ~ "blue",
    ltr %in% c(".")  ~ "white",
    ltr == ltr_row2  ~ "blue",
    TRUE             ~ "red"
  ))

最后,我在每个位置绘制了一个阴影的geom_tilegeom_text

ggplot(ltrs_tidy2, aes(col, row, label = ltr, fill = fill_calc)) +
  geom_tile(alpha = 0.5) +
  geom_text(size = 2.5, family = "mono") +
  scale_y_reverse() +
  scale_fill_identity() +
  coord_fixed(ratio = 2) +
  theme_minimal()