如何将grob对象转换为ggplot对象?(用于绘制外部轴)

如何将grob对象转换为ggplot对象?(用于绘制外部轴),r,ggplot2,R,Ggplot2,我会很快告诉你这个问题是怎么产生的 我想画一幅图轴线以外的东西。即,x轴周围的多边形标记标签。我找到了一种方法,使用注释\u custom()和grid::polygonGrob()函数并关闭剪辑。我想我的问题是我还不太熟悉这些物体。我所知道的是,在我的操作之后,我得到了一个grob对象。这样就可以了,但我想使用cowplot将其包含在绘图网格中 这是我的密码: # Required packages library(ggplot2) library(grid) require(cowplot)

我会很快告诉你这个问题是怎么产生的

我想画一幅图轴线以外的东西。即,x轴周围的多边形标记标签。我找到了一种方法,使用
注释\u custom()
grid::polygonGrob()
函数并关闭剪辑。我想我的问题是我还不太熟悉这些物体。我所知道的是,在我的操作之后,我得到了一个grob对象。这样就可以了,但我想使用
cowplot
将其包含在绘图网格中

这是我的密码:

# Required packages
library(ggplot2)
library(grid)
require(cowplot)

# dput(data_B)

data_B <- structure(list(n = c(3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 3L, 4L, 
5L, 6L, 7L, 8L, 9L, 10L), sample = structure(c(1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("sample_1", 
"sample_2"), class = "factor"), fraction = c(0.01, 0.05, 0.24, 
0.45, 0.19, 0.045, 0.01, 0.005, 0.005, 0.04, 0.225, 0.53, 0.14, 
0.04, 0.02, 0), err = c(0.002, 0.01, 0.04, 0.06, 0.034, 0.009, 
0.002, 0.001, 0.001, 0.008, 0.04, 0.05, 0.03, 0.008, 0.004, 0
)), class = "data.frame", row.names = c(NA, -16L))

# The plot
panel_B <- ggplot(data=data_B,(aes(x=n,y=fraction,fill=sample)))+
  geom_bar(stat = "identity",position=position_dodge()) +
  geom_errorbar(aes(ymin=fraction-err, ymax=fraction+err), 
                width=.2, position=position_dodge(.9)) +
  scale_fill_manual(values=c('#f2a340','#998fc2'))+
  scale_x_continuous(expand = c(0, 0),
                     breaks=c(seq(min(data_B$n),max(data_B$n),by = 1)),
                     limits = c(min(data_B$n),max(data_B$n))) +
  scale_y_continuous(expand = c(0, 0),
                     breaks=c(seq(0,0.6,by=0.1)),
                     limits = c(0,0.6)
  )

# Add polygons around tick mark labels (unfinished work)
panel_B <- panel_B + 
  annotation_custom(polygonGrob(x = c(-0.03,0.03,0),y = c(-0.09,-0.09,-0.02),
                                gp=gpar(col="black",fill=NA, lwd=3))
  ) +
  annotation_custom(polygonGrob(x = c(0.12,0.17,0.17,0.12),y = c(-0.09,-0.09,-0.03,-0.03),
                                gp=gpar(col="black",fill=NA, lwd=2))) 


# Turn off panel clipping
gt <- ggplot_gtable(ggplot_build(panel_B))
gt$layout$clip[gt$layout$name == "panel"] <- "off"
panel_B <- grid.draw(gt)

# And a dummy version of a cowplot grid
plot_grid(c(),panel_B,nrow=2)
#必需的软件包
图书馆(GG2)
图书馆(网格)
要求(整流罩图)
#dput(数据单元B)

数据显示有两个问题;(1) 不能将栅格对象用作cowplot操作的打印排列输入,(2)PolygongRob的比例随着设备窗口的大小而变化

要解决第一个问题,您可以在
#关闭面板剪裁之前的代码中添加以下行,这也将关闭剪裁,但仍允许您将plot对象与cowplot一起使用:

panel_B <- panel_B + coord_cartesian(clip = "off") 

似乎有两个问题;(1) 不能将栅格对象用作cowplot操作的打印排列输入,(2)PolygongRob的比例随着设备窗口的大小而变化

要解决第一个问题,您可以在
#关闭面板剪裁之前的代码中添加以下行,这也将关闭剪裁,但仍允许您将plot对象与cowplot一起使用:

panel_B <- panel_B + coord_cartesian(clip = "off") 

感谢您的见解。我还找到了一种将grob转换回ggplot的方法:
panel_B你从哪里获得x轴高度的信息,
sum(2.75pt,1grobheight)
?TY如果使用
ggplotGrob(panel_B)$height
可以看到GTTable中所有元素的高度。轴是第八个元素,从布局中
axis-b
项的t(op)/b(ottom)值可以看出:
ggplotGrob(panel_b)$layout
。你能看看我的问题吗:谢谢我恐怕对plotly一无所知。谢谢你的见解。我还找到了一种将grob转换回ggplot的方法:
panel_B你从哪里获得x轴高度的信息,
sum(2.75pt,1grobheight)
?TY如果使用
ggplotGrob(panel_B)$height
可以看到GTTable中所有元素的高度。轴是第八个元素,从布局中
axis-b
项的t(op)/b(ottom)值可以看出:
ggplotGrob(panel_b)$layout
。你能看看我的问题吗:谢谢我对plotly几乎一无所知。