R中的Barplot - 恢复xlim并使用par(new = T)

时间:2014-10-24 00:09:44

标签: r

我需要在R中绘制一个条形图,然后使用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"

修改

这个肮脏的黑客(两次运行条形图)解决了这个问题,但它远远不是一个合适的解决方案:

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时,条形图看起来不同。也许这会导致问题?

1 个答案:

答案 0 :(得分:1)

您尝试使用add=TRUE选项,但手动设置了轴。这将使任务复杂化,因为每个绘图将创建自己的骶骨和绘图设置。创建条形图后,更容易使用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)

enter image description here