2016-10-22 2 views
1

Я не доволен scales::percent, например, scales::percent(21/80) возвращает «26,2%», в то время как я предпочитаю получать «26,25%». Так что я написал функцию быстрого:R ggplot2 не знает пользовательских функций

custom_percent <- function(x, digits = 2) { 
    paste0(round(100 * x, digits = digits), "%") 
} 

Однако, когда я пытаюсь использовать его с ggplot2, я получаю следующее сообщение об ошибке "Error in eval(expr, envir, enclos) : could not find function "custom_percent". Вот пример:

dset <- data.frame(data = 10:90) 
p <- ggplot(dset, aes(x = data)) 
p + geom_bar(aes(y = (..count..)/sum(..count..)), width = .5) + 
    geom_text(aes(y = ((..count..)/sum(..count..)), 
      label = custom_percent((..count..)/sum(..count..))), 
      stat = "count", vjust = -0.25) + 
    scale_y_continuous(labels = custom_percent) 

Что я могу сделать, чтобы получить доступ к custom_percent?

+0

Я не уверен, если это проблема с 'ggplot' не будучи в состоянии найти пользовательскую функцию. Например, 'd <- data.frame (x = 1: 10, y = rnorm (10))', а затем 'ggplot (d) + geom_text (aes (x, y, label = custom_percent (y)))' работает отлично. –

+0

Кажется, проблема связана с использованием специальных переменных (например, '..count..') вместе с пользовательской функцией. Интересно. –

+0

Было неожиданно, когда я использовал «весы :: проценты» везде, он просто сработал. Но тогда «весы» были тем же автором, который написал «ggplot2», поэтому, возможно, он использовал трюк в обоих. –

ответ

2

aes_q и bquotecan help с этими сложными вопросами балльной

dset <- data.frame(data = 10:90) 
p <- ggplot(dset, aes(x = data)) 
p + geom_bar(aes_(y = ~(..count..)/sum(..count..)), width = .5) + 
    geom_text(aes_(y = ~((..count..)/sum(..count..)), 
       label = bquote(.(custom_percent)((..count..)/sum(..count..)))), 
      stat = "count", vjust = -0.25) + 
    scale_y_continuous(labels = custom_percent) 
+0

Я думаю, что 'aes_string()' также решит это аналогичным образом. Со всем выражением в кавычках. –

+0

@BrandonBertelsen что это, Matlab? ;) – baptiste

+0

Уродливый, но функциональный, just_like_matlab. –

Смежные вопросы