Tôi muốn đặt các đường vuông góc ở đầu của râu như chức năng boxplot
tự động cung cấp.Đặt đầu ria trên ô vuông
Trả lời
Có thể sử dụng stat_boxplot
để tính toán kết thúc râu, nhưng tôi không đủ trình hướng dẫn ggplot2
, vì vậy tôi sử dụng hàm cơ sở cho điều đó.
set.seed(42)
df <- data.frame(cond = factor(rep(c("A","B"), each=500)),
value = c(rnorm(500,mean=1,sd=0.2),rnorm(500, mean=1.5,sd=0.1)))
whisk <- function(df,cond_col=1,val_col=2) {
require(reshape2)
condname <- names(df)[cond_col]
names(df)[cond_col] <- "cond"
names(df)[val_col] <- "value"
b <- boxplot(value~cond,data=df,plot=FALSE)
df2 <- cbind(as.data.frame(b$stats),c("min","lq","m","uq","max"))
names(df2) <- c(levels(df$cond),"pos")
df2 <- melt(df2,id="pos",variable.name="cond")
df2 <- dcast(df2,cond~pos)
names(df2)[1] <- condname
df2
}
library(ggplot2)
plot1 <- ggplot(df, aes(x=cond))
plot1 <- plot1 + geom_errorbar(aes(ymin=min,ymax=max),data=whisk(df),width = 0.5)
plot1 <- plot1 + geom_boxplot(aes(y=value))
plot1
Như lời đề nghị nhưng không được thực hiện bởi @Roland, bạn có thể sử dụng stat_boxplot
để thực hiện điều này. Bí quyết gọi _boxplot
hai lần và là đặt geom
thành errorbar
cho một trong các cuộc gọi.
Lưu ý rằng khi R
sử dụng phương pháp tiếp cận bút và giấy, bạn nên triển khai các thanh lỗi trước tiên vẽ ô mẫu truyền thống lên trên cùng.
Sử dụng @ dữ liệu giả Roland df
ggplot(df, aes(x=cond, y = value)) +
stat_boxplot(geom ='errorbar') +
geom_boxplot() # shorthand for stat_boxplot(geom='boxplot')
Sự giúp đỡ cho stat_boxplot
(?stat_boxplot
) chi tiết các giá trị khác nhau tính toán và lưu trong một data.frame
Cảm ơn bạn đã dành thời gian giải thích điều này! :) – gaelgarcia
làm cách nào tôi có thể thay đổi kích thước các dòng râu này nếu tôi sử dụng 'geom_boxplot (width = .2)'? – Produnis
@ Produnis Để thay đổi kích thước các dòng râu, hãy thêm đối số 'stat_params = list (width = 0.5)' bên trong hàm: 'stat_boxplot'. Xem kết quả trong câu trả lời của tôi. – mpalanco
Để thay đổi kích thước râu đường chúng ta có thể sử dụng đối số width = 0.5
bên trong hàm: stat_boxplot
set.seed(42)
df <- data.frame(cond = factor(rep(c("A", "B"), each = 500)),
value = c(rnorm(500, mean = 1, sd = 0.2),
rnorm(500, mean = 1.5, sd = 0.1)))
library(ggplot2)
ggplot(df, aes(x = cond, y = value)) +
stat_boxplot(geom = "errorbar", width = 0.5) +
geom_boxplot()
Điều này dường như không hiệu quả đối với tôi; Tôi nhận được 'Lỗi: Tham số không xác định: stat_params'. Bạn đang sử dụng phiên bản R nào? – Will
@Tôi đã sửa đổi câu trả lời chưa. Phiên bản mới ggplo2 2.0.0 không chấp nhận đối số đó 'stat_params'. Bây giờ nó sẽ hoạt động. – mpalanco
Tuyệt vời, đã hoạt động! Cảm ơn! – Will
bạn có thể làm điều này bằng cách tính toán quantile nơi ggplot vẽ các đường và vẽ 'geom_segment' của riêng bạn hoặc 'geom_crossbar'. xem [câu hỏi này] (http://stats.stackexchange.com/questions/8137/how-to-add-horizontal-lines-to-ggplot2-boxplot) – Justin
Có một số lý do tại sao điều này phải được thực hiện trong ggplot2, và không sử dụng 'boxplot' mà đã làm những gì bạn muốn, hoặc là câu hỏi này hoàn toàn quan tâm học tập ...? –
@Justin Cảm ơn, tôi đã kiểm tra câu hỏi đó nhưng nó quá tiên tiến đối với tôi và tôi vẫn gặp lỗi, tôi không biết bit nào cần thay thế bằng cái gì, xin lỗi:/ – user1762299