对于我的某些图表,我希望有条件地在构面标签上更改每个构面在x轴上的数字格式,例如基于数量级(例如k,M,B等)。
在下面带有mtcars
数据的示例中,我希望带有gear==3
的构面保留原始数字,带有gear==4
的构面创建“ k”格式,带有{{1 }}为“ M”格式。这样后两者将分别以数千和数百万表示。
是否可以使用gear==5
中的label_value
来有条件地应用格式/功能?
labeller
答案 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)
})
我认为效果很好。
如果您需要对构面标签进行特定控制,则可以考虑使用geom_text(aes(label = your_preferred_label))
伪造构面轴文本并在coord_
中关闭剪切,以便可以将文本放置在绘图范围之外,或者(更简单)将图与patchwork
或cowplot
合并。我不知道使贴标机本身了解构面信息的方法。