我试图用ggplot2
进行多重绘图。
这是我的初始代码
nucmer_s1 <- ggarrange(eight_uniform, ten_uniform, twelve_uniform, fourteen_uniform, sixteen_uniform,
ncol=3, nrow=2, common.legend = TRUE, legend="bottom")
收到此错误
绘图$ scale中的错误:$ operator对原子矢量无效
然后
annotate_figure(nucmer_s1,
top = text_grob("Genomas validados con distribución de datos equilibrada",
color = "black", face = "bold", size = 12))
然而我获得了图形 但我需要在每个情节中为标题添加一个标题,所以我改为这个标题
nucmer_s1 <-grid.arrange(
eight_uniform + ggtitle("8 genomas"),
ten_uniform + ggtitle("10 genomas"),
twelve_uniform + ggtitle("12 genomas"),
fourteen_uniform + ggtitle("14 genomas"),
sixteen_uniform + ggtitle("16 genomas"),
ncol=3, nrow=2, common.legend = TRUE, legend="bottom")
但我得到了
gList中的错误(列表(grobs = list(list(x = 0.5,y = 0.5,width = 1,height = 1,:
) 只有“grobs”允许在“gList”中 Además:警告信息:
1:在grob $ wrapvp&lt; - vp:Realizando coercion de LHD a una lista
2:在grob $ wrapvp&lt; - vp:Realizando coercion de LHD a una lista
所以我删除了common.legend
部分
得到了这个情节
有没有办法在不使用facet_grid
的情况下用灰色框在每个情节中添加标题(因为我在数据中没有这些信息)?和
有没有办法将图例放在多图的空白处?
非常感谢你的帮助
答案 0 :(得分:1)
lemon
或cowplot
个包具有非常好的内置函数来处理图之间的共享图例
library(ggplot2)
library(grid)
library(gtable)
library(lemon)
dsamp <- diamonds[sample(nrow(diamonds), 1000), ]
d <- ggplot(dsamp, aes(carat, price)) +
geom_point(aes(colour = clarity)) +
theme(legend.position = c(0.06, 0.75))
d3 <- d +
facet_wrap(~cut, ncol=3) +
scale_color_discrete(guide=guide_legend(ncol=3))
# Use gtable_show_names to display the names of the facetted panels
gtable_show_names(d3)
# So to place the legend in a specific panel, give its name:
reposition_legend(d3, 'center', panel='panel-3-2')
来自cowplot包的
library(cowplot)
# Make three plots.
# We set left and right margins to 0 to remove unnecessary spacing in the
# final plot arrangement.
p1 <- qplot(carat, price, data=dsamp, colour=clarity) +
theme(plot.margin = unit(c(6,0,6,0), "pt"))
p2 <- qplot(depth, price, data=dsamp, colour=clarity) +
theme(plot.margin = unit(c(6,0,6,0), "pt")) + ylab("")
p3 <- qplot(color, price, data=dsamp, colour=clarity) +
theme(plot.margin = unit(c(6,0,6,0), "pt")) + ylab("")
# arrange the three plots in a single row
prow <- plot_grid( p1 + theme(legend.position="none"),
p2 + theme(legend.position="none"),
p3 + theme(legend.position="none"),
align = 'vh',
labels = c("A", "B", "C"),
hjust = -1,
nrow = 1
)
# extract the legend from one of the plots
# (clearly the whole thing only makes sense if all plots
# have the same legend, so we can arbitrarily pick one.)
legend <- get_legend(p1)
# add the legend to the row we made earlier. Give it one-third of the width
# of one plot (via rel_widths).
p <- plot_grid( prow, legend, rel_widths = c(3, .3))
p
由reprex package(v0.2.0)创建于2018-04-14。