我正在绘制Hydrograph,但是我在facet_grid
中另外使用了R
,因为我有具有共同特征的对象。
但是,当我使用facet_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)
我的数据集太大,对于未显示数据集和dput()
,我深表歉意。
答案 0 :(得分:1)
您可以在widths = c(0.9, 1)
上加上grid.arrange
(在第一个数字的后面加上小数字),以使图形沿右侧对齐。
否则,ggsave
将文件放大为pdf。您的element_text对象(例如图例)是绝对大小,因此,如果按比例放大pdf尺寸,则通过比较,图表看起来会更大。
widths
和ggsave(width, height)
的确切值将取决于您的数据,不幸的是,这将需要反复试验。如果您使用的是RStudio之类的东西,建议您在致电grid.arrange
之前先熟悉一下widths
调用并找到所需的ggsave
参数。当您准备尝试不同的ggsave
width
和height
参数时,请在头几次以较低的dpi
运行它,以使其处理更快。
请注意,由于您尚未包括数据,因此我没有尝试重新创建此问题-这就是我过去解决此类问题的方式。如果这些建议对您不起作用,请告诉我,我可以使用一些内置数据集找到其他解决方案
答案 1 :(得分:1)
遵循代码@Pintintended提示的逻辑。我采用了layout_matrix
参数。
>
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)