#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 )