如何更改"主题"中的图例标签ggplot2中的参数?

时间:2015-07-03 03:48:19

标签: r plot ggplot2 legend

我正在使用ggplot2 ro绘制错误条形图。对于传奇,我想要这样:

  1. 在情节内。我知道函数主题(legend.position)可以做到这一点。

  2. 在带有函数表达式的图例标签中使用乳胶符号。

  3. 我已经阅读了几个构建图例的参考文献,但仍然没有找到我想要的内容。我可以执行1或2,但不能在我的情节中同时执行。

    以下是有问题的情节的R代码。由于我的声誉不足以发布图像,请将代码复制到R中以查看图表。我只想保留标签包含\ beta_A和\ beta_B,但标签不包含第1组和第2组。

    有什么想法吗?谢谢!

    library(ggplot2); library(scales) #for alpha
    varx <- rep(c("group1", "group2"), each = 3)
    vary <- rep(c("A", "B", "C"), 2)
    poi <- sample(20:30, 6)
    upper <- sample(40:50, 6)
    lower <- sample(1:10, 6)
    
    dat <- data.frame(varx, vary, poi, upper, lower)
    dat
      #      varx vary poi upper lower
      # 1 group1    A  29    42    10
      # 2 group1    B  21    48     9
      # 3 group1    C  26    47     8
      # 4 group2    A  30    44     4
      # 5 group2    B  27    49     6
      # 6 group2    C  24    43     7
    
    pp <- ggplot(dat, aes(colour = varx, y = poi, x = vary)) 
    
    limits <- aes(ymax = upper, ymin = lower)
    
    pp  + geom_point(aes(shape=varx), position = position_dodge(0.3), size = 2) + 
      ## dodge make the lines not stack upon each other
      geom_errorbar(limits, size = 1, width = 0.15, position = position_dodge(0.3)) + 
      theme_bw() + ## Get rid of the grey background
      geom_hline(yintercept = 0, linetype = "dotdash") +
      coord_cartesian(ylim = c(1, 60)) + 
      scale_shape_manual(values = c(17, 19, 18)) + 
      scale_colour_hue(labels =  c(expression(beta[A]), expression(beta[N]))) + 
      theme(plot.margin = unit(rep(1.5, 4),"mm"),
            legend.justification= c(1, 0), 
            legend.position = c(1, 0.5),
            legend.key = element_blank(),## Get rid of the legend box 
            legend.title = element_blank(),
            legend.text = element_text(size = 10, face = "bold"),
            legend.background = element_rect(fill=alpha(0.0001))) +
      labs(x = NULL, y = NULL)
    

1 个答案:

答案 0 :(得分:3)

要删除图例,您只需将guides(shape=FALSE)添加到地块即可。在guides中,您可以决定哪些美学应该展示传说。要结合图例,请使标签相同,ggplot将完成剩下的工作。

## Use this label for both aesthetic legends
labels =  c(expression(beta[A]), expression(beta[N]))

pp  + geom_point(aes(shape=varx), position = position_dodge(0.3), size = 2) + 
  ## dodge make the lines not stack upon each other
  geom_errorbar(limits, size = 1, width = 0.15, position = position_dodge(0.3)) + 
  theme_bw() + ## Get rid of the grey background
  geom_hline(yintercept = 0, linetype = "dotdash") +
  coord_cartesian(ylim = c(1, 60)) + 
  scale_shape_manual(values = c(17, 19, 18), labels=labels) +
  scale_colour_hue(labels = labels) + 
  theme(plot.margin = unit(rep(1.5, 4),"mm"),
        legend.justification= c(1, 0), 
        legend.position = c(1, 0.5),
        legend.key = element_blank(),## Get rid of the legend box 
        legend.title = element_blank(),
        legend.text = element_text(size = 10, face = "bold"),
        legend.background = element_rect(fill=alpha(0.0001))) +
  labs(x = NULL, y = NULL) # + guides(shape=FALSE) # if wanting to remove

enter image description here