zwdbordeaux
准备用R 画个柱状图,结果发现那么复杂,好歹弄得差不多了,又发现图例很难添加, 一个小图已经折磨了快3个小时了,彻底疯掉,等待达人指点了!
一组数据:
L1 L2 L3 L4
a 1, 2, 3, 4
b 1, 2, 3, 4,
c 1, 2, 3, 4
假设要以a,b,c为分类轴,L1,L2,L3为三个变量做柱状图
#-------------organize the data---------------
data1<-matrix(data=rep(c(1:4),3),nrow=4,ncol=3,dimnames=list(c("L1","L2","L3","L4"),c("A","B","C")),byrow=TRUE)
#----------draw the barplot--------------
barplot(data1,beside=TRUE,angle=c(0,0,45,0),ylim=c(0,5),space=c(0,1.3),density=c(-1,-1,20,-1),col=c("black","grey","black","white"),legend.text=c("L1","L2","L3","L4")) #
abline(h=0)
box()
#---------------------------------
问题出来了,
1)我没有办法控制 legend字体的大小,如果我在barplot()中添加cex将会遇到报错。
2)没有办法控制legend 的位置,有的时候leged会和画的那些柱子重叠!!
上面两个问题怎么解决呢?
-----------------------------
后来我想到了legend
所以用了:
将barplot(legend.text=FALSE)
然后 用legend 添加
#-----------------------------------
barplot(data1,beside=TRUE,angle=c(0,0,45,0),ylim=c(0,5),space=c(0,1.3),density=c(-1,-1,20,-1),col=c("black","grey","black","white"),legend.text=FALSE)#
abline(h=0)
box()
legend(5,4,legend=c("L1","L2","L3","L4"), density=c(-1,-1,20,-1),col=c("black","grey","black","white"),angle=45,cex=0.8)
#----------------------------------------------------
这样做似乎应该就可以把问题解决了吧,我可以调控位置,可以调控字体大小。
可是却郁闷的发现图例中柱子的填充有问题!!!!! 根本不对 col 响应!!!!
多次尝试之后,开始怀疑是legend的bug!
TNND,真是应了那句话“不是驴不走,就是磨不转!”。
谁来解救俺于水火??!!
bjt
> barplot(data1,beside = T,col = gray(seq(0,1,len = 4)))
> legend(5,4,c("L1","L2","L3","L4"),pt.bg = gray(seq(0,1,len = 4)),pch = 22)