2

我试图用ggplot2. 这是我的初始代码

nucmer_s1 <- ggarrange(eight_uniform, ten_uniform, twelve_uniform, fourteen_uniform, sixteen_uniform, 
                       ncol=3, nrow=2, common.legend = TRUE, legend="bottom") 

收到此错误

plot$scales 中的错误:$ 运算符对原子向量无效

然后。

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 中的错误(list(grobs = list(list(x = 0.5,y = 0.5,width = 1,height = 1,:
“gList”中只允许“grobs”)
Además:警告消息:
1:在 grob$wrapvp < - vp : Realizando coercion de LHD a una lista
2: In grob$wrapvp <- vp : Realizando coercion de LHD a una lista

所以我删除了这个common.legend部分并得到了这个情节

在此处输入图像描述 所以我有两个问题:

  • 有没有办法在不使用的情况下在每个带有灰色框的图中放置标题facet_grid(因为我在数据中没有该信息)?和

  • 有没有办法将图例放在多图的空白处?

非常感谢您的帮助

4

1 回答 1

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 包(v0.2.0) 于 2018 年 4 月 14 日创建。

于 2018-04-14T18:44:23.757 回答