Facet_wrap:基于label_value的条件格式?

时间:2018-10-22 21:38:03

标签: r ggplot2 facet-wrap

对于我的某些图表,我希望有条件地在构面标签上更改每个构面在x轴上的数字格式,例如基于数量级(例如k,M,B等)。

在下面带有mtcars数据的示例中,我希望带有gear==3的构面保留原始数字,带有gear==4的构面创建“ k”格式,带有{{1 }}为“ M”格式。这样后两者将分别以数千和数百万表示。

是否可以使用gear==5中的label_value来有条件地应用格式/功能?

labeller

1 个答案:

答案 0 :(得分:2)

如果要允许比例格式根据值变化,请使用dplyr::case_when。 (不过,我不知道如何根据构面来不同地显示相同的数字。)

编辑以在示例中显示更大的范围:

d <- mtcars %>% mutate(mpg2 = mpg ^ gear / carb)


ggplot(d) +
  geom_point(aes(mpg2, cyl)) +
  facet_wrap(~ gear, scales = "free")+
  scale_x_continuous(name = NULL,  trans = "log2", labels = function(l) {
     scaled = case_when(l >= 1E6 ~ paste0(formatC(l/1E6, digits = 0, big.mark = ",", format = "f"), "M"),
                        l >= 1E3 ~ paste0(formatC(l/1E3, digits = 0, big.mark = ",", format = "f"), "K"),
                        TRUE     ~ paste0(l))
     return(scaled)
})

enter image description here

我认为效果很好。

如果您需要对构面标签进行特定控制,则可以考虑使用geom_text(aes(label = your_preferred_label))伪造构面轴文本并在coord_中关闭剪切,以便可以将文本放置在绘图范围之外,或者(更简单)将图与patchworkcowplot合并。我不知道使贴标机本身了解构面信息的方法。