Kutuları etiketleme in R


11

Herhangi bir eksen olmadan bir boxplot oluşturmak ve geçerli arsa (ROC eğrisi) eklemek gerekir, ancak boxplot için daha fazla metin bilgisi eklemek gerekir: min ve max için etiketler. Geçerli kod satırı aşağıdadır (geçerli grafik de).

Yardımınız için çok teşekkürler.

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

Diğer çözüm, 0'dan 1'e (x ekseni yerine) satırı eklemektir, ancak merkezi çizgiden geçmesini istiyorum ... örneğin bu grafik gibi

resim açıklamasını buraya girin

Yanıtlar:


9

Bunun elle çizilmiş diyagramınız gibi bir şey ürettiğini düşünüyorum.

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)

Değer etiketli R boxplot

Muhtemelen bunu yapmanın daha iyi yolları vardır. Değişimi de dahil olmak üzere ROC grafiğinize uyacak şekilde uyarlamanız gerekebilir.add = FALSE


1
Yanıtınız OP tarafından sorulan sorulara daha yakın görünüyor (bu yüzden +1 oldum). Ancak, bu artık bir gişe değil gibi hissediyorum, ya da en azından olası dış değeri tespit ilgisini kaybeder. Dikkat çekici bir şekilde, kutu grafiğini biraz daha özelleştirebilirsiniz ( parsen boy oranını ( boxwex) ve bıyıkların boyutunu ( ) azaltmak için argümanlara bakın staplewex).
chl

8

Bağımsız bir sürüm için böyle bir şey deneyin:

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

Arama yaparken boxplot, özellikle "beş numara" gibi bazı bilgiler alabileceğinizi unutmayın .

add=Tmtexttexty

John Maindonald tarafından daha eksiksiz bir örnek verildi (kod web sitesinde olmalı):

resim açıklamasını buraya girin


3

Tamamen özelleştirilebilir 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()

Sonuç:

resim açıklamasını buraya girin

... kod belki biraz çirkin ama doğru çalışıyor.


2

İşte çözümlerin benim uygulamasıdır. Ortalama değeri haritalamamaya karar verdim, fazla yer kalmadı. Ayrıca 0 ile 1 arasındaki çizgi tuhaf görünüyor. Herkese çok teşekkürler.

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)

boxplot ile roc eğrisi


Boxplus'un AUC'yi özetlemesi gerekiyor mu? Eğer öyleyse, min değeri neden 0,5?
chl

Evet, garip görünüyor, çünkü birkaç ROC 0,5'in altında olmalı. Yanlış olanı kazmak ...
Vladimir Chupakhin

ROC AUC'sini 0,5'in altındaki değerler için ters çevirdiğim nokta budur, bu yüzden grafikler yeniden oluşturulmalıdır. Çok teşekkürler!
Vladimir Chupakhin

+1 geri gelmek için, güncellemenizi bekliyorum. Farklı sınıflandırıcılar ile çalışıyorsanız, ROCR'a bir göz atabilirsiniz .
chl

ROCR ile ROC eğrisi yaptım
Vladimir Chupakhin
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.