ggplot - линия тренда на основе полного набора данных в графе подмножества - PullRequest
0 голосов
/ 06 мая 2020

Мой набор данных состоит из данных от -200 до 100% по оси Y. Используя функцию ylim (0,100), я избавляюсь от отрицательных значений (которые мне нужны), однако при использовании geom_smooth эта функция вычисляет тренд только на основе данных, которые показаны в ggplot.

Есть ли способ сделать тренд, используя полный набор данных, показывая только подмножество данных 0-100% в моем ggplot?

Вот упрощенный пример по запросу;

df1 <- read.table(text = "
Group   Sample  Percentage
A   185 50
B   185 60
C   185 70
D   185 60
A   159 40
B   159 -20
C   159 50
D   159 45
A   265 -35
B   265 30
C   265 10
D   265 40
A   143 60
B   143 -30
C   143 70
D   143 75
", header = TRUE)
df1$Sample <- factor(df1$Sample)

ggplot() + 
  theme_light() + 
  geom_point(data = df1, aes(x = Sample, y = Percentage, color = Group), size = 2) + 
  geom_smooth(data = df1, aes(x = as.numeric(Sample), y = Percentage, color = Group), method=lm, se=FALSE, fullrange=TRUE) +
  ylab("(%)") +
  scale_color_manual(values=c('orange2','red','purple','blue'))

Когда я использую ggplot с моим полным набором данных я получаю эти тенденции; full data graph

когда я использую;

plot + ylim(0,100)

Я получаю этот график; ylim graph

Я хотел бы показать тенденции первого графика, но ограничить ось Y, чтобы показывать только точки между 0-100, как это; endgame graph

Заранее спасибо!

1 Ответ

1 голос
/ 06 мая 2020

Ваша проблема в том, что xlim() не только устанавливает пределы оси, но отбрасывает те точки данных, которые находятся за пределами оси . Вам нужно установить лимиты, используя coord_cartesian(xlim=). Позвольте мне показать вам, что я имею в виду:

set.seed(1111)
df <- data.frame(x=1:100, y=rnorm(100))

p <- ggplot(df, aes(x,y)) + geom_point() +
  geom_smooth(method='lm', formula='y~x')
p

enter image description here

Эта линия идет немного вверх. Если мы используем xlim(), чтобы сузить пределы, мы можем выбрать две точки, которые наклоняют линию вниз, если geom_smooth() принимает только те для приближения:

p + xlim(49, 52)

enter image description here

Как и ожидалось, линия теперь наклонена вниз. Если мы хотим сохранить остальные точки данных во фрейме данных, но просто сузить область просмотра, используйте coord_cartesian(xlim=):

p + coord_cartesian(xlim=c(49,52))

enter image description here

Сейчас выглядит хорошо.

...