我注意到 ggplot2
的 geom_text()
geom中出现了意想不到的行为 . 如果属性 hjust
和 vjust
被指定为字符串,则R返回强制错误,尽管图表似乎正常 . 问题出现在ggplot2-based package我创建的精简示例仍然产生错误 .
首先,我用 qplot()
试了一下
##qplot version
library(ggplot2)
p <- qplot(cty, hwy,
label = drv,
hjust = "right",
geom = "text",
data = mpg
)
print(p)
我收到了这个错误:
Warning message:
In validDetails.text(x) : NAs introduced by coercion
然后我用 ggplot()
尝试了它:
##ggplot version
library(ggplot2)
p <- ggplot(
aes(x = cty,
y = hwy
), data = mpg
)
p <- p + geom_text(
aes(label = drv),
hjust = "right"
)
print(p)
并获得了相同的情节,并且出现了相同的错误:
Warning message:
In validDetails.text(x) : NAs introduced by coercion
然后我尝试设置hjust和vjust:
library(ggplot2)
p <- ggplot(
aes(x = cty,
y = hwy
), data = mpg
)
p <- p + geom_text(
aes(label = drv),
hjust = "right",
vjust = "top"
)
print(p)
使用字符串设置两个参数时,R返回两个强制错误:
Warning messages:
1: In validDetails.text(x) : NAs introduced by coercion
2: In validDetails.text(x) : NAs introduced by coercion
但是,当参数是数字时,R不会返回强制错误:
## Using numbers instead of strings
library(ggplot2)
p <- ggplot(
aes(x = cty,
y = hwy
), data = mpg
)
p <- p + geom_text(
aes(label = drv),
hjust = 0,
vjust = 0,
data = mpg
)
print(p)
我不太清楚为什么会这样,或者它是否重要,但我没想到 .
ggplot2文件不同意
Hadley's book(p.196)说 hjust
和 vjust
可以接受字符串参数:
字符串(或图例)的对齐定义字符串中放置在给定位置的位置 . 水平和垂直对齐有两个值 . 值可以是:字符串:“left”,“right”,“center”,“center”,“bottom”和“top” . 一个介于0和1之间的数字,给出字符串中的位置(从左下角开始) .
但是版本0.8.9中 geom_text()
的man文件说hjust和vjust是数字的,虽然它没有说它们只能是数字:
美学以下美学可与geom_text一起使用 . 使用aes函数将美学映射到数据中的变量:geom_text(aes(x = var))x:x位置(必需)y:y位置(必需)标签:文本标签(必需)颜色:边框颜色大小:大小angle:angle hjust:水平对齐,介于0和1之间vjust:垂直对齐,介于0和1 alpha之间:透明度
2 回答
所以,我不太了解WHAT CODE定义或消耗hjust / vjust,但是使用TextMate的“在项目中查找”(在ggplot2 / R /目录中)为hjust,我没有看到任何看起来像它们的行hjust的定义或实现......只是它被列为有效aes的地方以及传递到的地方 .
这让我想去看看网格......
http://stat.ethz.ch/R-manual/R-patched/library/grid/html/grid.text.html
这让我想知道更多关于grid.text的定义方式
所以,它是一个textGrob,而且,只是,hjust,和vjust只是被传递到它...关闭到textGrob
所以,这是一个grob ........... off to grob ......
那里没什么好帮的,所以我谷歌
R网格hjust vjust
我发现,在重写谷歌的搜索自动更正后
http://rwiki.sciviews.org/doku.php?id=tips:graphics-grid:hvjust
回想一下Hadley的书,我注意到p.196参考文献实际上并没有提出正确的意见或仅仅是正当理由 .
阅读文档
我看到
所以,这是我的想法 .
just参数可以是字符串或数字
hjust和vjust只是数字,只能覆盖
如果您尝试为它们使用字符串,它可能会"work",但会发出警告
那么,让我们看看grid.text演示代码,特别是draw.text函数,它们只使用它们,并且似乎成功地使用字符串值:
现在注意区别,如果我改变draw.text使用hjust和vjust AS STRINGS
长话短说:我认为当你使用hjust或vjust作为字符串时,你违反了文档(它的值应该是数字0 <= x <= 1),如果你想使用字符串,你必须使用just参数....
hjust
和vjust
应该是数字,请查看手册(?geom_text
):hjust':水平对齐,介于0和1之间
'vjust':垂直对齐,介于0和1之间