R의 라벨 상자 플롯


11

축없이 상자 그림을 작성하고 현재 그림 (ROC 곡선)에 추가해야하지만 상자 그림에 더 많은 텍스트 정보를 추가해야합니다 : 최소 및 최대 레이블. 현재 코드 줄이 아래에 있습니다 (현재 그래프도).

도움을 주셔서 감사합니다.

boxplot(data, horizontal = TRUE, range = 0, axes=FALSE, col = "grey", add = TRUE)

다른 해결책은 x 축 대신 0에서 1까지의 선을 추가하는 것이지만 중앙 그래픽을 통과하고 싶습니다 ... 예를 들어이 그래픽

여기에 이미지 설명을 입력하십시오

답변:


9

나는 이것이 당신이 손으로 그린 ​​다이어그램과 같은 것을 생산할 것이라고 생각합니다.

data    <- c(0.4, 0.7, 0.75, 0.82, 0.9)
endaxis <- c(0, 1)  # endpoints of axis
datamm  <- c(min(data), max(data))
boxplot(data, horizontal = TRUE, range = 0, ylim = endaxis,
                    axes = FALSE, col = "grey", add = FALSE)
arrows(endaxis, 1,  datamm, 1,  code = 1, angle = 90, length = 0.1)
valuelabels <- c(endaxis[1], round(fivenum(data)[2], digits = 2) ,
                 round(fivenum(data)[4], digits = 2), endaxis[2]  ) 
text(x = valuelabels, y = c(1.05, 1.25, 1.25, 1.05), labels = valuelabels)

값 레이블이있는 R 상자 그림

아마도 더 좋은 방법이있을 것입니다. ROC 플롯에 맞게 변경해야 할 수도 있습니다.add = FALSE


1
글쎄, 귀하의 답변은 OP가 요청한 것에 더 가깝습니다 (그래서 +1했습니다). 그러나 나는 이것이 더 이상 상자 그림이 아니라고 생각하거나 적어도 가능한 외가 가치를 찾는 것에 대한 관심을 느슨하게합니다. 참고로 상자 그림을 조금 더 사용자 정의 할 수 있습니다 ( pars가로 세로 비율 ( boxwex)과 수염 크기 ( ) 를 줄이려면 인수 참조 staplewex).
chl

8

독립형 버전의 경우 다음과 같이 시도하십시오.

bxp <- boxplot(rnorm(100), horizontal=TRUE, axes=FALSE)
mtext(c("Min","Max"), side=3, at=bxp$stats[c(1,5)], line=-3)

를 호출 할 때 boxplot특히 "5 자리"와 같은 정보를 얻을 수 있습니다 .

당신이 원하는 경우 다른 그래픽 사용에 중첩 수 add=T있지만 교체 mtext에 의해 text; 값 을 설정해야 합니다 (다른 그래픽을 그리는 방법에 따라 다름).와이

John Maindonald 가 더 완전한 예를 제시했습니다 (코드는 웹 사이트에 있어야 함).

여기에 이미지 설명을 입력하십시오


3

완전 맞춤형 ggplot2 boxplot ...

#bootstrap
data <- data.frame(value=rnorm(100,mean = 0.5, sd = 0.2),group=0)
#processing
metaData <- ddply(data,~group,summarise,
            mean=mean(data$value),
			sd=sd(data$value),
            min=min(data$value),
			max=max(data$value),
            median=median(data$value),
			Q1=0,Q3=0
			)
bps <- boxplot.stats(data$value,coef=1.5) 
metaData$min <- bps$stats[1] #lower wisker
metaData$max <- bps$stats[5] #upper wisker
metaData$Q1 <- bps$stats[2] # 1st Quartile
metaData$Q3 <- bps$stats[4] # 3rd Quartile

