我正在尝试在条形图之上叠加错误栏,并且工作正常,除了错误栏自己计算,因此任何缺失的x值都会打破情节。你可以在这里看到: http://flyordie.sin.khk.be/r/asnumeric.PNG
当我将x值更改为字符(as.character(xvalues))时,会发生以下情况: http://flyordie.sin.khk.be/r/ascharacter.PNG
x和y轴改变位置。我该怎么办?因为我想不出别的什么。
要重现类似的问题,这里有2个脚本
正常
set.seed(1)
x <- 1:10
y <- x + rnorm(10)
delta <- runif(10)
errbar( x, y, y + delta, y - delta )
字符
set.seed(1)
x <- 1:10
y <- x + rnorm(10)
delta <- runif(10)
errbar( as.character(x), y, y + delta, y - delta )
亲切的问候 凯西勒爵士
答案 0 :(得分:0)
当errbar()
参数是因子或字符变量而不是数字时,绘制水平误差线是x
函数的预期行为。当你说缺少x
值会破坏你的情节时,我会将你解释为打破连接点的线条。要在不破坏线条的情况下绘制误差线,我只需删除缺少x
值的观察值:
require(Hmisc)
## Your example data
set.seed(1)
x <- 1:10
y <- x + rnorm(10)
delta <- runif(10)
## Make some data vanish
x[c(5,6)] <- NA
## Create an index for non-missing observations in `x`
i <- which(!is.na(x))
errbar(x[i], y[i], y[i] + delta[i], y[i] - delta[i], type = "b")
修改强> 根据下面的评论,如果platenames只是你的x轴刻度线标签,那么下面的内容如何?
require(Hmisc)
## Your example data
set.seed(1)
# `x` should not contain missing values, and is not your platenames vector
x <- 1:10
y <- x + rnorm(10)
delta <- runif(10)
# xticks represents your platenames vector with missing values
xticks <- c(1, 2, 3, 4, NA, NA, 7, 8, 9, 10)
errbar(x, y, y + delta, y - delta, type = "b")
axis(1, at = xticks, labels = xticks)
然而,对我来说,为什么你会观察缺少x轴刻度标记是令人困惑的。正如Andrie建议的那样,或许你可以澄清为什么有些platenames缺失,以及platenames是否真的应该是你的x值,或者它们是否只是标签。如果它们只是标签,您可能希望使用mtext()
:
errbar(x, y, y + delta, y - delta, type = "b")
mtext(text = xticks, side = 3, line = 2, at = xticks)
根据side
调整line
和?mtext
以移动标签。