如何手动编辑grid.arrange、ggplot_gtable和facet?

如何手动编辑grid.arrange、ggplot_gtable和facet?,r,ggplot2,gridextra,R,Ggplot2,Gridextra,我正在绘制一个平面,但我在R中另外使用了facet\u网格,因为我有具有公共特征的对象。 但是当我使用facet\u grid时,绘图会失真,如下图所示。我怎么能把这个随机化 请注意,它没有正确对齐,y轴的刻度被打乱,等等。 在我尝试过的调整中,我意识到有可能极大地改进这幅图。我已经创建了一个基于上述情节的图像,一些关于我如何尝试的其他尝试,并对绘画进行了一些调整,以展示我正在尝试做的事情 这是我的密码: library(ggplot2) library(grid) library(grid

我正在绘制一个平面,但我在
R
中另外使用了
facet\u网格
,因为我有具有公共特征的对象。 但是当我使用
facet\u grid
时,绘图会失真,如下图所示。我怎么能把这个随机化

请注意,它没有正确对齐,y轴的刻度被打乱,等等。 在我尝试过的调整中,我意识到有可能极大地改进这幅图。我已经创建了一个基于上述情节的图像,一些关于我如何尝试的其他尝试,并对绘画进行了一些调整,以展示我正在尝试做的事情

这是我的密码:

library(ggplot2)
library(grid)
library(gridExtra)

g1 <- ggplot(data_cet, 
         aes(x = Periodo,
             y = Ind_plu)) +
  geom_bar(stat = 'identity', 
           fill = "blue",
       position = position_dodge()) +
  ylab("Precip.") +
  scale_y_reverse(labels = scales::comma) +
  theme_bw() +
  theme(axis.title.x = element_blank(),
        axis.text.x  = element_blank(),
        axis.ticks.x = element_blank())

g2 <- ggplot(data_cet, 
         aes(x      = Periodo,
             y      = Nivel,
             colour = Bomba)) +
  geom_line(aes(group = 1)) +
  scale_color_manual(values = c("#0B775E", "#35274A", "#F2300F")) +
  labs(colour = "Status CMB") +
  facet_grid(data_cet$arranjo + data_cet$Bacia ~.) +
  scale_x_date(breaks = datebreaks_m, 
               labels = date_format("%b/%y")) +
  xlab('Período') + ylab('% Nível') +
  theme_bw() +
  theme(axis.text.x  = element_text(face  = "plain", 
                                    color = "black", 
                                    angle = 90),
    axis.text.y      = element_text(face  = "plain", 
                                    color = "black"),
    legend.title     = element_blank(),
    strip.background = element_blank(),
    legend.position  = "bottom")

g1 <- ggplot_gtable(ggplot_build(g1))
g2 <- ggplot_gtable(ggplot_build(g2))
maxWidth = unit.pmax(g1$widths[2:3], g2$widths[2:3])

g1$widths[2:3] <- maxWidth
g2$widths[2:3] <- maxWidth

plot_hyd <- grid.arrange(g1, g2, ncol = 1, heights = c(1, 3))
ggsave(file = "plot_hyd4.pdf", plot_hyd)
库(ggplot2)
图书馆(网格)
图书馆(gridExtra)

g1您可以在
网格中添加一个
widths=c(0.9,1)
。排列
(摆弄第一个数字),使图形沿右侧对齐

否则,
gg将文件保存到更大的pdf中。您的元素\文本对象(如图例)是绝对大小的,因此,如果您放大pdf维度,则相比之下,您的图形将看起来更大

widths
ggsave(width,height)
的确切值将取决于您的数据,不幸的是需要一些尝试和错误。如果您使用的是RStudio之类的工具,我建议您在调用
ggsave
之前,先摆弄
网格,安排
调用并找到您喜欢的
宽度
参数。当您准备好使用不同的
ggsave
宽度
高度
参数进行实验时,在开始几次时以较低的
dpi
运行它,以便它处理得更快


请注意,由于您没有包含数据,我没有尝试重新创建此问题-这正是我过去解决此类问题的方式。如果这些建议对您不起作用,请告诉我,我可以使用一些内置数据集来找到另一个解决方案

您可以在
网格中添加一个
widths=c(0.9,1)
。排列
(摆弄一些第一个数字)以使您的图形沿右侧对齐

否则,
gg将文件保存到更大的pdf中。您的元素\文本对象(如图例)是绝对大小的,因此,如果您放大pdf维度,则相比之下,您的图形将看起来更大

widths
ggsave(width,height)
的确切值将取决于您的数据,不幸的是需要一些尝试和错误。如果您使用的是RStudio之类的工具,我建议您在调用
ggsave
之前,先摆弄
网格,安排
调用并找到您喜欢的
宽度
参数。当您准备好使用不同的
ggsave
宽度
高度
参数进行实验时,在开始几次时以较低的
dpi
运行它,以便它处理得更快


请注意,由于您没有包含数据,我没有尝试重新创建此问题-这正是我过去解决此类问题的方式。如果这些建议对您不起作用,请告诉我,我可以使用一些内置数据集,按照@pintintend提示的代码逻辑,找到另一个解决方案。我采纳了这个论点

>
plot_hyd <- grid.arrange(g1, g2, 
                     layout_matrix = rbind(c(1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,NA),
                                           c(2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2),
                                           c(2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2),
                                           c(2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2),
                                           c(2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2),
                                           c(2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2),
                                           c(2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2)))

#ggsave(file="plot_hyd4.jpeg",plot_hyd,width=13,height=16,dpi=200)
>

按照代码的@pintintend提示的逻辑进行绘图。我采纳了这个论点

>
plot_hyd <- grid.arrange(g1, g2, 
                     layout_matrix = rbind(c(1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,NA),
                                           c(2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2),
                                           c(2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2),
                                           c(2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2),
                                           c(2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2),
                                           c(2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2),
                                           c(2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2)))

#ggsave(file="plot_hyd4.jpeg",plot_hyd,width=13,height=16,dpi=200)
>

绘图如下:
grid.arrange(g1,g2,ncol=1,高度=c(1,3),宽度=c(0.9,1))
?以pdf格式保存是因为它是唯一一个我可以更快地保存而不会出现错误的格式,但是像这样的东西你认为会很好吗
ggsave(file=“plot_hyd4.pdf”,plot_hyd,宽度=13,高度=21,dpi=600)
。我很抱歉问你这样的问题,但这是因为情节太长了,数据太多了。是的!我已经删除了我的评论,并以类似这样的回答形式回答了您最近的评论:
grid.arrange(g1,g2,ncol=1,hights=c(1,3),widths=c(0.9,1))
?以pdf格式保存是因为它是唯一一个我可以更快地保存而不会出现错误的格式,但是像这样的东西你认为会很好吗
ggsave(file=“plot_hyd4.pdf”,plot_hyd,宽度=13,高度=21,dpi=600)
。我很抱歉问你这样的问题,但这是因为情节太长了,数据太多了。是的!我已经删除了我的评论,并以回答形式回复了您最近的评论。谢谢您的提示,但是对于我在宽度上所做的每一次更改,都会出现以下错误:
>plot\u hyd=n不正确
如果您在
ncol
之前放置
+
高度
宽度
,请将其取出。还要确保
widths
是复数,否则它会抛出一个
未知参数
我用布局矩阵解决了,我现在完成了!
+
来自R控制台,复数是打字错误,对不起。我将发布代码回复。感谢您提供有关如何继续使用
grid.arrange()
!!谢谢你的提示,但是对于我在宽度上所做的每一次更改,都会出现这个错误:
>plot\u hyd=n不是真的
如果你在
ncol
之前放了一个
+
高度
宽度
,把它们拿出来。还要确保
widths
是复数,否则它会抛出一个
未知参数
我用布局矩阵解决了,我现在完成了!
+
来自R控制台,复数是打字错误,对不起。我将发布代码回复。感谢您提供有关如何继续使用
grid.arrange()
!!