ggplotでgrconvertX/grconvertXを使用する方法を理解しようとしています。私の最終的な目標は、ユーザー座標からデバイス座標に移動することで、 ggplot2フィギュア(および場合によってはラティス)に注釈を追加することです。私はそれがグロブでできることを知っていますが、もっと簡単な方法があるかどうか疑問に思っています。grid.text
grid.lines
次のコードを使用すると、ユーザー座標から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 ...
このコードは、以前の投稿の1つである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...
ただし、正しく機能しません。座標が少しずれているようです。垂直線とテキストは、プロットの目盛りラベルに対応していません。誰かがそれを修正する方法を教えてもらえますか?よろしくお願いします。