r - 将文本放置在距图表固定距离处

标签 r ggplot2 positioning

请帮助我找到一种通用方法,将文本放置在距绘图区域右侧恒定距离的位置,如下所示。不幸的是,由于右侧的绘图区域较窄,当前的放置计算将文本放置在左侧太远。请注意,文本是右对齐的。

我的最后一个想法:如果我们知道 x=1 和 x=2 之间的厘米距离,我们就可以轻松计算位置。不幸的是,这显然是not that easy以获得那个距离。

仅供引用:我不想标记这些线。

enter image description here Full-size image

library(ggplot2)
library(reshape)
library(gridExtra)

df = data.frame(x =(1:3),One=c(12, 8, 13),Two=c(13, 7, 11),Three=c(11, 9, 11))
df.melt = melt(df, id.vars="x")
xmax = max(df.melt$x); xmin = min(df.melt$x)
ymax = max(df.melt$value); ymin = min(df.melt$value)

dfa = data.frame(x=(xmax-xmin)*1.15+xmin, y=c(11,12,13.5), ann=c("10.1|","1.1|","Texttexttext|"))
dfa.melt = melt(dfa, id.vars=c("x","ann"))

p = ggplot() + 
  geom_line(data=df.melt,  aes(x=x, y=value, color=variable), show_guide=F) +
  geom_text(data=dfa.melt, aes(x=x, y=value, hjust = 1, label=ann), size=3) + 
  coord_cartesian(xlim=c(xmin,xmax), ylim=c(ymin,ymax))

p1 = p + theme(plot.margin=unit(c(1,3,0,0),"cm"), axis.text.y=element_text(size=10))
p2 = p + theme(plot.margin=unit(c(1,3,0,3),"cm"), axis.text.y=element_text(size=35))
p1c <- ggplot_gtable(ggplot_build(p1))
p1c$layout$clip[p1c$layout$name=="panel"] <- "off"
p2c <- ggplot_gtable(ggplot_build(p2))
p2c$layout$clip[p2c$layout$name=="panel"] <- "off"
grid.arrange(p1c, p2c, ncol=2)

最佳答案

因为一切都已命名,所以可以访问 使用绘图的任何组成部分 网格功能。

问题是 ggplot2 在绘制绘图时会创建许多视口(viewport)和对象。所以要改变这个情节并不容易。 我还注意到,每次新执行绘图时,GROB 和视口(viewport)的名称都会发生变化。所以我尝试通过某些标准获取视口(viewport)(此处深度= 4)

#Get the viewports: 
scene.vps <- grid.ls(viewports=T,grobs=F)
scene.flat <- as.data.frame(do.call('cbind',scene.vps))
vps <- subset(scene.flat ,vpDepth == '4')$name[1:2]
vps <- as.character(vps)


# modify the plot by grid.text
depth <- downViewport(vps[1])
grid.text("1.1|",x=unit(1, "npc") - unit(1, "mm"),
                 y=unit(1, "npc") - unit(20, "mm"),
                 just=c("right", "top"))

grid.text("10.1|",x=unit(1, "npc") - unit(1, "mm"),
                  y=unit(1, "npc") - unit(60, "mm"),
                  just=c("right", "top"))

grid.text("Texttexttext|",x=unit(1, "npc") - unit(10, "mm"),
                          y=unit(1, "npc") -unit(2,'mm'),
          just=c("right", "top"))

upViewport(depth)  # come back to the root viewport

depth <- downViewport(vps[2])

grid.text(...

enter image description here

关于r - 将文本放置在距图表固定距离处,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13887944/

相关文章:

css - 如何将任何定位写入 LESS 变量?

r - 如何使用ggplot2在几个pdf页面中获取图表

positioning - CSS溢出定位

html - 相对 div 内的绝对定位 firefox

反转默认比例梯度ggplot2

r - 在ggplot2中使用for循环保存图表

r - 有办法 `pipe through a list'吗?

r - 在同一个 ggplot 中拥有两种图形

r - 生成一个以 "±"分隔的描述性统计表

html - 将文件转换(打印)为 PDF - 使用 R? (在窗口中)