我正在使用gridExtra包grid.arrange函数组合多ggplot图.
我这样做:
p1<-ggplot(x, aes(Date, Value)) + geom_line()
p2<-ggplot(y, aes(Date, Score)) + geom_point()
grid.arrange(p1, p2, main=textGrob("Head Line", gp=gpar(cex=1.5, fontface="bold", col="#990000")), ncol = 1, clip=TRUE)
Run Code Online (Sandbox Code Playgroud)
此命令在p1和p2之间放置边框.我找不到有关删除grid.arrange中的边框的任何信息.是否可以删除边框?
marrangeGrob在gridExtra整理grobs(通常在我的情况ggplots)的行,列和页面。它还为页面编号。
require(ggplot2)
require(plyr)
require(gridExtra)
p <- function(plotdata) {
x <- ggplot(plotdata, aes(wt, mpg)) +
geom_point() +
ggtitle(plotdata$gear[1])
return(x)
}
all <- dlply(mtcars, .(gear), p)
allarranged <- do.call(marrangeGrob, c(all, nrow=1, ncol=2))
ggsave("multipage.pdf", allarranged, width=12)
Run Code Online (Sandbox Code Playgroud)
那是一个愚蠢但可复制的例子。
现在检查的输出str(allarranged[[1]])以显示页码的对象。简化为必需品,它们在这里:
[[1]]
$ children :List of 5
..$GRID.frame.1925:List of 6
.. ..$ children :List of 5
.. .. ..$ GRID.cellGrob.1927:List of 10
.. .. .. ..$ children :List of 1
.. .. .. .. ..$ GRID.text.1845:List of 11
.. .. .. …Run Code Online (Sandbox Code Playgroud) 我使用gridExtra的grid.arrange创建了一个图表,并尝试在将整个图表保存到.png文件之前添加一个主标题.
使用main="TITLE"参数可以工作,但它会使用顶部边框刷新,无论我设置图表的高度如何.
我的问题:如何设置它以使主标题不会被顶部边框刷新?一种方法是为整个图表添加一个总体余量,但同样,我无法弄清楚如何.
作为一个例子,我从网格排列中修改了SandyMuspratt和Baptiste的代码,将表格和图形放在一个图像上:
library(ggplot2)
library(gridExtra)
x = read.table(text = "
1/1/2010 10
1/2/2010 20
1/3/2010 15
1/4/2010 56
1/5/2010 46
1/6/2010 15
1/8/2010 15
1/9/2010 15
1/10/2010 20
1/11/2010 15
1/12/2010 15
1/13/2010 40
1/14/2010 15
1/15/2010 15
1/16/2010 70", sep = "", header = FALSE)
p1<-ggplot(x, aes(V2, V1)) + geom_point()
p2<-tableGrob(x)
png( filename = "TEST.png", width = 1700, height = 900, units = "px")
grid.arrange(p2, p1, main=textGrob("Total Data and Image", gp=gpar(cex=3)), …Run Code Online (Sandbox Code Playgroud) 我有一个循环生成的12个图,我想在一个页面上绘制3行和2列(总共2页).我知道如何在R中做到这一点
pdf("1.pdf")
par(mfrow = c(3, 2))
for (i in 1:12) {
x <- 1:10
y <- 2*x + rnorm(x)
plot(x, y)
}
dev.off()
Run Code Online (Sandbox Code Playgroud)
但如何使用ggplot?
library(ggplot2)
library(grid)
library(gridExtra)
for (i in 1:12) {
x <- 1:10
y <- 2*x + rnorm(x)
qplot(x, y)
}
Run Code Online (Sandbox Code Playgroud)
我想我必须使用grid.arrange但需要一些帮助.谢谢.
披露:我不确定如何为这个问题制作一个可重复的例子.
我正在尝试使用gridExtra包绘制一个grobs列表.
我有一些看起来像这样的代码:
## Make Graphic Objects for Spec and raw traces
for (i in 1:length(morletPlots)){
gridplots_Spec[[i]]=ggplotGrob(morletPlots[[i]])
gridplots_Raw[[i]]=ggplotGrob(rawPlot[[i]])
gridplots_Raw[[i]]$widths=gridplots_Spec[[i]]$widths
}
names(gridplots_Spec)=names(morletPlots)
names(gridplots_Raw)=names(rawPlot)
## Combine spec and Raw traces
g=list()
for (i in 1:length(rawPlot)){
g[[i]]=arrangeGrob(gridplots_Spec[i],gridplots_Raw[i],heights=c(4/5,1/5))
}
numPlots = as.numeric(length(g))
##Plot both
for (i in 1:numPlots){
grid.draw(g[i],ncol=2)
}
Run Code Online (Sandbox Code Playgroud)
让我来看看代码.
morletPlots = ggplots列表
rawplot = ggplots列表
gridplots_spec和gridplots_Raw=上面的ggplots中的grobs列表.
g=上面两个grobs的列表,如此组合gridplots_spec[1],gridplots_raw[1]依此类推等等列表的长度.
现在我的目标是两个将所有这些分为两列.但每当我通过gridplots_spec[i]grid.draw循环时,我都会收到一个错误:
Error in UseMethod("grid.draw") :
no applicable method for 'grid.draw' applied to …
我有一个图表列表,我正在使用marrangeGrob每页编写多个图表.这给了我每页6个图:
marrangeGrob(plots, nrow=3, ncol=2, top=NULL)
Run Code Online (Sandbox Code Playgroud)
但我需要的是每页5个图(即右下方的绘图区域留空)
以下是基于我的数据子集的可重现示例:
> CohData
Name ScenID ScenName Year VarName Units value
1 Site01 0 Hind 2000 ANC ueq/L 28.23
2 Site02 0 Hind 2000 ANC ueq/L 35.34
3 Site03 0 Hind 2000 ANC ueq/L 31.73
4 Site04 0 Hind 2000 ANC ueq/L 54.21
5 Site05 0 Hind 2000 ANC ueq/L 28.23
6 Site01 1 BC 2020 ANC ueq/L 45.01
7 Site02 1 BC 2020 ANC ueq/L 32.86
8 Site03 1 BC 2020 ANC …Run Code Online (Sandbox Code Playgroud) 在我的降价报告中,我使用了2个块.
第一:
```{r, include = FALSE, echo=FALSE, results='asis'}```
Run Code Online (Sandbox Code Playgroud)
我加载所有包并进行计算.
第二
{r, fig.margin = TRUE, fig.width=10,
fig.height=4.5, echo=FALSE, results='asis',
message=FALSE, warning = FALSE}
Run Code Online (Sandbox Code Playgroud)
我有循环的地方我过滤数据我在第一个块中生成,并为每个我制作ggplots.
我的问题是,当我产生第二块2个地块由我结合grid.arrange他们一个网格,但有更多的评论,我不希望显示.
TableGrob (2 x 2) "arrange": 2 grobs
z cells name grob
1 1 (1-2,1-1) arrange gtable[layout]
2 2 (1-2,2-2) arrange gtable[layout]
Run Code Online (Sandbox Code Playgroud)
title: "Test"
author: "Maybe It's You"
date: "2016.09.01"
output: pdf_document
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
library(grid)
library(gridExtra)
library(ggplot2)
lay <- rbind(c(1,2),
c(1,2))
gs <- list()
```
```{r cars}
summary(cars)
```
## Including Plots …Run Code Online (Sandbox Code Playgroud) 我正在尝试将 A 和 B 标签添加到我使用 grid.arrange 函数组合的两个点阵图中。我无法让 B 标签出现在我想要的位置。我希望字母 A 位于顶部图的左侧和上方,而字母 B 位于底部图的左侧和上方。我尝试将行代码更改为不同的数字,但没有成功。
以下是一些示例数据:
data1<-data.frame(x=c(1:60),y=rep(c("A","B"),each=30),w=rep(c("V1","V2","V3"),times=20))
Plotting Code
require(lattice);require(grid.Extra)
p1<-bwplot(x~y, data = data1, groups = w,
pch = "|", box.width = 1/6, par.settings =mytheme ,scales=list(x=list(cex=1.2),y=list(cex=1.2)),
ylab=list("Number of Scallops per Station",fontsize=15),xlab=list("Strata",fontsize=15),
panel = panel.superpose,
panel.groups = function(x, y, ..., cex,group.number,col) {
panel.bwplot(x + (group.number-1.5)/6,y,...)
})
p2<-barchart(x~y|w,type="count",layout=c(3,1),data=data1,
col="light gray", xlab="Binned Number of Scallops per Station",ylab="Count",horizontal=F,
strip = strip.custom(bg="white",strip.levels = T),as.table=T,origin=0,family="A",
scales=list(relation="same",alternating=1,x=list(cex=1.2),y=list(cex=1.2)),
par.settings = list( grid.pars =
list(fontfamily = 'serif',cex=1.2)),
panel=function(x,y,...){
panel.barchart(x,y,...)})
grid.arrange(p1,p2)
mtext("A",3,line=2,cex=1.2,at=0,family="serif") …Run Code Online (Sandbox Code Playgroud) 我必须使用 gridExtra::grid.arrange 来绘制除彼此之外的多个图,因为我使用该包来创建图的拟合。我必须使用 grid.arrange 为绘图创建一个标题。现在我想将两者结合起来,但不知道如何结合。所以:我想绘制彼此之外的几个数字,并给它们一个不同的标题。
我有 euler1 和 euler2 适合 tat 代表我在欧拉图中的数据。为了绘制除海誓山盟之外的 2 个图,此代码对我有用:
gridExtra::grid.arrange(plot(euler1),plot(euler2))
Run Code Online (Sandbox Code Playgroud)
为了给一个情节一个标题,这个代码对我有用:
plot1 <- plot(euler1)
grid.arrange(grobs = list(plot1), top = "Title 1")
Run Code Online (Sandbox Code Playgroud)
现在,我想结合这两个代码。我该怎么做?
我尝试例如(但不起作用):
plot1 <- plot(euler1)
plot2 <- plot(euler2)
gridExtra::grid.arrange(plot1, plot2, grobs = list(plot1, plot2), top = list("Title 1","Title 2"))
Run Code Online (Sandbox Code Playgroud)
亲切的问候,朱迪思
我正在尝试创建boxplot一个比较ob与A和B在多个位置(即开始、中间、结束)的Top和Low值(在这种情况下为10%)。我正在尝试使用gather, facet_wrap, grid.arrange,ggplot功能,R但无法将它们放在一起。到目前为止,这是我的代码 - 我将不胜感激。
library(tidyverse)
library(gridExtra)
DF_1 = data.frame(Ob = runif(100, 10,80), A = runif(100, 5, 90), B = runif(100, 3,85), loc = rep("Start",100))
DF_2 = data.frame(Ob = runif(100, 10,80), A = runif(100, 5, 90), B = runif(100, 3,85), loc = rep("Mid",100))
DF_3 = data.frame(Ob = runif(100, 10,80), A = runif(100, 5, 90), B = runif(100, 3,85), loc = …Run Code Online (Sandbox Code Playgroud)