正如这里所解释的那样gridBase,即使两个图都使用R的基本图形系统,也可以很容易地将图形嵌入到现有图中.但是,当将整个图形保存为pdf时,第一页始终为空白.怎么预防这个?
这是一个例子:
require(gridBase)
## generate dummy data
set.seed(1859)
x <- 1:100
y <- x + rnorm(100, sd=5)
ols <- lm(y ~ x)
pdf("test.pdf")
## draw the first plot
plot.new() # blank page also happens when using grid.newpage()
pushViewport(viewport())
plot(x, y)
## draw the second plot, embedded into the first one
pushViewport(viewport(x=.75,y=.35,width=.2,height=.2,just=c("center","center")))
par(plt=gridPLT(), new=TRUE)
hist(ols$residuals, main="", xlab="", ylab="")
popViewport(2)
dev.off()
Run Code Online (Sandbox Code Playgroud) 我想两者结合起来ggplots使用grid.arrange,只有一个普通的传说.我设法将这两个传说与一个小技巧结合起来,但是由于我从第一个图中删除了传说grid.arrange,当然这个传说更广泛.如何将两个绘图区域设置为相同的大小?而且我希望在两个图下方都有一个共同的x轴标签.有可能grid.arrange吗?我知道,之前已经回答了类似的问题,但我仍然是新手,R而且解决方案太复杂,或者我无法将它们与我的数据相匹配.
所以这是我的两个数据集:
testxy
SN strain est low up
1 A xy 11.6751 11.1480 12.2021
2 B xy 11.4211 11.1108 11.7314
3 C xy 2.6603 2.4291 2.8915
4 D xy 4.5503 4.2972 4.8034
testyz
SN strain est low up
5 A yz 22.1761 21.5136 22.8387
6 C yz 21.4829 21.0251 21.9408
7 B yz 19.3294 18.8950 19.7639
8 D yz 19.9990 19.3934 20.6047
Run Code Online (Sandbox Code Playgroud)
这是我到目前为止的代码.它接近我想要的,但只是关闭:
p1<-ggplot(data=testxy, aes(colour=strain, x=SN, y=est))+
theme(panel.background = element_rect(fill …Run Code Online (Sandbox Code Playgroud) 我有一些数据集包含的图例条目比用颜色或完全用符号显示所能分辨的要多。实际上,它是彩虹,但是在众多图例条目中,它们使绘制的图块比宽度高得多。
由于图例并不像舒适地确定地块大小那么重要,因此在将地块保存到PNG之前,我只是预览并删除它们。
像这样:
library(ggplot2)
p <- ggplot(diamonds, aes(cut, depth)) + geom_point(aes(colour = factor(carat), size = price))
p
p <- p + theme(legend.position = "none")
p
Run Code Online (Sandbox Code Playgroud)
但是,只能选择倾斜图高或完全删除图例,这有点令人沮丧。巧妙的折衷办法是将图例放在单独的PNG中,以便在真正必要时可以对其进行检查。有没有办法做到这一点?
在试图回答这个问题,以创建所希望的描绘一个方法是使用geom_dotplot来自ggplot2如下:
library(ggplot2)
library(reshape2)
CTscores <- read.csv(text="initials,total,interest,slides,presentation
CU,1.6,1.7,1.5,1.6
DS,1.6,1.7,1.5,1.7
VA,1.7,1.5,1.5,2.1
MB,2.3,2.0,2.1,2.9
HS,1.2,1.3,1.4,1.0
LS,1.8,1.8,1.5,2.0")
CTscores.m = melt(CTscores, id.var="initials")
ggplot(CTscores.m, aes(x=variable, y=value)) +
geom_dotplot(binaxis="y", stackdir="up",binwidth=0.03) +
theme_bw()+coord_flip()
Run Code Online (Sandbox Code Playgroud)
为了区分这些点,只需添加颜色,但geom_dotplot颜色上的扼流圈并不会最终堆叠它们会很方便:
ggplot(CTscores.m, aes(x=variable, y=value, fill=initials)) +
geom_dotplot(binaxis="y", stackdir="up",binwidth=0.03,color=NA) +
theme_bw()+coord_flip()
Run Code Online (Sandbox Code Playgroud)
但是,可以使用hack手动添加颜色:
gg_color_hue <- function(n) {
hues = seq(15, 375, length=n+1)
hcl(h=hues, l=65, c=100)[1:n]
}
cols <- rep(gg_color_hue(6),4)
ggplot(CTscores.m, aes(x=variable, y=value)) +
geom_dotplot(binaxis="y", stackdir="up",binwidth=0.03,fill=cols,color=NA) +
theme_bw()+coord_flip()
Run Code Online (Sandbox Code Playgroud)
不幸的是,没有传说.最重要的是,我们不能aes(fill=)尝试手动添加图例,因为它会折叠点.有没有办法在不使用的情况下添加图例aes()?
我使用组合了三个图patchwork
我已经关注了这个SO线程,其中解决了类似的问题。但是,在我的脚本上应用该特定方法并不能解决问题。我想要所有三个图都有一个共同的图例:
脚本
library(ggplot2)
tti_type <- ggplot(p %>%
bind_rows(., mutate(., type = "all")),
aes(x = type, y = logtti, color = corona, fill = corona)) +
geom_boxplot() +
scale_color_manual(name="",
values = c("#8B3A62", "#6DBCC3"),
label = c("Before", "During lockdown")) +
scale_fill_manual(name = "",
values = c("#8B3A6220", "#6DBCC320"),
label = c("Before", "During lockdown")) +
ggtitle("Time to treatment initiation") +
theme(legend.position = "bottom")
los_type <- ggplot(p %>%
bind_rows(., mutate(., type = "all")),
aes(x = type, y = loglos, …Run Code Online (Sandbox Code Playgroud) 我问这个没有找到尝试的东西,因为我找不到相同的东西.我为此道歉.
从这个条形图:
df <- structure(list(year = 2002:2005, work = c(1L, 2L, 3L, 2L), confid = c(8L,
5L, 0L, 6L), jrs = c(0L, 3L, 4L, 5L)), .Names = c("year", "work",
"confid", "jrs"), class = "data.frame", row.names = c(NA, -4L
))
library(ggplot2)
library(reshape)
md <- melt(df, id=(c("year")))
temp.plot <- ggplot(data=md, aes(x=year, y=value, fill=variable) ) +
geom_bar(stat="identity")+
theme(axis.text.x=element_text(angle=90))+
ggtitle("Score Distribtion")
temp.plot
Run Code Online (Sandbox Code Playgroud)
我想问一下是否有任何简单的方法使用ggplot2来获得每年的值,因为它在每个变量的barplot中.这里有一个虚拟示例输出:

在这个可重现的示例网格图中,3 个图有 3 种填充颜色,z 显示为“col”蓝色,但在第四个图中只有 1 个“col”,因此 z 显示为红色。
我只想展示一个常见的图例(我可以做到),但我希望 z 在所有四个图中都是蓝色的。. 有没有一种简单的方法可以做到这一点?
#---------------------
# Reproducible example
#---------------------
library(tidyverse)
library(ggplot2)
library(grid)
library(gridExtra)
d0 <- read_csv("x, y, col\na,2,x\nb,2,y\nc,1,z")
d1 <- read_csv("x, y, col\na,2,x\nb,2,y\nc,1,z")
d2 <- read_csv("x, y, col\na,2,x\nb,2,y\nc,1,z")
d3 <- read_csv("x, y, col\na,2,z\nb,2,z\nc,1,z")
p0 <- ggplot(d0) + geom_col(mapping = aes(x, y, fill = col))
p1 <- ggplot(d1) + geom_col(mapping = aes(x, y, fill = col))
p2 <- ggplot(d2) + geom_col(mapping = aes(x, y, fill = col))
p3 <- ggplot(d3) …Run Code Online (Sandbox Code Playgroud)