Hmisc包代理奇怪的数字= / =字符

时间:2011-04-26 09:39:36

标签: r character numeric

我正在尝试在条形图之上叠加错误栏,并且工作正常,除了错误栏自己计算,因此任何缺失的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 )

亲切的问候 凯西勒爵士

1 个答案:

答案 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以移动标签。