Добавить легенду для пользовательского stat_summary fun.data - PullRequest
0 голосов
/ 10 октября 2018

Как я могу добавить легенду для объекта, который я добавил на свой график, с помощью stat_summary?

Вот пример:

ToothGrowth$dose <- as.factor(ToothGrowth$dose)
p <- ggplot(ToothGrowth, aes(x=dose, y=len)) + 
    geom_violin(trim=FALSE)
data_summary <- function(x) {
    m <- mean(x)
    ymin <- m-sd(x)
    ymax <- m+sd(x)
    return(c(y=m,ymin=ymin,ymax=ymax))
}
p + stat_summary(fun.data=data_summary)

### Code from http://www.sthda.com/english/wiki/ggplot2-violin-plot-quick-start-guide-r-software-and-data-visualization

enter image description here

Я хочу добавить описательную легенду, которая объясняет, что представляет линия и точка в центре каждого сюжета для скрипки.

В соответствии со СВЯЗАННОЙ темой ниже, у меня сложилось впечатлениечто это может быть достигнуто путем определения aes(shape="") в stat_summary и последующего добавления scale_shape_manual("", values=c("?")).Но я не имел никакого успеха.

СВЯЗАННЫЕ. легенда ggplot2 для stat_summary

1 Ответ

0 голосов
/ 10 октября 2018

Похоже, у вас есть суть того, как это работает, сопоставление константы с какой-то эстетикой, а затем использование scale_*_manual() для очистки легенды.

В scale_shape_manual() Я думаю, удалить имя легенды,и добавьте вторую ячейку к легенде, изменив limits.Я использовал c("Mean", "1 SD"), но это может быть все, что вы хотите.

Количество необходимых фигур зависит от количества блоков легенды, поэтому я даю два для values, используя NA для секунды, так какВторое поле в легенде должно быть линией без точки.

Наконец, я использую override.aes() в guide_legend() для удаления линии из первого поля.

p + stat_summary(fun.data=data_summary, aes(shape = "Mean")) +
     scale_shape_manual(name = NULL, 
                        limits = c("Mean", "1 SD"),
                        values = c(19, NA),
                        guide = guide_legend(override.aes = list(linetype = c(0, 1))))

enter image description here

...