将额外的图插入多面网格,ggplot2
Inserting an extra plot into faceted grid, ggplot2
我想以 ggplot2
多面图格式显示一组参数。其中三个参数来自同一个数据集,可以很容易地进行分面。我现在想在网格中添加第四个图,其数据集与其他图完全不同 length/value(但仍与一起查看相关)。
这是我拥有的最好的(糟糕)。有没有办法准确对齐坐标和主题?谢谢
library(ggplot2)
data(mtcars)
data(iris)
a_plot <- ggplot(mtcars, aes(mpg, disp))+
geom_line()+
facet_wrap(~cyl,nrow=2,scales='free')+
theme_bw()
b_plot<- ggplot(iris, aes(Sepal.Length,Petal.Length))+
geom_line()+
ggtitle('imposter')+
theme_bw()
vp <- viewport(width = 0.52, height = 0.5, x = 0.75, y = 0.25)
png("test.png")
print(a_plot)
print(b_plot, vp = vp)
dev.off()][1]][1]
一个建议是在数据中处理这个问题,让情节分面自然地工作。 (我在这里使用 dplyr
来组合数据集,但这只是为了方便。任何提供一组列以供绘制的机制都应该有效。)
library(dplyr)
library(ggplot2)
bind_rows(
transmute(mtcars, x=mpg , y=disp , z=as.character(cyl)),
transmute(iris, x=Sepal.Length, y=Petal.Length, z="imposter")
) %>%
ggplot(aes(x, y)) +
geom_line() +
facet_wrap(~ z, nrow = 2, scales = "free") +
theme_bw()
使用其中的参数plot.margin
和panel.spacing
来自定义您正在绘制的背景的大小。然后将视口修改为宽度,使其与其他 3 个图相匹配。您可能需要尝试几次,但这是可以实现的。
library(ggplot2)
library(grid)
a_plot <- ggplot(mtcars, aes(mpg, disp))+
geom_line()+
facet_wrap(~cyl,nrow=2,scales='free')+
theme_bw()+
theme(plot.margin = unit(c(0,0.3,0,0), "cm"),
panel.spacing= unit(1, "cm"))
b_plot<- ggplot(mtcars, aes(mpg,disp))+
geom_line()+
ggtitle('imposter')+
theme_bw()
vp <- viewport(width = 0.49, height = 0.5, x = 0.75, y = 0.25)
print(a_plot)
print(b_plot, vp = vp)
我想以 ggplot2
多面图格式显示一组参数。其中三个参数来自同一个数据集,可以很容易地进行分面。我现在想在网格中添加第四个图,其数据集与其他图完全不同 length/value(但仍与一起查看相关)。
这是我拥有的最好的(糟糕)。有没有办法准确对齐坐标和主题?谢谢
library(ggplot2)
data(mtcars)
data(iris)
a_plot <- ggplot(mtcars, aes(mpg, disp))+
geom_line()+
facet_wrap(~cyl,nrow=2,scales='free')+
theme_bw()
b_plot<- ggplot(iris, aes(Sepal.Length,Petal.Length))+
geom_line()+
ggtitle('imposter')+
theme_bw()
vp <- viewport(width = 0.52, height = 0.5, x = 0.75, y = 0.25)
png("test.png")
print(a_plot)
print(b_plot, vp = vp)
dev.off()][1]][1]
一个建议是在数据中处理这个问题,让情节分面自然地工作。 (我在这里使用 dplyr
来组合数据集,但这只是为了方便。任何提供一组列以供绘制的机制都应该有效。)
library(dplyr)
library(ggplot2)
bind_rows(
transmute(mtcars, x=mpg , y=disp , z=as.character(cyl)),
transmute(iris, x=Sepal.Length, y=Petal.Length, z="imposter")
) %>%
ggplot(aes(x, y)) +
geom_line() +
facet_wrap(~ z, nrow = 2, scales = "free") +
theme_bw()
使用其中的参数plot.margin
和panel.spacing
来自定义您正在绘制的背景的大小。然后将视口修改为宽度,使其与其他 3 个图相匹配。您可能需要尝试几次,但这是可以实现的。
library(ggplot2)
library(grid)
a_plot <- ggplot(mtcars, aes(mpg, disp))+
geom_line()+
facet_wrap(~cyl,nrow=2,scales='free')+
theme_bw()+
theme(plot.margin = unit(c(0,0.3,0,0), "cm"),
panel.spacing= unit(1, "cm"))
b_plot<- ggplot(mtcars, aes(mpg,disp))+
geom_line()+
ggtitle('imposter')+
theme_bw()
vp <- viewport(width = 0.49, height = 0.5, x = 0.75, y = 0.25)
print(a_plot)
print(b_plot, vp = vp)