如何在ggplot中获取 geom_point的x , y坐标,其中参考系是整个绘制的图像?
我可以使用一些geom_point s创建一个ggplot:
library(ggplot2)
my.plot <- ggplot(data.frame(x = c(0, 0.456, 1), y = c(0, 0.123, 1))) +
geom_point(aes(x, y), color = "red")
Run Code Online (Sandbox Code Playgroud)
这给出:
通过将其转换为grob,我可以提取有关此ggplot 的一些附加信息,例如相对于绘图面板的坐标,由紫色箭头标记。但是,这忽略了轴占用的空间。
my.grob <- ggplotGrob(my.plot)
my.grob$grobs[[6]]$children[[3]]$x
# [1] 0.0454545454545455native 0.46native 0.954545454545454native
my.grob$grobs[[6]]$children[[3]]$y
# [1] 0.0454545454545455native 0.157272727272727native 0.954545454545454native
Run Code Online (Sandbox Code Playgroud)
当我从整个图像的左下角开始测量时,如何获得x , y坐标的值,用绿色箭头标记?
如果有可能,我想解决顾及主题的的ggplot。添加主题like+ theme_void()会影响轴,并且还会相对于整个绘制图像移动点的位置。
更新:我意识到轴的字体大小会根据绘图的宽度和高度而变化,从而影响绘图面板的相对大小。因此,在不定义绘图宽度和绘图高度的情况下以npc …
我想弄清楚如何在ggplot中使用grconvertX/grconvertX.我的最终目标是使用和从用户坐标到设备坐标向ggplot2图形(可能是晶格)添加注释.我知道它可以用grobs完成,但我想知道是否有更简单的方法.grid.textgrid.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 ...
Run Code Online (Sandbox Code Playgroud)

该代码基于我以前的一篇文章的解决方案:混合X和Y坐标系.您可以看到原始图中的x坐标是如何转换为ndc的.这种方法的优点是我可以使用Y的设备坐标.
我假设我可以轻松地在ggplot2(也可能在 …
我想在每个面板的底部画一个框,每个面板可能有 不同的y 范围。该框应始终位于 x 轴上的 3 到 7 之间,并且从面板底部的边框到 y 轴高度的 5% 左右。所以我想指定 egannotation_custom或geom_rect单位的坐标,例如:
xmin=unit(3, "native"), xmax=unit(7,"native"), ymin=unit(0,"npc"), ymax=unit(0.05,"npc")
Run Code Online (Sandbox Code Playgroud)
我可以做到,但这些单位似乎被忽略了,它总是原生的。
library("grid")
library("ggplot2")
df <- data.frame(x=c(1:10,1:10),y=c(1:10,1001:1010),condition=rep(c("A","B"),each=10))
g <- rectGrob(gp=gpar(fill="black"))
p <- ggplot(df, aes(x=x,y=y)) + geom_line() + facet_wrap(~ condition, scales="free_y")
p + geom_rect(xmin=3,xmax=7,ymin=0.56,ymax=1,colour="black", fill="black")
g <- rectGrob(gp=gpar(fill="black"))
p + annotation_custom(g, xmin=3, xmax=7, ymin=0, ymax=1 )
p + annotation_custom(g, xmin=unit(3, "native"), xmax=unit(7,"native"),ymin=unit(0,"npc"),ymax=unit(1,"npc") )
Run Code Online (Sandbox Code Playgroud)