R/ggplot2: сглаживает весь набор данных, применяя ограничение ylim

ОБНОВЛЕНИЕ: я нашел ответ... включил его ниже.

У меня есть набор данных, который содержит следующие переменные и похожие значения:

COBSDATE,   CITY, RESPONSE_TIME
2011-11-23  A     1.1
2011-11-23  A     1.5
2011-11-23  A     1.2
2011-11-23  B     2.3
2011-11-23  B     2.1
2011-11-23  B     1.8
2011-11-23  C     1.4
2011-11-23  C     6.1
2011-11-23  A     3.1
2011-11-23  A     1.1

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

Проблема, с которой я столкнулся, заключается в том, что я хочу получить более четкое представление о сглаженном значении, и в одном из городов часто встречаются "выбросы". Я могу контролировать это, добавляя ylim(0,p99) к графику, но это затем приводит к тому, что сглаживание рассчитывается только на подмножестве данных.

Есть ли способ использовать все эти данные для сглаженного графика и единственного подмножества для графика джиттера?

Мой код здесь (оба одинаковы, за исключением + ylim(0,20): усеченный -

ggplot(dataRaw, aes(x=COBSDATE, y=RESPONSE_TIME)) + 
    geom_jitter(colour=alpha("#007DB1", 1/8)) + 
    geom_smooth(colour="gray30", fill=alpha("gray40",0.5)) + 
    ylim(0,20) + 
    facet_wrap(~CITY)

Весь набор данных -

ggplot(dataRaw, aes(x=COBSDATE, y=RESPONSE_TIME)) + 
    geom_jitter(colour=alpha("#007DB1", 1/8)) + 
    geom_smooth(colour="gray30", fill=alpha("gray40",0.5)) + 
    facet_wrap(~CITY)

2 ответа

Решение

Если вы просто хотите "увеличить", вы можете использовать coord_cartesian:

ggplot(dataRaw, aes(x=COBSDATE, y=RESPONSE_TIME)) + 
  geom_jitter(colour=alpha("#007DB1", 1/8)) + 
  geom_smooth(colour="gray30", fill=alpha("gray40",0.5)) + 
  coord_cartesian(ylim=c(0,20)) + 
  facet_wrap(~CITY)

Если вы хотите использовать подмножество данных для geom джиттера, то переопределите наследование данных:

ggplot(dataRaw, aes(x=COBSDATE, y=RESPONSE_TIME)) + 
  geom_jitter(data=subset(dataRaw, RESPONSE_TIME>=0 & RESPONSE_TIME<=20), 
              colour=alpha("#007DB1", 1/8)) + 
  geom_smooth(colour="gray30", fill=alpha("gray40",0.5)) + 
  ylim(0,20) + 
  facet_wrap(~CITY)

ОБНОВЛЕННЫЙ ОТВЕТ: Итак, я искал что-то совершенно другое и наткнулся на нужный мне ответ.

Вместо ylim(0,yMax) Надо использовать coord_cartesian(ylim = c(0, yMax))

Похоже, что coord_cartesian просто "увеличивает" график вместо того, чтобы усекать включенные данные.

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