ggplot中的热图,每组的颜色不同

时间:2018-05-14 20:15:18

标签: r ggplot2 colors heatmap

我正在尝试在ggplot中生成热图。我希望每个组都有不同的颜色渐变,但不知道如何做到这一点。我目前的代码如下:

const result = Object.values(data.reduce((r, o) => (r[o.id]
  ? (r[o.id].total += o.total)
  : (r[o.id] = {...o}), r), {}));

结果图看起来像这样: enter image description here

如何更改每个组的颜色主题,例如红色表示“圆形”,蓝色表示“错误”,绿色表示“切换”等...

非常感谢!

1 个答案:

答案 0 :(得分:4)

您可以通过在数据中创建自己的重新调整后的值,然后轻微“黑客攻击”alpha美学与fill美学相结合来实现这一目标:

library(tidyverse)

data %>%
  group_by(group) %>%
  mutate(rescale = scales::rescale(pct)) %>%
  ggplot(., aes(x = factor(id), y = group)) +
  geom_tile(aes(alpha = rescale, fill = group), color = "white") +
  scale_alpha(range = c(0.1, 1))

首先,我们创建一个名为rescale的新列rescales pct01,然后强制scale_alpha(range = c(0, 1)) [注意]在这种情况下,我使用了c(0.1, 1),这样你仍然可以“看到”零点。

最后,您可能希望删除指南:

data %>%
  group_by(group) %>%
  mutate(rescale = scales::rescale(pct)) %>%
  ggplot(., aes(x = factor(id), y = group)) +
  geom_tile(aes(alpha = rescale, fill = group), color = "white") +
  scale_alpha(range = c(0.1, 1)) +
  theme(legend.position = "none")

Plot

N.B。使用aes(x = factor(id)...,您可以手动设置x-axis,因为在这种情况下,您似乎希望将其视为一个因素,而非数字刻度。

最后,如果您真的想要获得幻想,可以将axis.text.y颜色双重编码为​​factor(即data$group)变量的颜色:

data %>%
  group_by(group) %>%
  mutate(rescale = scales::rescale(pct)) %>%
  ggplot(., aes(x = factor(id), y = group)) +
  geom_tile(aes(alpha = rescale, fill = group), color = "white") +
  scale_alpha(range = c(0.1, 1)) +
  theme(legend.position = "none",
        axis.text.y = element_text(color = scales::hue_pal()(length(levels(data$group)))),
        axis.ticks = element_blank()) +
  labs(x = "", y = "")

Fancy Plot