0

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

 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 也可在 Dropbox 上找到

4

2 回答 2

2

它正在做你告诉它的事情。你看过 和 的值left.axis.posright.axis.ticks

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

于 2014-04-28T01:17:30.053 回答
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)

在此处输入图像描述

于 2014-04-28T01:18:39.707 回答