说,我做了一个gpplot2
像下面这样有几个方面的情节:
ggplot(iris) +
geom_tile(aes(x = Petal.Width, fill = Sepal.Width, y = Petal.Length)) +
facet_wrap(~Species)
请注意,所有三个图都有一个颜色条,但每个方面都可能具有非常不同的值。每个方面是否可以有一个单独的颜色条?
说,我做了一个gpplot2
像下面这样有几个方面的情节:
ggplot(iris) +
geom_tile(aes(x = Petal.Width, fill = Sepal.Width, y = Petal.Length)) +
facet_wrap(~Species)
请注意,所有三个图都有一个颜色条,但每个方面都可能具有非常不同的值。每个方面是否可以有一个单独的颜色条?
以前有人问过。这是迄今为止我见过的最好的解决方案,但是我认为从可视化的角度来看,使用通用调色板更为理想。
我同意亚历克斯的回答,但根据我更好的科学和设计判断,我尝试了一下。
require(gridExtra)
require(dplyr)
iris %>% group_by(Species) %>%
do(gg = {ggplot(., aes(Petal.Width, Petal.Length, fill = Sepal.Width)) +
geom_tile() + facet_grid(~Species) +
guides(fill = guide_colourbar(title.position = "top")) +
theme(legend.position = "top")}) %>%
.$gg %>% arrangeGrob(grobs = ., nrow = 1) %>% grid.arrange()
当然,然后你会复制很多标签,这很烦人。此外,通过将每个物种绘制为单独的图而不是单个图的方面,您会丢失x
和缩放信息。y
您可以通过... + coord_cartesian(xlim = range(iris$Petal.Width), ylim = range(iris$Petal.Length)) + ...
在该 ggplot 调用中添加来修复轴。
老实说,唯一有意义的方法是比较两个不同的变量进行填充,这就是为什么您不关心在绘图之间比较它们的真实值的原因。dplyr::group_by()
一个好的替代方法是使用and将它们重新缩放到一个方面内的百分位数dplyr::percent_rank
。
编辑更新:
在两个不同变量的情况下,您必须首先“融化”数据,我假设您已经完成了。在这里,我用iris
数据重复它。然后,您可以通过检查百分位数而不是两个变量的绝对值来查看相对值。
iris %>%
tidyr::gather(key = Sepal.measurement,
value = value,
Sepal.Length, Sepal.Width) %>%
group_by(Sepal.measurement) %>%
mutate(percentilevalue = percent_rank(value)) %>%
ggplot(aes(Petal.Length, Petal.Width)) +
geom_tile(aes(fill = percentilevalue)) +
facet_grid(Sepal.measurement ~ Species) +
scale_fill_continuous(limits = c(0,1), labels = scales::percent)