ggplot, объединяющий два графика из разных data.frames - PullRequest
59 голосов
/ 02 февраля 2012

Я хочу объединить два ggplots из двух разных data.frames в один график. Ниже вы найдете код. Я хочу объединить сюжет 1 и 2 или сюжеты 3 и 4.

df1 <- data.frame(p=c(10,8,7,3,2,6,7,8),
             v=c(100,300,150,400,450,250,150,400))
df2 <- data.frame(p=c(10,8,6,4), v=c(150,250,350,400))

plot1 <- qplot(df1$v, df1$p)
plot2 <- qplot(df2$v, df2$p, geom="step")

plot3 <- ggplot(df1, aes(v, p)) + geom_point()
plot4 <- ggplot(df2, aes(v, p)) + geom_step()

Это должно быть очень легко сделать, но почему-то я не могу заставить его работать. Спасибо за ваше время.

Ответы [ 3 ]

62 голосов
/ 02 февраля 2012

Как сказал Баптист, вам нужно указать аргумент data на уровне geom.Либо

#df1 is the default dataset for all geoms
(plot1 <- ggplot(df1, aes(v, p)) + 
    geom_point() +
    geom_step(data = df2)
)

, либо

#No default; data explicitly specified for each geom
(plot2 <- ggplot(NULL, aes(v, p)) + 
      geom_point(data = df1) +
      geom_step(data = df2)
)
45 голосов
/ 14 апреля 2014

Единственное рабочее решение для меня, это определить объект данных в geom_line вместо базового объекта, ggplot.

Примерно так:

ggplot() + 
geom_line(data=Data1, aes(x=A, y=B), color='green') + 
geom_line(data=Data2, aes(x=C, y=D), color='red')

вместо

ggplot(data=Data1, aes(x=A, y=B), color='green') + 
geom_line() + 
geom_line(data=Data2, aes(x=C, y=D), color='red')

Подробнее здесь

3 голосов
/ 06 июня 2013

Вы можете использовать этот трюк, чтобы использовать только qplot. Используйте внутреннюю переменную $mapping. Вы даже можете добавить color = к своим графикам, так что это также будет добавлено в отображение, а затем ваши графики автоматически объединятся с легендами и цветами.

cpu_metric2 <- qplot(y=Y2,x=X1) 

cpu_metric1 <- qplot(y=Y1, 
                    x=X1, 
                    xlab="Time", ylab="%") 

combined_cpu_plot <- cpu_metric1 + 
  geom_line() +
  geom_point(mapping=cpu_metric2$mapping)+
  geom_line(mapping=cpu_metric2$mapping)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...