2012-02-13 123 views

回答

1

在您的qplot上使用+ geom_point(...)(只需添加一個+ 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] ? 

如果你知道前手的點,你可以直接在如餵它們:

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),... 
+0

你知道我爲什麼會得到這樣的錯誤:錯誤:美學必須是長度1或與數據(32)相同:x,y – John 2016-09-07 02:53:23

1

你可以通過使用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數據同樣的事情被調整爲只包括在哩數頂部四分之一的汽缸分佈。總的來說,我不確定這是不是很好的做法,因爲我認爲人們希望看到除了鬍鬚之外的點,但是你去了。

4

如果您試圖繪製兩個不同的數據集(boxplot for mtcars,points for data.frame的字面值),您可以通過這種方式來使您的意圖清晰。這適用於ggplot的電流(SEP 2016)版本(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

相關問題