Changing the labels on the x-axis with barplot is tedious. I usually use the gridBase package for this purpose.
CODE:
# 1: generating some mockup data
speech = data.frame(frequency=c(500,250,125,75,20,10,5,3,1,1,1),proportion=c(c(500,250,125,75,20,10,5,3,1,1,1)/100))
# 2: calling barplot with filled bars and with space=0 (no space between bars)
midpts=barplot(height=speech$proportion,col="green",space=0,border="green",xlab="Speech Frequency", ylab="Percentage of Words")
# 3: loading gridBase, and using it to generate the x-axis labels
library(gridBase)
vps <- baseViewports()
pushViewport(vps$inner, vps$figure, vps$plot)
grid.text(speech$frequency, x = unit(midpts, "native"), y=unit(-0.5, "lines"), just="right", rot=90)
RESULT: