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

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

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

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 ]

11 голосов
/ 01 марта 2012

Если вы просто хотите «увеличить», вы можете использовать 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)

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

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)
4 голосов
/ 22 мая 2013

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

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

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

...