我們可以得出箱線圖如下:你會如何繪製一個盒子圖和同一圖上的特定點?
qplot(factor(cyl), mpg, data = mtcars, geom = "boxplot")
,併爲一點:你如何結合兩種
qplot(factor(cyl), mpg, data = mtcars, geom = "point")
- 但只是爲了展示一些特定點(比如當wt
小於2 )在盒子頂部?
我們可以得出箱線圖如下:你會如何繪製一個盒子圖和同一圖上的特定點?
qplot(factor(cyl), mpg, data = mtcars, geom = "boxplot")
,併爲一點:你如何結合兩種
qplot(factor(cyl), mpg, data = mtcars, geom = "point")
- 但只是爲了展示一些特定點(比如當wt
小於2 )在盒子頂部?
在您的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),...
你可以通過使用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
數據同樣的事情被調整爲只包括在哩數頂部四分之一的汽缸分佈。總的來說,我不確定這是不是很好的做法,因爲我認爲人們希望看到除了鬍鬚之外的點,但是你去了。
如果您試圖繪製兩個不同的數據集(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
你知道我爲什麼會得到這樣的錯誤:錯誤:美學必須是長度1或與數據(32)相同:x,y – John 2016-09-07 02:53:23