Cómo mostrar la frecuencia en la parte superior de cada factor en una barra de barras en R

Posible duplicado:
agregar texto a la barra horizontal en el eje R, y a diferentes escalas?
Anotar valores por encima de las barras (ggplot facetado)

Usando el siguiente código, espero mostrar un número sobre cada columna que corresponda al valor y de esa columna. En otras palabras, estoy tratando de obtener “QnWeight_initial” para mostrar 593 en la parte superior de la barra gris y así y …

Mis datos:

data<-structure(list(V1 = structure(c(2L, 1L), .Label = c("593", "QnWeight_initial" ), class = "factor"), V2 = structure(c(2L, 1L), .Label = c("566", "Head"), class = "factor"), V3 = structure(c(2L, 1L), .Label = c("535", "V1"), class = "factor"), V4 = structure(c(2L, 1L), .Label = c("535", "V2"), class = "factor"), V5 = structure(c(2L, 1L), .Label = c("535", "V3"), class = "factor"), V6 = structure(c(2L, 1L), .Label = c("482", "Left_Leg"), class = "factor"), V7 = structure(c(2L, 1L), .Label = c("474", "Left_Antenna"), class = "factor"), V8 = structure(c(2L, 1L), .Label = c("237", "Qn_Weight_Loss"), class = "factor"), V9 = structure(c(2L, 1L ), .Label = c("230", "Days_wrkr_eclosion"), class = "factor"), V10 = structure(c(2L, 1L), .Label = c("81", "Growth_all"), class = "factor"), V11 = structure(c(2L, 1L), .Label = c("79", "Growth_1_2"), class = "factor"), V12 = structure(c(2L, 1L), .Label = c("62", "Growth_1_3"), class = "factor"), V13 = structure(c(2L, 1L), .Label = c("60", "Growth_2_3"), class = "factor"), V14 = structure(c(2L, 1L), .Label = c("51", "Right_Antenna" ), class = "factor"), V15 = structure(c(2L, 1L), .Label = c("49", "Left_Leg_Remeasure"), class = "factor"), V16 = structure(c(2L, 1L), .Label = c("49", "Right_Leg"), class = "factor"), V17 = structure(c(2L, 1L), .Label = c("47", "Head_Remeasure"), class = "factor"), V18 = structure(c(2L, 1L), .Label = c("46", "Left_Antenna_Remeasure" ), class = "factor")), .Names = c("V1", "V2", "V3", "V4", "V5", "V6", "V7", "V8", "V9", "V10", "V11", "V12", "V13", "V14", "V15", "V16", "V17", "V18"), class = "data.frame", row.names = c(NA, -2L)) dat<-data.frame(fac=unlist(data[1,, drop=FALSE]), freqs=unlist(data[2,, drop=FALSE])) 

La ttwig

 barplot( as.numeric( as.character(dat$freqs)) , main="Sample Sizes of Various Fitness Traits", xaxt='n', xlab='', width=0.85, ylab="Frequency") par(mar=c(5,8,4,2)) labels<-unlist(data[1,,drop=FALSE]) text(1:18, par("usr")[3] -0.25, srt=90, adj=1,labels=labels,xpd=TRUE, cex=0.6) 

Está teniendo problemas porque dat$freqs es un factor, aunque su representación impresa parece “numérica”. (Casi siempre es útil escribir str(foo) – aquí str(dat) o str(dat$freqs) – para echar un vistazo a la estructura real de los datos con los que estás trabajando.)

En cualquier caso, una vez que haya convertido dat$freq a la clase "numeric" , la construcción de la ttwig se vuelve sencilla:

 ## Make the frequencies numbers (rather than factors) dat$freqs <- as.numeric(as.character(dat$freqs)) ## Find a range of y's that'll leave sufficient space above the tallest bar ylim <- c(0, 1.1*max(dat$freqs)) ## Plot, and store x-coordinates of bars in xx xx <- barplot(dat$freqs, xaxt = 'n', xlab = '', width = 0.85, ylim = ylim, main = "Sample Sizes of Various Fitness Traits", ylab = "Frequency") ## Add text at top of bars text(x = xx, y = dat$freqs, label = dat$freqs, pos = 3, cex = 0.8, col = "red") ## Add x-axis labels axis(1, at=xx, labels=dat$fac, tick=FALSE, las=2, line=-0.5, cex.axis=0.5) 

enter image description here