2017-02-10 75 views
0

在下面的代码中,我可以为两个方面设置两个不同的比例。现在,我想格式化大规模(例如,使用scale_y_continuous(labels = dollar)将其转换为美元)。我如何格式化各个方面的规模?如何为不同刻面指定不同刻度格式?

df <- data.frame(value = c(50000, 100000, 4, 3), 
       variable = c("big", "big", "small", "small"),  
       x = c(2010, 2011, 2010, 2011)) 
ggplot(df) + geom_line(aes(x, value)) + facet_wrap(~ variable, scales = "free_y") 

A similar question a long time ago about setting individual limit一直无人接听。我希望ggplot2 2.0能够做到这一点。

回答

1

函数scale_y_continuous允许将函数用于labels参数。我们可以创建一个使用最小值big(或任何其他值)作为阈值的自定义标签。

dollar <- function(x) { 
    ifelse(x >= min(df$value[df$variable == "big"]), 
    paste0("$", prettyNum(x, big.mark=",")), x) 
} 

ggplot(df) + geom_line(aes(x, value)) + facet_wrap(~ variable, scales = "free_y") + 
    scale_y_continuous(labels = dollar) 

enter image description here

+0

很聪明,虽然定位于我的例子,其中的'big'和'small'值是分开的。我想这意味着没有办法告诉ggplot2我想要'labeller1'这个方面,'labeller2'这个方面? – Heisenberg

+0

不是我所知。 –