假设我想为以下数据(计数)生成一个条形图:
A B C D
3030 3049 3104 3018
但我也想把一个线图重叠在以下数据的条形图上(lg):
A 2.485294117647059
B 2.465160980297934
C 2.414123006833713
D 2.457267020762916
到目前为止,这是我的代码:
b<-barplot(counts,col='black',border=FALSE,axes=FALSE,cex.names = 0.75)
left.axis.pos<-c(quantile(counts))
axis(2,at=left.axis.pos,labels=left.axis.pos,las=2,cex.axis=0.75)
mtext("Number",side=2,line=3,cex=1)
right.axis.ticks<-c(quantile(as.numeric(lg[,2])))
axis(4,at=right.axis.ticks,labels = right.axis.ticks,las=2,cex.axis=0.75)
mtext("ratio",side=4,line=2,cex=1)
lines(lg[,1],as.numeric(lg[,2]), col='grey',lwd=2)
dev.off()
然而,y轴要么太远(在左边),要么在太远(在右边)。
原始PDF也是available on Dropbox。
答案 0 :(得分:2)
这正是你正在告诉它的。您是否查看了left.axis.pos
和right.axis.ticks
的值?
使用quantile
选择刻度位置非常不寻常,它给出的值对应于最小值,最大值和3个四分位数(因为您使用的是默认参数)。更常见的是使用跨越图的整个范围的值(对于条形图包括0)并且间隔相等。查看pretty
函数,可能range
或max
。
答案 1 :(得分:2)
您可能需要稍微使用设置来按预期组合:
oldmar <- par("mar")
par(mar=c(5.1,4.1,4.1,3.1))
b <- barplot(counts,col='black',border=FALSE,axes=FALSE,cex.names = 0.75)
axis(2,cex.axis=0.75, las=2)
mtext("Number",side=2,line=3,cex=1)
par(new=TRUE)
barplot(rep(NA,4),ylim=range(as.numeric(lg[,2])),axes=FALSE)
axis(4, cex.axis=0.75, las=2)
lines(b, as.numeric(lg[,2]),col="grey",lwd=2)
box()
par(mar=oldmar)
par(new=FALSE)