我正在尝试学习如何在ggplot中使用grconvertX/grconvertY。我最终的目标是通过将用户坐标转换为设备坐标,使用grid.text和grid.lines向ggplot2图形(以及可能的lattice)添加注释。我知道可以通过grobs实现,但我想知道是否有更简单的方法。
以下代码允许我将用户坐标传递到ndc坐标,并使用这些值来为图形添加grid.text注释。
然而,它并没有正常工作。坐标似乎有点偏差。垂直线和文本与图表上的刻度标签不对应。有人可以告诉我如何修复吗?提前感谢您的帮助。
以下代码允许我将用户坐标传递到ndc坐标,并使用这些值来为图形添加grid.text注释。
graphics.off() # close graphics windows
library(grid)
library(gridBase)
test= data.frame(
x = c(1,2,3),
y = c(12,10,3),
n = c(75,76,73)
)
par(mar = c(13,5,2,3))
plot(test$y ~ test$x,type="b", ann=F)
for (i in 1:nrow(test))
{
X=grconvertX(i , from="user", to="ndc")
grid.text(x=X, y =0.2, label=paste("GRID.text at\nuser.x=", i, "\n", "ndc.x=", (signif( X, 5)) ) )
grid.lines(x=c(X, X), y = c(0.28, 0.33) )
}
#add some code to save as PDF ...
这段代码基于我之前的一篇文章中提到的解决方案:混合X和Y坐标系。你可以看到原始图表中的x坐标是如何转换为ndc的。这种方法的优点是可以使用设备坐标来表示Y。
我认为我可以轻松地在ggplot2(可能也包括lattice)中做同样的事情。
library(ggplot2)
graphics.off() # close graphics windows
qplot(x=x, y=y, data=test)+geom_line()+ opts(plot.margin = unit(c(1,3,8,1), "lines"))
for (i in 1:nrow(test))
{
X=grconvertX(i , from="user", to="ndc")
grid.text(x=X, y =0.2, label=paste("GRID.text at\nuser.x=", i, "\n", "ndc.x=", (signif( X, 5)) ) )
grid.lines(x=c(X, X), y = c(0.28, 0.33) )
}
#add some code to save as PDF...
然而,它并没有正常工作。坐标似乎有点偏差。垂直线和文本与图表上的刻度标签不对应。有人可以告诉我如何修复吗?提前感谢您的帮助。
![输入图像描述](https://istack.dev59.com/aGf3r.webp)
opts()
已更改为theme()
,有关更多信息,请参见Winston Chang的github。 - Dion Groothof