左右Y轴未正确格式化

时间:2014-04-28 00:37:04

标签: r plot multiple-axes

假设我想为以下数据(计数)生成一个条形图:

 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轴要么太远(在左边),要么在太远(在右边)。

enter image description here

原始PDF也是available on Dropbox

2 个答案:

答案 0 :(得分:2)

这正是你正在告诉它的。您是否查看了left.axis.posright.axis.ticks的值?

使用quantile选择刻度位置非常不寻常,它给出的值对应于最小值,最大值和3个四分位数(因为您使用的是默认参数)。更常见的是使用跨越图的整个范围的值(对于条形图包括0)并且间隔相等。查看pretty函数,可能rangemax

答案 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)

enter image description here