2016-07-21 1 views
0

Быстрый вопрос: если я хочу запустить функцию, например plt.diff(dataset1), а в графике вывода я хочу, чтобы функция использовала имя «dataset1» в качестве метки оси y, как это можно сделать?Есть ли способ использовать аргумент функции в качестве метки в ggplot2?

plt.diff <- function(x){ 
    x$kind <- as.factor(x$kind) 
    ggplot(x,aes(x=as.factor(nodes), fill= age)) + labs(title = 'Difference plot', 
       x = 'points', y = deparse(substitute(x))) + geom_text(
       aes(label = nodes, y = diff)) + 
       geom_bar(stat="identity", aes(y = diff)) + 
       geom_bar(stat="identity", aes(y = (diff*(-1)))) + 
       coord_flip()} 

Как вы можете видеть, я уже пытался deparse(substitute(x)) и он не работает. Это выход для оси у в настоящее время: structure(list(nodes= structure(c(1L, 2L, 3L, 4L, 5L, 6L, 7L))))

ответ

0

Я бы извлечь имя объекта, переданного в функцию на ранней стадии с помощью deparse(substitute(x)), а затем передать это ggplot. Это гарантирует, что имя объекта основано на аргументе функции, переданном plt.diff, а не на ggplot в plt.diff.

Используя набор данных игрушка:

dataset1 <- data.frame(nodes = 1:10, kind = 1:10, age = rpois(10, 20), diff = rpois(10,5)) 

library(ggplot2) 

plt.diff <- function(x){ 
    x_name <- deparse(substitute(x)) 
    x$kind <- as.factor(x$kind) 
    ggplot(x, aes(x = as.factor(nodes), fill = age)) + 
    labs(title = 'Difference plot', x = 'points', y = x_name) + 
    geom_text(aes(label = nodes, y = diff)) + 
    geom_bar(stat="identity", aes(y = diff)) + 
    geom_bar(stat="identity", aes(y = (diff*(-1)))) + 
    coord_flip()} 

plt.diff(dataset1) 

ggplot2 bar chart

+0

Спасибо! Не уверен, должен ли я задать новый вопрос для этого, но я понял, что если я хочу запустить эту функцию в списке, используя 'lapply', имя каждого члена списка не будет использоваться как имя оси, а скорее' X [I] ', где i - индекс в списке. Я задам новый вопрос, если это оправдано –

+0

@JerryW. Да, я бы порекомендовал новый вопрос, так как это немного другая проблема. Этот вопрос также, вероятно, привлечет больше интереса, если вы также предоставите набор данных через dput, а также ожидаемый результат. –

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