#adding outliers
out <- data.frame() #initialising storage for outliers
if(length(bps$out) > 0){
	for(n in 1:length(bps$out)){
		pt <-data.frame(value=bps$out[n],group=0) 
		out<-rbind(out,pt) 
	}
}
#adding labels
labels <-data.frame(value=metaData$max, label="Upper bound")
labels <-rbind(labels,data.frame(value=metaData$min, label="Lower bound"))
labels <-rbind(labels,data.frame(value=metaData$median, label="Median"))
labels <-rbind(labels,data.frame(value=metaData$Q1, label="First quartile"))
labels <-rbind(labels,data.frame(value=metaData$Q3, label="Third quartile"))

#drawing
library(ggplot2)
p <- ggplot(metaData,aes(x=group,y=mean))
p <- p + geom_segment(aes(x=c(0.1,0,0.1),y=c(0,0,1),xend=c(0,0,-0.1),yend=c(0,1,1)))
p <- p + geom_text(aes(y=c(0,1),label=c(0,1),x=0.2))
p <- p + geom_errorbar(aes(ymin=min,ymax=max),linetype = 1,width = 0.5) #main range
p <- p + geom_linerange(aes(ymin=min,ymax=max),linetype = 1,width = 0, color="white")# white line range
p <- p + geom_linerange(aes(ymin=min,ymax=max),linetype = 2)    #main range dotted
p <- p + geom_crossbar(aes(y=median,,ymin=Q1,ymax=Q3),linetype = 1,fill='white') #box
if(length(out) >0) p <- p + geom_point(data=out,aes(x=group,y=value),shape=4) # drawning outliers if any
p <- p + scale_x_discrete(breaks=c(0))
p <- p + scale_y_continuous(name= "Value")
p <- p + geom_text(data=labels,aes(x=0.5,y=value,label=round(value,2)),colour="black",angle=0,hjust=0.5, vjust=0.5,size=3)

p <- p + opts(panel.background = theme_rect(fill = "white",colour = NA)) 
p <- p + opts(panel.grid.minor = theme_blank(), panel.grid.major = theme_blank())
p <- p + opts(axis.title.x=theme_blank())
p <- p + opts(axis.text.x = theme_blank())
p <- p + opts(axis.title.y=theme_blank())
p <- p + opts(axis.text.y = theme_blank())

p + coord_flip()

결과:

여기에 이미지 설명을 입력하십시오

... 코드가 약간 추악하지만 올바른 방법으로 작동합니다.


2

여기 내 솔루션 구현이 있습니다. 평균값을 매핑하지 않기로 결정했습니다. 남은 공간이 많지 않습니다. 또한 0에서 1까지의 줄은 이상하게 보입니다. 모두 감사합니다.

data <- read.table("roc_average.txt")
bxp <- boxplot(data, horizontal = TRUE, range = 0, axes = FALSE, col = "grey", add = TRUE, at = 0.2, varwidth=FALSE, boxwex=0.3)
valuelabels <- c(round(fivenum(data)[2], digits = 2), round(fivenum(data)[4], digits = 2))
text(x = valuelabels, y = c(0.35, 0.35), labels = valuelabels, font = 2)
mtext(c(min(round(data, digits = 2)),max(round(data, digits = 2))), side=1, at=bxp$stats[c(1,5)], line=-3, font = 2)

상자 그림과 roc 곡선


박스 플롯은 AUC를 요약해야합니까? 그렇다면 왜 최소값이 0.5입니까?
chl

여러 ROC가 0.5 미만이어야하기 때문에 그렇습니다. 무엇이 잘못되었는지 파고 ...
Vladimir Chupakhin

이것이 ROC AUC를 0.5 미만의 값으로 반전시킨 점이므로 그래픽을 다시 만들어야합니다. 고마워요!
Vladimir Chupakhin

돌아와서 +1합니다. 업데이트를 기다리고 있습니다. 다른 분류기로 작업하는 경우 ROCR을 살펴볼 수 있습니다 .
chl

나는 ROCR로 ROC 곡선을 했어요
Vladimir Chupakhin
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.