我需要在R中做一个barplot,然后使用par(new=T)用新的轴在它上面放一个散点图。

如果我设置xlim,那么一切都会很好:

xx=c(0,12)
k=barplot(1:10,xlim=xx)
par(new=T)
plot(x=k,y=1:10/2,xlim=xx,xaxt='n',yaxt='n')
axis(1,at=k,labels=1:10)
axis(4)

但是,我无需设置xlim即可执行此操作。我以为par('usr')可以解决我的问题,但我已经尝试了很长时间,但没有成功。

这是我正在使用的:
k=barplot(1:10)
xx=par('usr')[1:2]
par(new=T)
plot(x=k,y=1:10/2,xlim=xx,xaxt='n',yaxt='n')
axis(1,at=k,labels=1:10)
axis(4)

在这种情况下,x轴和新点未正确居中。我究竟做错了什么?

万一它以任何方式需要或有用,以下是R.Version()的输出:
$platform
[1] "x86_64-pc-linux-gnu"
$arch
[1] "x86_64"
$os
[1] "linux-gnu"
$system
[1] "x86_64, linux-gnu"
$status
[1] ""
$major
[1] "3"
$minor
[1] "1.1"
$year
[1] "2014"
$month
[1] "07"
$day
[1] "10"
$`svn rev`
[1] "66115"
$language
[1] "R"
$version.string
[1] "R version 3.1.1 (2014-07-10)"
$nickname
[1] "Sock it to Me"

编辑:

这个肮脏的hack(两次运行barplot)解决了这个问题,但远非一个正确的解决方案:
k=barplot(1:10)
xx=par('usr')[1:2]
k=barplot(1:10,xlim=xx)
par(new=T)
plot(x=k,y=1:10/2,xlim=xx,xaxt='n',yaxt='n')
axis(1,at=k,labels=1:10)
axis(4)

根据?barplot:
width
optional vector of bar widths. Re-cycled to length the
number of bars drawn. Specifying a single value will have no visible
effect unless xlim is specified.

当指定xlim时,barplot似乎不同。也许这会导致问题?

最佳答案

您尝试使用add=TRUE选项,但是您手动设置了轴。这将使任务复杂化,因为每个图都将创建自己的刀刃和图设置。创建barplot后,使用points叠加点就更容易了。

## set `ylim`  to not "cut" the last point.
k=barplot(1:10,ylim=c(0,11))
## points will use the plot scales already created
points(x=k,y=1:10/2,col='red',pch=20,cex=4)
axis(1,at=k,labels=1:10)
## to set new different axes in the right
par(new=TRUE)
plot(x=k,y=1:10/2,type='n',xaxt='n',yaxt='n')
axis(4)

关于r - R中的Barplot-恢复xlim并使用par(new = T),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26539545/

10-11 21:55