R - общая функция для построения фрейма данных с ggplot2 (несколько столбцов) [дубликат]

Вот рекомендация из codeontrack.com , которая имеет хорошие примеры решений:

Вместо того, чтобы установить ширину div на 100%, установите ее в auto и убедитесь, что для параметра & lt; div & gt; установлено значение: block (по умолчанию для & lt; div & gt; ).

2
задан greenbooks 20 March 2014 в 22:56
поделиться

3 ответа

Использование aes_string позволит вам передавать символьные строки в вашу функцию ggplot2, что позволяет вам программно изменить ее более легко:

my.plot = function(x, y, data)
{
p=ggplot(data, aes_string(x=x, y=y))+geom_bar(stat="identity")
print(p)
}

my.plot(x="xVar", y="yVar", data=dataTest)

yvar [/g0]

my.plot(x="xVar", y="zVar", data=dataTest)

zvar [/g1]

2
ответ дан sebastian-c 16 August 2018 в 05:16
поделиться
  • 1
    Я добавил вариант, который работает для граней, если у вас есть какие-либо отзывы, связанные с ним, пожалуйста, дайте мне знать :) – greenbooks 20 March 2014 в 23:13

Используя ответ @ sebastian-c и другие источники, у меня есть функция, которая, я думаю, будет работать, и я хотел бы поделиться ею. Я думаю, что я вижу решение Хенрика, но похоже, что это больше, поскольку у меня есть 4 группы, 4 'x' категории и третья категория, связанная с временем (год, четверть, месяцы).

library(ggplot2)

### sample data ###
n=25
dataTest = data.frame(
  xVar=sample(1:3, n, replace=TRUE), 
  yVar = rnorm(n, 5, 2), 
  zVar=rnorm(n, 5, .5),
  brand=letters[1:5])

### function
my.plot = function(x, y, data, group=NULL)
{
  p=ggplot(data, aes_string(x=x, y=y, fill=group))+
    geom_bar(stat="identity")
  # make a facet if group is not null
  if(length(group)>0) {
    facets = facet_wrap(formula(paste("~", group)))
    p = p + facets
  }
  return(p)
} 
1
ответ дан greenbooks 16 August 2018 в 05:16
поделиться

Как насчет использования %+% для обновления графиков вместо?

Пример:

library(ggplot2)

### sample data ###
n=25
dataTest = data.frame(
  xVar=sample(1:3, n, replace=TRUE), 
  yVar = rnorm(n, 5, 2), 
  zVar=rnorm(n, 5, .5) )

p1 <- ggplot(data = dataTest, aes(x = xVar, y = yVar)) + 
  geom_bar(stat = "identity")

aes2 <- aes(x = xVar, y = zVar)

p2 <- p1 %+% aes2

p1:

enter image description here [/g0]

p2:

enter image description here [/g1]

РЕДАКТИРОВАТЬ

или как упомянуто @ sebastian-c, aes_string

plots <- function(x, y, data = dataTest) {
  p1 <- ggplot(data = data, aes_string(x = x, y = y)) + 
    geom_bar(stat = "identity")

  p1
}

plots('xVar','yVar')

plots('xVar','zVar')

РЕДАКТИРОВАТЬ 2: избили меня до удара: o

1
ответ дан rawr 16 August 2018 в 05:16
поделиться
  • 1
    Если заменить только y, достаточно p1 + aes(y = zVar). – Henrik 20 March 2014 в 21:49
  • 2
    @Henrik Я заменяю x и y, и моя основная цель сложнее, используя fill в качестве групповой переменной через facet_wrap. Я не понимал, что вы можете сделать это, хотя, вероятно, полезно в некоторых других ситуациях, хотя :) – greenbooks 20 March 2014 в 22:21
  • 3
    поэтому вы пытаетесь передать строку на facet_wrap? Я думаю, вы определенно захотите использовать %+%, затем – rawr 20 March 2014 в 22:42
  • 4
    Есть причины, по которым я не объяснил в своем первоначальном сообщении, почему это не работает для моего конкретного случая ... Наверное, я постарался сделать свой вопрос слишком простым. Я использую этот контур, чтобы сделать дрожащие выбросы на ящиках с использованием фасетов, необязательно в функции, чтобы охватить все возможности. Поэтому я хочу удалить слой geom_points () и заменить его новым слоем каждый раз, когда создаю новый график. Если бы я тоже этого не делал, ваше решение сработало бы хорошо для меня. – greenbooks 20 March 2014 в 23:09
Другие вопросы по тегам:

Похожие вопросы: