Функция сегмента R с интервалами

#r #intervals #segments

#r #интервалы #сегменты

Вопрос:

У меня возникли проблемы с пониманием функции сегментов в базовой графике в контексте моей конкретной проблемы.

 x <- 0:1000
y <- c(0, 40000, 80000) 
  

Теперь я хочу нарисовать график с линией от 0 до 200 при y = 0. Еще одна строка от 200 до 500 при y = 40000 и последняя строка от 500 до 1000 при y = 80000.

 plot(x,y,type="n")
segments(0,0,200,40000,200,40000,500,8000,1000)
points(0,0,200,40000,200,40000,500,8000,1000)
points(0,0,200,40000,200,40000,500,8000,1000) 
  

Я считаю, что здесь неправильно определять точные сегменты. Если x, где 0: 3, я бы знал, что делать. Но что я должен делать в случае интервалов?

Комментарии:

1. Ну, для начала ваш plot() вызов не работает как x и y имеет разную длину. Во-вторых, вы передаете несколько аргументов в segments where , если вы прочитаете ?segments , вы заметите, что для этого нужны векторы координат x0 и y0 и x1 и y1 , которые являются координатами x и y для извлечения из и соответственно. Ваши segments() points() вызовы and просто неверны.

Ответ №1:

Вам необходимо указать векторы координат x0 и y0 и x1 и y1 , которые являются координатами x и y для рисования из и в соответственно. Рассмотрим следующий рабочий пример:

 x <- seq(0, 1000, length = 200)
y <- seq(0, 80000, length = 200)
plot(x,y,type="n")

from.x <- c(0, 200, 500)
to.x   <- c(200, 500, 1000)
to.y   <- from.y <- c(0, 40000, 80000) # from and to y coords the same

segments(x0 = from.x, y0 = from.y, x1 = to.x, y1 = to.y)
  

Это приводит к следующему графику

введите описание изображения здесь

Комментарии:

1. Большое спасибо за это!

Ответ №2:

Быстрая версия ggplot:

 library(ggplot2)
x <- seq(0, 1000, length = 200)
y <- seq(0, 80000, length = 200)
plot(x,y,type="n")

dta <- data.frame( x= from.x,y=from.y, xend=to.x, yend=to.y )
ggplot( dta, aes( x=x, y=y, xend=xend, yend=yend ))  
  geom_segment() 
  geom_point( shape=16, size=4 )  
  geom_point( aes( x=xend, y=yend ), shape=1, size=4 )