我想使用ggplot和stat_contour为的两类数据显示等高线图facet_grid。我想根据数据突出显示特定级别。这是一个使用常规volcano数据的类似虚拟示例。
library(dplyr)
library(ggplot2)
v.plot <- volcano %>% reshape2::melt(.) %>%
mutate(dummy = Var1 > median(Var1)) %>%
ggplot(aes(Var1, Var2, z = value)) +
stat_contour(breaks = seq(90, 200, 12)) +
facet_grid(~dummy)
Run Code Online (Sandbox Code Playgroud)
假设在每个因子水平(我想是东半和西半)内,我想找到火山的平均高度并将其显示出来。我可以手动计算:
volcano %>% reshape2::melt(.) %>%
mutate(dummy = Var1 > median(Var1)) %>%
group_by(dummy) %>%
summarise(h.bar = mean(value))
# A tibble: 2 × 2
dummy h.bar
<lgl> <dbl>
1 FALSE 140.7582
2 TRUE 119.3717
Run Code Online (Sandbox Code Playgroud)
这告诉我,每半部分的平均高度分别为141和119。我可以在两个面上都画出这两个高度,而不仅仅是在每侧上画出适当的高度。
v.plot + stat_contour(breaks = c(141, 119), colour = "red", size = 2)
Run Code Online (Sandbox Code Playgroud)
而且您不能放入breaks=一条aes()语句,因此将其作为原始数据帧中的一列传递进来。我意识到,通过这个虚拟示例,我可能可以做一些类似的事情,bins=2但是在我的实际数据中,我不想要数据的均值,而是完全想要其他东西。
谢谢!
我再次尝试解决这个问题并提出了部分解决方案,但我被迫使用不同的geom.
volcano %>% reshape2::melt(.) %>%
mutate(dummy = Var1 > median(Var1)) %>%
group_by(dummy) %>%
mutate(h.bar = mean(value), # edit1
is.close = round(h.bar) == value) %>% #
ggplot(aes(Var1, Var2, z = value)) +
stat_contour(breaks = seq(90, 200, 12)) +
geom_point(colour = "red", size = 3, # edit 2
aes(alpha = is.close)) + #
scale_alpha_discrete(range = c(0,1)) + #
facet_grid(~dummy)
Run Code Online (Sandbox Code Playgroud)
在上面的块中edit 1,我添加了一个变量来生成一个变量,用于标识所需突出点(本例数据的平均值)“足够接近”(四舍五入到最接近的整数)的位置。mutate()value
edit2我添加了s来geom_point显示具有所需值的网格位置,并使用alpha0 或完全透明隐藏不需要的位置。
这个解决方案的问题在于它的间隙非常大,并且试图弥合这些间隙geom_path是一个混乱的过程。我也尝试过更粗的舍入,但这只会让事情变得混乱。
很想听听其他想法!谢谢