我有一个在大facet_grid中绘制的多元纵向样本,特别是使用facet_grid,以便当我没有某个特定样本的特定时间点时,它仍将所有内容保持在一个井井有条的网格中。我试图向空的方面添加某种指示符,以表明它们没有数据(而不只是没有点出现),因为有时空的方面是尚未收集该样本的结果。我能够得到的是在确实有数据的每个方面显示的标签,但是我似乎无法弄清楚如何在没有数据的每个方面显示的标签。如果您也有建议,我可以通过选择构面或其他指示“无可用数据”的方式添加红色X而不是文本标签,那会更好。
ggplot(mpg, aes(displ, cty)) + geom_point() +
facet_grid(vars(drv), vars(cyl)) + geom_text(x = 5, y = 20, label = "Blah")
您可以使用来为缺少的组合添加行full_join
。这些新行将没有数据,因此将不会绘制任何内容,但是您可以在消息中添加另一列,该列geom_text
将使用:
library(tidyverse)
theme_set(theme_bw())
mpg %>%
full_join(crossing(drv=unique(mpg$drv), cyl=unique(mpg$cyl))) %>%
mutate(empty=ifelse(is.na(model), "No data available", NA_character_),
x=mean(range(displ, na.rm=TRUE)),
y=mean(range(cty, na.rm=TRUE))) %>%
ggplot(aes(displ, cty)) +
geom_point() +
facet_grid(vars(drv), vars(cyl)) +
geom_text(aes(x, y, label=empty), colour="red", size=3)
对于“ X”,将empty
文本更改"X"
为大尺寸并绘制。例如:
mpg %>%
full_join(crossing(drv=unique(mpg$drv), cyl=unique(mpg$cyl))) %>%
mutate(empty=ifelse(is.na(model), "X", NA_character_),
x=mean(range(displ, na.rm=TRUE)),
y=mean(range(cty, na.rm=TRUE))) %>%
ggplot(aes(displ, cty)) +
geom_point() +
geom_text(aes(x, y, label=empty), colour="red", size=20) +
facet_grid(vars(drv), vars(cyl))
或者我们可以使用geom_segment
:
mpg %>%
full_join(crossing(drv=unique(mpg$drv), cyl=unique(mpg$cyl))) %>%
ggplot(aes(displ, cty)) +
geom_point() +
geom_segment(data=. %>% filter(is.na(model)),
x=min(mpg$displ), xend=max(mpg$displ),
y=min(mpg$cty), yend=max(mpg$cty),
colour="red") +
geom_segment(data=. %>% filter(is.na(model)),
x=min(mpg$displ), xend=max(mpg$displ),
y=max(mpg$cty), yend=min(mpg$cty),
colour="red") +
facet_grid(vars(drv), vars(cyl))
只需调用一次即可完成上述操作geom_segment
,但需要(AFAICT)进行更复杂的数据准备:
mpg %>%
full_join(crossing(drv=unique(mpg$drv), cyl=unique(mpg$cyl))) %>%
ggplot(aes(displ, cty)) +
geom_point() +
geom_segment(data=. %>%
filter(is.na(model)) %>%
select(-displ, -cty) %>%
crossing(
displ=range(mpg$displ),
cty=range(mpg$cty)
),
aes(xend=rev(displ), yend=rev(cty)), colour="red") +
facet_grid(vars(drv), vars(cyl))
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句