在stat_contour中设置特定于构面的中断

我想使用ggplot和stat_contour为facet_grid的两类数据显示等高线图.我想基于数据突出显示特定级别.这是使用通常的火山数据的类似虚拟示例.

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)

情节1:
《在stat_contour中设置特定于构面的中断》

让我们说在每个因素水平(我认为东西两半),我想找到火山的平均高度并显示出来.我可以手动计算:

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

这告诉我,每一半的平均高度分别为141和119.我可以同时绘制两个方面,但不仅仅是每一方面都适当的高度.

v.plot + stat_contour(breaks = c(141, 119), colour = "red", size = 2)

情节2:
《在stat_contour中设置特定于构面的中断》

并且你不能在aes()语句中放置breaks =,因此将其作为原始数据帧中的列传递出来.我意识到这个虚拟的例子我可能只是做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)

在编辑1中,我将mutate()添加到上面的块中,以生成一个变量,用于标识值“足够接近”(四舍五入到最接近的整数)到所需高亮点(此示例的数据的平均值).

在edit2中,我添加了geom_points以显示具有所需值的网格位置,并使用0或完全透明的alpha隐藏不需要的值.

情节3:《在stat_contour中设置特定于构面的中断》

这个解决方案的问题在于它非常高兴,并试图用geom_path桥接它们是混乱的混乱.我也尝试了更粗糙的舍入,它只是让事情变得混乱.

很想听到其他想法!谢谢

点赞