代码之家  ›  专栏  ›  技术社区  ›  Jack Armstrong

将图例绘制到空绘图[复制]

  •  1
  • Jack Armstrong  · 技术社区  · 6 年前

    最初我认为我可以绘制数据并在上面打印一个白色的矩形,但是考虑到不是每个背景都是白色的,这是不现实的。我试过下面的方法,但是看起来ggplot需要一些数据帧,因此我不得不添加一个。是否可以不添加一个或以不同的方式创建空白图形?

    library(ggplot2)
    
    Outcome <- c("A", "B", "C", "D",'E')
    shots <- rep('Label',5)
    xc <-c(1:5)
    yc <-c(1:5)
    df <-data.frame(shots,Outcome,xc,yc)
    p <- ggplot() +
      geom_point(data = df, aes(x = xc, y = yc, fill = Outcome), shape=22, size=4,color = 'black', stroke=1) +
    
      #Color and Legend
      scale_fill_manual(values=c('chartreuse3','gainsboro','dodgerblue3','firebrick2','cornsilk4'),
                        labels = c("A", "B", "C", "D",'E'), 
                        drop = FALSE) +
      #Theme
      theme(
        panel.background = element_rect(fill = "transparent",colour = NA),
        plot.margin = unit(c(0.1,0.1,0.1,0.1), "cm"),
        plot.title = element_text(size = 14, hjust = 0.5, vjust = 1),
        plot.background = element_rect(fill = "transparent", colour = NA),
        axis.title=element_blank(),
        axis.text = element_blank(),
        axis.ticks = element_blank(),
        legend.position = 'left',
        legend.title=element_text(size=15),
        legend.text=element_text(size=15),
        legend.background = element_rect(fill = "transparent")
      )
    p
    

    legend

    1 回复  |  直到 6 年前
        1
  •  2
  •   wibeasley    6 年前

    你想要完整的绘图尺寸,但空间是空的吗?如果是的话 override.aes alpha=0 ),但图例显示完全不透明( alpha=1 ).

    palette_color <- c("A"='chartreuse3', "B"='gainsboro', "C"='dodgerblue3', "D"='firebrick2', "E"='cornsilk4')
    
    ggplot(df, aes(x = xc, y = yc, fill = Outcome)) +
      geom_point(shape=22, alpha=0) +
      # geom_blank() +
      scale_fill_manual(values=palette_color, drop=FALSE) +
      guides(fill = guide_legend(override.aes = list(alpha=1))) 
    

    legend_only 我喜欢你的主题修改,但我把它们放在这里,这样就更清楚哪些元素是在哪里画的。

    如果这不是你想要的,是不是有人提出的 geom_blank()