将图例符号从geom_boxplot符号更改为正方形

时间:2018-02-14 16:29:15

标签: r ggplot2 legend boxplot

我可以更改框图中图例中使用的符号吗?我想使用正方形而不是默认的boxplot符号。经过一些搜索后我尝试了以下内容,但最后一行似乎没有效果:

df = data.frame(x = rnorm(10), y = sample(letters[1:2], 10, TRUE))
library(ggplot2)
ggplot(df, aes(y, x)) +
geom_boxplot(aes(color = y)) +
guides(fill = guide_legend(override.aes = list(shape = 22)))

原因是这个剩下的另一个图表使用了相同的颜色而是点而不是箱线图,所以我想要一个适合两者的图例。

2 个答案:

答案 0 :(得分:3)

我想有多种方法可以达到你想要的效果,但我通常做的是:

  1. 删除boxplot图例
  2. 添加尺寸为geom_point
  3. 0图层
  4. 更改geom_point的图例,而不更改geom_boxplot
  5. 的图例

    代码:

    df <- data.frame(x = rnorm(10), 
                     y = sample(letters[1:2], 10, TRUE))
    
    library(ggplot2)
    ggplot(df, aes(y, x, color = y)) +
        # Add dummy point layer with invisible points (size 0)
        geom_point(size = 0, shape = 22) +
        # Don't show legend
        geom_boxplot(show.legend = FALSE) +
        # Increase point size
        guides(color = guide_legend(override.aes = list(size = 10)))
    

    结果:

    enter image description here

答案 1 :(得分:1)

不漂亮,但你可以像这样破解它:

library(dplyr)
library(ggplot2)

set.seed(42)
df <- data.frame(x = rnorm(10), y = sample(letters[1:2], 10, TRUE))

df_sum <- df %>% group_by(y) %>% summarize(mean_x = mean(x))

ggplot(df, aes(y, x)) +
  geom_point(data = df_sum, aes(y, mean_x, color = y), shape = 22) +
  geom_boxplot(aes(color = y), show.legend = F) 

enter image description here