R horizontal barplot with axis labels split between two axis

时间:2016-08-31 12:32:31

标签: r bar-chart

I have a horizontal barplot, with zero in the middle of the x-axis and would like the name for each bar to appear on the same side as the bar itself. The code I am using is:

abun<-data$av.slope
species<-data$Species
cols <- c("blue", "red")[(abun > 0)+1] 
barplot(abun, main="Predicted change in abundance", horiz=TRUE,
xlim=c(-0.04,0.08), col=cols, names.arg=species, las=1, cex.names=0.6)

I have tried creating two separate axes and the names do appear on the desired side for each bar, but are not level with the appropriate bar. I will try and upload an image of the barplot, am still very new to R, apologies if I am missing something basic!

barplot1- names in correct position but all on one axis

barplot2- names on both sides of plot but not in line with appropriate bar

1 个答案:

答案 0 :(得分:2)

我们可以使用mtext完成此操作:

生成数据

由于您没有在问题中包含您的数据,因此我生成了自己的虚拟数据集。如果您发布dput数据,我们可以根据您的数据调整此解决方案。

set.seed(123)
df1 <- data.frame(x = rnorm(20),
                   y = LETTERS[1:20])
df1$colour <- ifelse(df1$x < 0, 'blue', 'red')

制作情节

bp <- barplot(df1$x, col = df1$colour, horiz = T)
mtext(side = ifelse(df1$x < 0, 2, 4),
      text = df1$y,
      las = 1,
      at = bp,
      line = 1)

enter image description here