Как бы вы нарисовали рамочный график и конкретные точки на одном графике? - PullRequest
3 голосов
/ 13 февраля 2012

Мы можем нарисовать прямоугольник, как показано ниже:

qplot(factor(cyl), mpg, data = mtcars, geom = "boxplot")

и указать как:

qplot(factor(cyl), mpg, data = mtcars, geom = "point") 

Как бы вы совместили оба - но просто показать несколько конкретных точек (скажем, когдаwt меньше 2) сверху коробки?

Ответы [ 3 ]

5 голосов
/ 07 сентября 2016

Если вы пытаетесь построить два geoms с двумя разными наборами данных (boxplot для mtcars, точки для data.frame литеральных значений), это способ сделать это, чтобы прояснить ваше намерение. Это работает с текущей (сентябрь 2016 г.) версией ggplot (ggplot2_2.1.0)

library(ggplot2)
ggplot() +
  # box plot of mtcars (mpg vs cyl)
  geom_boxplot(data = mtcars, 
               aes(x = factor(cyl), y= mpg)) +
  # points of data.frame literal
  geom_point(data = data.frame(x = factor(c(4,6,8)), y = c(15,20,25)),
             aes(x=x, y=y),
             color = 'red')

Я добавил color = 'red' для набора точек, поэтому их легко отличить от точек, сгенерированных как часть geom_boxplot

enter image description here

1 голос
/ 13 февраля 2012

Вы можете показать оба, используя ggplot() вместо qplot(). Синтаксис может быть немного сложнее для понимания, но обычно вы можете сделать гораздо больше. Если вы хотите построить как прямоугольник, так и точки, вы можете написать:

boxpt <- ggplot(data = mtcars, aes(factor(cyl), mpg)) 
boxpt + geom_boxplot(aes(factor(cyl), mpg)) + geom_point(aes(factor(cyl), mpg))

Я не знаю, что вы имеете в виду, когда наносите на карту только определенные точки сверху, но если вы хотите дешевый (и, вероятно, не очень умный) способ просто показывать точки над краем рамки, вот она :

boxpt + geom_boxplot(aes(factor(cyl), mpg)) + geom_point(data = ddply(mtcars, .(cyl),summarise, mpg = mpg[mpg > quantile(mpg, 0.75)]), aes(factor(cyl), mpg))

По сути, это то же самое, за исключением того, что данные, поставляемые для geom_point, настроены так, чтобы включать только числа миль на галлон в верхней четверти распределения по цилиндрам. В общем, я не уверен, что это хорошая практика, потому что я думаю, что люди ожидают увидеть точки за пределами только усов, но вы идете.

1 голос
/ 13 февраля 2012

Используйте + geom_point(...) на вашем qplot (просто добавьте + geom_point(), чтобы получить все точки на графике).

Чтобы построить выборочно, просто выберите те точки, которые вы хотите построить:

n <- nrow(mtcars)
# plot every second point
idx <- seq(1,n,by=2)

qplot( factor(cyl), mpg, data=mtcars, geom="boxplot" ) +
     geom_point( aes(x=factor(cyl)[idx],y=mpg[idx]) )    # <-- see [idx] ?

Если вы знаете пункты заранее, вы можете ввести их непосредственно, например ::10000

qplot( factor(cyl), mpg, data=mtcars, geom="boxplot" ) +
     geom_point( aes(x=factor(c(4,6,8)),y=c(15,20,25)) ) # plot (4,15),(6,20),...
...