我希望使用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)
让我们说在每个因素水平(我估计东西两半),我想找到火山的平均高度并显示出来。我可以手动计算:
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)
并且您无法将breaks=
放入aes()
语句中,因此将其作为原始数据框中的列传递出来。我意识到这个虚拟的例子我可能只是做bins=2
之类的事情但是在我的实际数据中我不想要数据的意思,我想要其他的东西。
谢谢!
答案 0 :(得分:1)
我再次尝试解决这个问题并提出了部分解决方案,但我不得不使用其他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)
在edit 1
中,我在上面的块中添加了mutate()
,以生成一个变量,用于标识value
“足够接近”(四舍五入到最接近的整数)到所需高光点的位置(这个例子的数据的平均值。)
在edit2
中,我添加了geom_point
来显示具有所需值的网格位置,并使用alpha
0或完全透明隐藏不需要的网格位置。
这个解决方案的问题在于它非常高兴,并且尝试将那些与geom_path
联系起来的是混乱的混乱。我也尝试了更粗略的舍入,这让事情变得浑浊。
很想听到其他想法!感谢