R:结合条形图和线图; x 轴上的线点和刻度未与条形图对齐
R: combine barplot and lineplot; line-dots and ticks on the x-axis not aligned to barplot
我想在一个图中绘制行为心理学实验的两个结果:通过 marplot 的表现(以正确答案的百分比衡量)和通过线图的反应时间(以毫秒为单位)。
除了一件事我已经想通了:x 轴上的刻度线和线图中的点不与条形中心对齐。有人建议将条形图保存为一个对象,然后使用 "at=" 它适用于 x 轴上的刻度但不适用于折线图中的点。我也无法通过使用 "lines" 函数使其工作,因为比例不同(条形图左侧为 .7-1.0,折线图右侧为 400-900)。
par(mar=c(6, 4, 4, 4))
m<-barplot(c(0.87,0.83,0.79),ylim=c(0.7,1),xpd=FALSE,ylab="% correct")
axis(1,at=m,labels=c("cond. A", "cond. B", "cond. C"))
par(new=T)
plot(c(720, 800, 830), pch=15, ,ylim=c(400,900), xlab="", ylab="",
axes=F, type="b")
mtext("reaction time [ms]",side=4,line=2.5)
axis(4, ylim=c(400,900))
感谢您的帮助
在您的第二个绘图中,将 xlims
设置为等于 barplot
的值。使用 par('usr')
获取当前限制(长度为 4 的向量;xmin、xmax、ymin、ymax)。然后当你绘制这条线时,你可以使用 m
作为 x 位置,它会排成一行,因为你的 xlims
也排成一行。
par(mar=c(6, 4, 4, 4))
m<-barplot(c(0.87,0.83,0.79),ylim=c(0.7,1),xpd=FALSE,ylab="% correct")
axis(1,at=m,labels=c("cond. A", "cond. B", "cond. C"))
xlims <- par('usr')[1:2] # <-- get xlims
par(new=T)
plot(m, c(720, 800, 830), # <-- supply x coords
pch=15, ,ylim=c(400,900), xlab="", ylab="",
axes=F, type="b", xlim=xlims) # <-- supply xlims
mtext("reaction time [ms]",side=4,line=2.5)
axis(4, ylim=c(400,900))
我想在一个图中绘制行为心理学实验的两个结果:通过 marplot 的表现(以正确答案的百分比衡量)和通过线图的反应时间(以毫秒为单位)。
除了一件事我已经想通了:x 轴上的刻度线和线图中的点不与条形中心对齐。有人建议将条形图保存为一个对象,然后使用 "at=" 它适用于 x 轴上的刻度但不适用于折线图中的点。我也无法通过使用 "lines" 函数使其工作,因为比例不同(条形图左侧为 .7-1.0,折线图右侧为 400-900)。
par(mar=c(6, 4, 4, 4))
m<-barplot(c(0.87,0.83,0.79),ylim=c(0.7,1),xpd=FALSE,ylab="% correct")
axis(1,at=m,labels=c("cond. A", "cond. B", "cond. C"))
par(new=T)
plot(c(720, 800, 830), pch=15, ,ylim=c(400,900), xlab="", ylab="",
axes=F, type="b")
mtext("reaction time [ms]",side=4,line=2.5)
axis(4, ylim=c(400,900))
感谢您的帮助
在您的第二个绘图中,将 xlims
设置为等于 barplot
的值。使用 par('usr')
获取当前限制(长度为 4 的向量;xmin、xmax、ymin、ymax)。然后当你绘制这条线时,你可以使用 m
作为 x 位置,它会排成一行,因为你的 xlims
也排成一行。
par(mar=c(6, 4, 4, 4))
m<-barplot(c(0.87,0.83,0.79),ylim=c(0.7,1),xpd=FALSE,ylab="% correct")
axis(1,at=m,labels=c("cond. A", "cond. B", "cond. C"))
xlims <- par('usr')[1:2] # <-- get xlims
par(new=T)
plot(m, c(720, 800, 830), # <-- supply x coords
pch=15, ,ylim=c(400,900), xlab="", ylab="",
axes=F, type="b", xlim=xlims) # <-- supply xlims
mtext("reaction time [ms]",side=4,line=2.5)
axis(4, ylim=c(400,900))