R ggpattern 自定义图例

SF1*_*SF1 3 r ggplot2

我无法使用 ggplot/ggpattern 自定义图例。

  1. “SPEED”图例不应显示任何图案(仅 3 种颜色)
  2. “TYPE”图例应该有自定义文本而不是 0 和 1

谢谢!

代码:

remotes::install_github("coolbutuseless/ggpattern")
library(ggplot2)
library(ggpattern)

list <- c("1" = "circle", "0" = "none")
ggplot(tt) +
  aes(x = SOUND, y = R, fill = SPEED, pattern = TYPE) +
  geom_boxplot_pattern(pattern_fill = "white",
                       pattern_density = 0.6,
                       pattern_spacing = 0.012,
                       outlier.size = 1) +
  scale_pattern_manual(values = list)  +
  scale_fill_brewer(palette = "Set1") +
  labs(y = "R", title = "R") +
  ylim(0,100) +
  theme_minimal()
Run Code Online (Sandbox Code Playgroud)

数据样本:

structure(list(ID = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 5L, 5L, 34L, 34L, 34L, 34L, 34L, 
34L, 34L, 34L, 34L, 35L, 35L, 35L, 35L, 35L, 35L, 35L, 35L, 35L, 
35L, 35L, 35L, 36L, 36L, 36L, 36L, 36L, 36L, 36L, 36L, 36L, 36L, 
36L, 36L, 37L, 37L, 37L, 37L, 37L, 37L, 37L, 37L, 37L, 37L, 37L, 
37L, 38L, 38L, 38L, 38L, 38L, 38L), .Label = c("1", "2", "3", 
"4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", 
"16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", 
"27", "28", "29", "30", "31", "32", "33", "34", "35", "36", "37", 
"38", "39", "40", "41", "42", "43", "44", "45", "46", "47"), class = "factor"), 
    TYPE = structure(c(2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
    2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
    2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
    2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L), .Label = c("0", "1"), class = "factor"), SPEED = structure(c(1L, 
    1L, 1L, 2L, 2L, 2L, 3L, 3L, 3L, 1L, 2L, 3L, 1L, 1L, 1L, 2L, 
    2L, 2L, 3L, 3L, 3L, 1L, 2L, 3L, 1L, 1L, 1L, 2L, 2L, 2L, 3L, 
    3L, 3L, 1L, 2L, 3L, 1L, 1L, 1L, 2L, 2L, 2L, 3L, 3L, 3L, 1L, 
    2L, 3L, 1L, 1L, 2L, 2L, 2L, 3L, 3L, 3L, 1L, 2L, 3L, 1L, 1L, 
    1L, 2L, 2L, 2L, 3L, 3L, 3L, 1L, 2L, 3L, 1L, 1L, 1L, 2L, 2L, 
    2L, 3L, 3L, 3L, 1L, 2L, 3L, 1L, 1L, 1L, 2L, 2L, 2L, 3L, 3L, 
    3L, 1L, 2L, 3L, 1L, 1L, 1L, 2L, 2L, 2L), .Label = c("1", 
    "2", "3"), class = "factor"), SOUND = structure(c(1L, 2L, 
    3L, 1L, 2L, 3L, 1L, 2L, 3L, 4L, 4L, 4L, 1L, 2L, 3L, 1L, 2L, 
    3L, 1L, 2L, 3L, 4L, 4L, 4L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 
    3L, 4L, 4L, 4L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 4L, 4L, 
    4L, 1L, 2L, 1L, 2L, 3L, 1L, 2L, 3L, 4L, 4L, 4L, 1L, 2L, 3L, 
    1L, 2L, 3L, 1L, 2L, 3L, 4L, 4L, 4L, 1L, 2L, 3L, 1L, 2L, 3L, 
    1L, 2L, 3L, 4L, 4L, 4L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 
    4L, 4L, 4L, 1L, 2L, 3L, 1L, 2L, 3L), .Label = c("1", "2", 
    "3", "4"), class = "factor"), R = c(64, 77, 32, 75, 80, 38, 
    79, 57, 17, 54, 54, 50, 52, 58, 34, 30, 46, 0, 63, 51, 1, 
    18, 55, 18, 76, 77, 26, 60, 17, 0, 68, 62, 0, 1, 64, 43, 
    71, 37, 38, 53, 59, 20, 67, 55, 37, 43, 61, 58, 81, 73, 62, 
    54, 36, 51, 57, 27, 55, 49, 56, 75, 92, 62, 92, 92, 62, 87, 
    92, 62, 89, 92, 92, 92, 60, 36, 73, 14, 62, 76, 55, 45, 78, 
    68, 18, 92, 85, 38, 92, 86, 43, 87, 66, 40, 81, 71, 81, 36, 
    92, 22, 92, 82, 42)), row.names = c(NA, -101L), class = c("tbl_df", 
"tbl", "data.frame"))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

编辑要求添加更多文本,因为我的帖子主要是代码,但我没有太多其他要添加的。事实上,大多数代码只是示例数据,我不知道如何生成(我尝试了几个 R 默认集,但它们不起作用)

aos*_*ith 5

scale_*_*()您可以通过将带有标签的向量传递给参数来更改相关函数中的图例键标签labels

要更改图例而不更改您最常需要的override.aes情节guide_legend()scale_pattern_manual()这是一个在内部使用它并通过将其设置为“none”来覆盖美学的示例pattern

ggplot(tt) +
    aes(x = SOUND, y = R, fill = SPEED, pattern = TYPE) +
    geom_boxplot_pattern(pattern_fill = "white",
                         pattern_density = 0.6,
                         pattern_spacing = 0.012,
                         outlier.size = 1) +
    scale_pattern_manual(values = list, 
                         labels = c("Text1", "Text2"))  +
    scale_fill_brewer(palette = "Set1", 
                      guide = guide_legend(override.aes = list(pattern = "none"))) +
    labs(y = "R", title = "R") +
    ylim(0,100) +
    theme_minimal()
Run Code Online (Sandbox Code Playgroud)

由reprex 包于 2021 年 7 月 2 日创建(v2.0.0)