2013-08-16 132 views
1

我的R中的数据是这样的:如何合并R中的barplot中的列标签(堆叠barplot)?

1-12 1-12 1-15 1-15 1-20 1-20 2-6 2-6 3-1-1 3-1-1 3-1 3-1 3-2 3-2 3-3 3-3 
N 0 0 14 0 17 0 9 0 27  0 9 0 13 0 33 0 
P 0 0 0 12 0 12 0 5  0 13 0 6 0 0 0 9 
F 0 0 0 0 0 0 0 2  0 14 0 0 0 6 0 20 

通过dput(数据)的结果R是:

structure(c(0L, 0L, 0L, 0L, 0L, 0L, 14L, 0L, 0L, 0L, 12L, 0L, 
17L, 0L, 0L, 0L, 12L, 0L, 9L, 0L, 0L, 0L, 5L, 2L, 27L, 0L, 0L, 
0L, 13L, 14L, 9L, 0L, 0L, 0L, 6L, 0L, 13L, 0L, 0L, 0L, 0L, 6L, 
33L, 0L, 0L, 0L, 9L, 20L), .Dim = c(3L, 16L), .Dimnames = list(
c("N", "P", "F"), c("1-12", "1-12", "1-15", "1-15", "1-20", 
"1-20", "2-6", "2-6", "3-1-1", "3-1-1", "3-1", "3-1", "3-2", 
"3-2", "3-3", "3-3"))) 

,我的代码是:

barplot(data,space=c(1,0.25),legend=rownames(data),col=c('white','black','grey'),las=2) 

它看起来像一个正常的条形图,每一列在底部都有一个标签...

但是,那里在x轴上有太多的标签,我想将两列的名称合并为一个(因为它们具有相同的名称),即在前两列的中间,只有一个标签“1-12 “在底部,总共会有八个标签。我怎样才能做出这个改变?

非常感谢!

+0

我不想猜测这可能是什么结构,然后尝试将它拼接在一起,矩阵或故障rmed data.frame或其他什么,那么为什么你不要在这个对象上发布dput(。)? –

+0

@Dwin - 同意。如果barplot已经在工作,它必须是一个矩阵。 – thelatemail

+0

是的,因为我仍然不能把图像的问题,我张贴dput() – user2687500

回答

2

如果你只是希望让每个组下的居中标签,你可以这样做:

# suppress the x-axis and save your original plot's bar locations 
bp <- barplot(data,space=c(1,0.25),legend=rownames(data), 
      col=c('white','black','grey'),las=2, 
      xaxt="n") 

# draw a new axis using these values 
axis(1,at=rowMeans(matrix(bp,ncol=2,byrow=TRUE)), 
    labels=unique(colnames(data)),lty=0) 

enter image description here

忽略过程的重叠传说......这可以通过固定在原始barplot中使用legend.args将其更好使用

+0

感谢您对dput的建议!我把dput的结果放在问题中,所以你可以看看它......实际上我使用data = rbind(F,P,N),然后使用colnames(data)= c(“1-12”,“ 15“,”1-20“)来重命名列。 但是,我不想生产一个将P,F,N堆叠在一起的列,我的柱状图就像所有的“N”在一个列中,“F”“N”在一个列中组合在一起。这与barplot无关,我只是想改变x轴的标签。 – user2687500

+0

@ user2687500 - 我已编辑,希望能更好地解决您的问题。 – thelatemail