我有几个 ggplot 图想要合并使用grid.arrange()
当我合并这些图时,每个图周围都有一个大的白色区域,使它们彼此远离。
有没有办法调整图之间的距离?以及图周围白色区域的大小?
我想制作一个包含许多ggplots页面的pdf.使用gridExtra,我还可以构建一个带有m x n布局的图表页面(图表m行,图表n列).
该功能ggsave让我写地块的页面,即使是带有内置那些gridExtra具有m x n布局.
只要每个页面具有相同的布局,使用arrangeGrob它甚至可以将ggsave许多页面转换为单个pdf m x n.
我想知道如何ggsave列出具有不同页面布局的图表?例如,我有一个列表,l长度为3表示3页.
l[[1]]是一个2 x 2布局的页面,有4个图
l[[2]]是2 x 1有2个地块
l[[3]] 只是 1 x 1
我怎么能破解ggsave以便我可以将列表l写入1个pdf文件,其中3个页面具有不同的布局?这些图应以横向显示,因此通常命令将具有该表单
ggsave("multipage.pdf", do.call(arrangeGrob, myplots[[i]]), width=11, height=8.5)
Run Code Online (Sandbox Code Playgroud) 我正在使用pdf输出在R markdown中编写报告.我有几个图,我想在2x2矩阵中显示每页四个图.有没有办法让它们像单独的字幕那样显示?
这是我到目前为止所尝试的:
包gridExtra - 我可以轻松设置我想要的布局,但我无法在图中添加标题.是否可以选择在图中添加标题grid.arrange?
将每个绘图放在不同的块中并使用R块选项进行播放.基本上设置out.width='.49\\linewidth', fig.align='right'和fig.align='left'替代.在这里,我可以设置单独的标题,fig.cap但这些图总是显示在不同的页面上.
我尝试使用fig.width和fig.height选项一起玩,并能够让它们显示在页面各自左侧或右侧的同一页面上.但是,标题始终采用整页宽度并保持在中心而不是用绘图大小包装.有没有办法按照情节大小规则制作标题?
这是一个示例代码:
```{r, echo=FALSE, cache=FALSE, results=FALSE, warning=FALSE, comment=FALSE, message= FALSE, eval =T, fig.height= 9}
p1<- ggplot(mpg, aes(displ, hwy, colour = class)) +
geom_point()+
labs(caption = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo …Run Code Online (Sandbox Code Playgroud) 使用ggplot2,我想制作一个多面图,其中条带文本在每个子图和它的y轴文本中心,而不是仅在子图上居中.作为参考,这是我要创建的图的示例:
这与相同的图形形成对比,但是条带文本仅在子图区域上居中,如下所示.
作为参考,这是用于生成此图的代码:
library(ggplot2)
library(dplyr)
diamonds_plot <- diamonds %>%
filter(clarity %in% c("IF", "I1")) %>%
ggplot(aes(x = price, y = cut)) +
geom_point() +
facet_wrap(~ clarity, scales = 'free')
Run Code Online (Sandbox Code Playgroud)
如何以编程方式进行此更改?
我猜这可以通过编辑从调用获得的布局对象来完成diamonds_plot %>% ggplot_build %>% ggplot_gtable(),但是要做的确切更改很难确定.
我正在使用ggarrange和annotate_figure并排显示两个图。在我的实际代码中,每个子图都有不同的标题,但在整个图的顶部需要一个通用的标题和副标题。
我知道如何在顶部添加文本,但是如何添加两行,每行具有不同的字体(例如顶部标题应该大/粗体,第二行/副标题应该更小并且是常规字体)?
这是我制作标题的方法。text_grob有没有办法在 中添加 a top?
library(tidyverse)
library(ggpubr)
df <- data.frame()
plot1 <- ggplot(df) + geom_point() + xlim(0, 10) + ylim(0, 100)
plot2 <- ggplot(df) + geom_point() + xlim(0, 10) + ylim(0, 100)
all.plots <- ggarrange(plot1, plot2)
annotate_figure(all.plots,
top=text_grob("Antibiotic Effectiveness"))
Run Code Online (Sandbox Code Playgroud) 我希望创建一个包含一个简单的多行 ggplot2 图的图,该图在图下方有一个单独(但相关)数据表,按图的 X 轴排列。数据表的列名确实与图表的 x 轴匹配(1 到 24 小时),但有一列专用于必要的行名。
为简洁起见,数据表在 16 小时被截断,但确实扩展到 24。

我整个早上都在 gridExtra 中尝试不同的解决方案,调整不同的参数,如 nrow、ncol、高度和宽度,但最简单的解决方案只是产生某种合理结果的解决方案。下面的代码和图片是我取得的最好成绩:
library(gridExtra)
p1 <- ggplot(load_forecast_plot, aes(group=Load_Type, y=Load_Values, x=Hour, colour = Load_Type)) +
geom_line(size = 1) +
scale_x_continuous(breaks = c(1:24))
p1 <- ggplotGrob(p1)
p2<-tableGrob(df)
grid.arrange(p1, p2, top = paste("Load and Weather Error Power Grid", Sys.Date()-1, sep = " "))
grid.draw(tableGrob(MISO_wx_PrevDay_error_test,theme=ttheme_minimal(base_size = 5)))
Run Code Online (Sandbox Code Playgroud)
我希望图表更大,而表格更小并尽可能沿 x 轴对齐。我查看了将表格转换为 ggplot2 对象的示例,但这些示例的绘图和表格中的数据与我的不同。
以下是我的可重现示例的数据。任何帮助深表感谢!谢谢你。
ggplot 图的数据:
dput(load_forecast_plot)
structure(list(Hour = c(1, 1, 1, 2, 2, 2, 3, 3, 3, …Run Code Online (Sandbox Code Playgroud)
我试图将标签 A、B 和 C 添加到每个图表的左上角。我已经尝试过cowplot::draw_plot_label(),但似乎没有任何效果。有人可以帮忙吗?
这些 A、B 和 C 标签并不是每个图的主标题。
# Packages
library(ggplot2)
library(gridExtra)
library(cowplot)
# 1st plot
p1 <- ggplot(data = new_data %>%
filter(Species =="Sharksucker_Remora")) +
scale_colour_manual(values=c(Sharksucker_Remora="black"), labels = c("Sharksucker Remora")) +
geom_line(mapping = aes(x = Date, y = Proportion, group = Species, colour = Species)) +
xlab("") +
ylab("Proportion") +
theme(legend.position="top") +
theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust = 1)) + labs(colour = ~italic(M.alfredi)~"Hitchhiker Species:") +
theme(legend.key=element_blank())
# 2nd plot
p2 <- ggplot(data …Run Code Online (Sandbox Code Playgroud) 这个问题与这个问题有关:
我现在的问题是:在我的代码中,我通过调用lapply生成列表中的ggplots列表.我首先使用lapply,因为我执行了相当多的类似ggplots,并且手动生成每个ggplots太麻烦了.我怎样才能概括我的代码?
p <- qplot(rnorm(30))
plist <- lapply(c(1:10),FUN=function(x){
qplot(rnorm(30))
})
#works
year.plots <- list(p,p)
do.call(grid.arrange, c(year.plots))
#works
plist[[1]]
#works
grid.arrange(p,plist[[1]])
#does not work
year.plots <- list(p,plist[[1]])
do.call(grid.arrange, c(year.plots))
#How to generalize with the following idea?
year.plots <- list(p,plist[[1]],plist[[2]],...)
do.call(grid.arrange, c(year.plots))
Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个自动图形功能,并且有一些关于在ggplot2使用中列出图表的问题grid.arrange
这是玩具数据
set.seed(1234)
df <- data.frame(rep(NA,20))
for (i in 1:6) df[,i] <- rnorm(20, 0, 3)
names(df) <- paste("a", 1:6, sep = "")
Run Code Online (Sandbox Code Playgroud)
现在创建一个基于参数存在与否的偶然性的简单图形函数,在这种情况下是否将注释添加到图形中(注意:我这样做是为了尽可能地表示我的真实工作流程)
gFunct <- function (vec, note = NULL) {
if(is.null(note)) {
g <- ggplot(df, aes_string(vec)) + geom_histogram()
return(g)
} else {
g <- ggplot(df, aes_string(vec)) + geom_histogram() + annotate("text", x = 0, y = 3, label = note)
return(g)
}
}
Run Code Online (Sandbox Code Playgroud)
现在创建两个列表
nameList <- names(df)
noteList <- list(a1 = NULL, a2 = "hey", …Run Code Online (Sandbox Code Playgroud)