Невозможно установить цвет вручную с помощью..count .., geom_point и facet_wrap

Я видел много вариаций по этой проблеме, а также сообщение об ошибке, которое я получаю. Однако ни одна из ситуаций не похожа на то, что я пытаюсь сделать. Скажем, у меня есть некоторые данные, которые выглядят примерно так:

r <- c("zero", "r", "zero", "zero", "r", "r", "r", "zero", "r", "r")

store <- c("Saks", "Saks", "Klein's", "Macy's", "Saks", "Klein's", "Macy's", "Macy's", "Klein's", "Saks")

dat <- data.frame(r, store)

# Specify the colors
cols <- c(r = "#1B79A5", zero = "#FD7701")

Я могу получить то, что я хочу с цветами ggplot2 по умолчанию следующим образом:

ggplot(data = dat, aes(x = r,  shape = r, colour = r, ..count..)) +
geom_point(stat = "count", size = 3) +
facet_wrap(~ store)

Проблема возникает, когда я пытаюсь добавить пользовательские цвета. Если я не добавлю facet_wrap() слой, проблем нет:

ggplot(data = dat, aes(x = r, fill = r, shape = r, ..count..)) +
    geom_point(stat = "count", color = cols, size = 3)

Однако, если я добавлю слой facet_wrap()

ggplot(data = dat, aes(x = r, fill = r, shape = r, ..count..)) +
    geom_point(stat = "count", color = cols, size = 3) + 
    facet_wrap(~store)

Я получаю сообщение об ошибке, Aesthetics must be either length 1 or the same as the data (6): colour, size,

Опять же, здесь много постов с похожим сообщением об ошибке, но ни один из них не делал то же самое, что и я.

Я также попробовал много вариантов с попытками scale_fill_manual(values = cols) но это ничего не сделало: никаких сообщений об ошибках, а только черные точки.

(Я обычно использую гистограммы в этом сценарии без затруднений, но я пытаюсь выяснить различные аспекты ggplot2, поэтому я решил попробовать это вместо этого).

1 ответ

Решение

Вам просто нужно добавить scale_color_manual() на ваш первый сюжет, который работал на вас, но с цветами по умолчанию.

ggplot(data = dat, aes(x = r,  shape = r, colour = r, ..count..)) +
geom_point(stat = "count", size = 3) +
facet_wrap(~ store) +
    scale_color_manual(values = c("#1B79A5", "#FD7701"))

введите описание изображения здесь

Другие вопросы по тегам