Barplot x-axis labels with hierarchical grouping variables on separate lines

In Excel with data organized like this:

Bare NP Singular-Marked NP Plural-Marked NP BrP Speakers AmE Speakers BrP Speakers AmE Speakers BrP Speakers AmE Speakers Plural Interpretation 0.005747126 0.006896552 0.194117647 0.124567474 0.872093023 0.985815603 Plural & Singular Interpretation 0.649425287 0.910344828 0.029411765 0.051903114 0.127906977 0.014184397 Singular Interpretation 0.344827586 0.082758621 0.776470588 0.823529412 0 0 

I can create a complex barchart that looks like this:

enter image description here

Is there an easy way to reproduce how the x axis is divided into separate conditions (ie, "Bare NP", "Singular-Marked NP" and "Plural-Marked NP") using R

All I can think of at the moment:

 pluralInterp <- c(0.005747126,0.006896552,0.194117647,0.124567474,0.872093023,0.985815603) pluralAndSingInterp <- c(0.649425287,0.910344828,0.029411765,0.051903114,0.127906977,0.014184397) singInterp <- c(0.344827586,0.082758621,0.776470588,0.823529412,0,0) a <- rbind(pluralInterp,pluralAndSingInterp,singInterp) colnames(a) <- c("Bare NP ~ BrP Speakers", "Bare NP ~ AmE Speakers", "Singular-Marked NP ~ BrP Speakers", "Singular-Marked NP ~ AmE Speakers", "Plural-Marked NP ~ BrP Speakers", "Plural-Marked NP ~ AmE Speakers" ) barplot(a, col=c("blue","red","purple"), ylab="Frequency of Interpretation", xlab="Form of NP and Native Language", main="Frequency of BrP and AmE Interpretations of NPs in Neutral Environments" ) 

Which gives the following graph:

enter image description here

+4
source share
1 answer

A little manual adjustment of the fields and calling axis() twice can lead you there. Saving a line drawing, for example bp <- barplot(...) , saves the midpoints of each bar for future reference.

 oldpar <-par(mar=c(7,5.1,4.1,2.1)) bp <- barplot(a, col=c("blue","red","purple"), ylab="Frequency of Interpretation", xlab="", main="Frequency of BrP and AmE Interpretations \n of NPs in Neutral Environments", axisnames=FALSE ) 

Then you can use the values ​​stored in bp for proper alignment. You can align group and subgroup labels with the line=... argument to axis()

 avgpts <- tapply(bp,rep(1:3,each=2),mean) grps <- c("Bare NP","Singular-Marked NP","Plural-Marked NP") subgrps <- c("BrP","AmE") axis(1,at=bp,labels=rep(subgrps,3), cex.axis=0.7) axis(1,at=avgpts,labels=grps, cex.axis=0.7,line=1.5,lwd=0) title(xlab="Form of NP and Native Language",line=4.5) 

Result:

enter image description here

+4
source

Source: https://habr.com/ru/post/1501957/


All Articles