我试图做一个每列都有自己的热图scale_fill_discrete
。
下面都是我的试探。
我希望每个人都key
共享相同的情节,但有自己的规模,我能做的最接近的是最后一个试探性的。
library(tidyverse)
library(patchwork)
library(ggsci)
library(ggnewscale)
mtcars %>%
rownames_to_column("rnames") %>%
as_tibble() %>%
mutate_all(as_factor) %>%
select(rnames, vs, am, gear, carb) %>%
gather(key = "key", value = "value", -rnames) -> temp
#> Warning: attributes are not identical across measure variables;
#> they will be dropped
ggplot(
temp,
aes(x = key, y=rnames)
) +
geom_tile(aes(fill = value)) +
facet_wrap(. ~ key)
temp %>%
pull(key) %>%
unique() %>%
map(
~ ggplot(
temp %>% filter(key ==.x),
aes(x = key, y=rnames)
) +
geom_tile(aes(fill = value))
) -> p
p[[1]] <- p[[1]] +
scale_fill_tron()
p[[2]] <- p[[2]] +
scale_fill_futurama() +
theme(axis.title = element_blank(), axis.ticks = element_blank(), axis.text.y = element_blank())
p[[3]] <- p[[3]] +
scale_fill_simpsons() +
theme(axis.title = element_blank(), axis.ticks = element_blank(), axis.text.y = element_blank())
p[[4]] <- p[[4]] +
scale_fill_rickandmorty() +
theme(axis.title = element_blank(), axis.ticks = element_blank(), axis.text.y = element_blank())
Reduce(`|`, p) +
wrap_elements() +
plot_layout(guides = "collect") & theme(legend.position = 'bottom')
ggplot() +
geom_tile(
data = temp %>% filter(key=="vs") %>% droplevels,
aes(key, rnames, fill=value)
) +
scale_fill_simpsons() +
new_scale_fill() +
geom_tile(
data = temp %>% filter(key=="am") %>% droplevels,
aes(key, rnames, fill=value)
) +
scale_fill_rickandmorty() +
new_scale_fill() +
geom_tile(
data = temp %>% filter(key=="gear") %>% droplevels,
aes(key, rnames, fill=value)
) +
scale_fill_futurama() +
new_scale_fill() +
geom_tile(
data = temp %>% filter(key=="carb") %>% droplevels,
aes(key, rnames, fill=value)
) +
scale_fill_tron()
由reprex 包(v0.3.0)于 2020 年 11 月 29 日创建
如您所见,即使最后一次尝试也有问题。
我很感激任何帮助。提前致谢