R/ggplot2: сглаживание всего набора данных при применении крышки ylim

UPDATE: я нашел ответ... включил его ниже.

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

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 просто "масштабирует" график вместо усечения включенных данных.