Скрытие/удаление части кривой в R

Я хотел бы при построении кривой из набора данных скрывать части, соответствующие некоторым условиям, например, скрывать все со значением> 10 по оси y.

Я не могу просто установить значение 0 или действительно большое число и просто использовать xlim или ylim, поскольку в тот момент, когда я рисую с типом линии, у меня будет вертикальная линия, а я этого не хочу.

x <- seq(from=-50,to=50,by=0.1)
#I'd like every part of the curve above 1000 to disappear for example
y<--x^2+2500
plot(x,y,type="l")
y[y>1000]<-0
#this will create two vertical lines
plot(x,y,type="l")

Хотел :

Имгур

Фактический результат:

img


person Philippe Ear    schedule 03.07.2019    source источник
comment
Попробуйте установить Y в NULL?   -  person NelsonGon    schedule 03.07.2019
comment
Это невозможно, он говорит мне, что замена имеет нулевую длину   -  person Philippe Ear    schedule 03.07.2019
comment
Я имею в виду во время построения какой-то способ отбросить результаты (своего рода невидимая замена?).   -  person NelsonGon    schedule 03.07.2019
comment
просто построить график только с точками, у которых y ниже 1000? (учитывая ваши данные, это должно быть довольно просто: берет x от минимального до максимального до соответствующего y выше 1000, затем добавляет конец вашей кривой (с lines), взяв первый x с y менее 1000 до максимального x   -  person Cath    schedule 03.07.2019
comment
Попробуйте так: data.frame(x= x,y= y) %>% mutate(y=ifelse(y==0,NA,y)) %>% na.omit() %>% ggplot(aes(x,y))+geom_point() или просто отфильтруйте все, что не равно 0. Для удобства использовал tidyverese.   -  person NelsonGon    schedule 03.07.2019
comment
@Cath Это работает, но тогда мне нужно знать x, где вырезать мои данные, я привел эту функцию в качестве примера, но с более сложными данными это может занять много времени.   -  person Philippe Ear    schedule 03.07.2019
comment
@NelsonGon Работает с точкой, но если я хочу иметь линии, использование geom_line() создаст плато   -  person Philippe Ear    schedule 03.07.2019
comment
x[который(y›1000)[1]-1] ?   -  person Cath    schedule 03.07.2019
comment
Это дает мне только первое значение для x, если y идет вперед и назад выше и ниже 1000, это не решит проблему.   -  person Philippe Ear    schedule 03.07.2019


Ответы (1)


x <- seq(from=-50,to=50,by=0.1)
y<--x^2+2500
ylims <- range(y)
plot(x,y,type="l",ylim = ylims)

y[y>1000]<-NA
plot(x,y,type="l", ylim = ylims)


## tidyverse ====
x <- seq(from=-50,to=50,by=0.1)
y<--x^2+2500
library(tidyverse)

p <- tibble(x,y) %>%
  mutate(yCutoff = ifelse(y>1000, NA, y)) %>%
  ggplot(aes(x,y)) +
  geom_line(aes(y = yCutoff)) +
  ylim(range(y)) +
  theme_minimal()
p

# your x-Values:
p$data  %>% filter(is.na(yCutoff))%>% select(x)
#> # A tibble: 775 x 1
#>        x
#>    <dbl>
#>  1 -38.7
#>  2 -38.6
#>  3 -38.5
#>  4 -38.4
#>  5 -38.3
#>  6 -38.2
#>  7 -38.1
#>  8 -38  
#>  9 -37.9
#> 10 -37.8
#> # … with 765 more rows
person Max Teflon    schedule 03.07.2019