горизонтальный линейный график с ассамблией в R - PullRequest
4 голосов
/ 24 февраля 2012

У меня есть большие данные, подобные приведенным ниже, но это всего лишь небольшой пример.

pos <- c(1, 3, 5, 8, 10, 12)
start <- c(1,3, 6, 7, 10, 11)
end <- c(5, 6, 9, 9, 13, 12)

Qunatative переменная Pos будет осью Y, а ось X будет переменной Anthor X (количественной). Длина горизонтальной полосы для каждого значения Pos определяется начальной и конечной точкой. Например, строка для 1 начинается с 1 и заканчивается на 3 по оси x.

Ниже приведен примерный набросок желаемой выходной фигуры.

enter image description here

Ответы [ 2 ]

5 голосов
/ 24 февраля 2012

В базе R ...

plot(pos, type = 'n', xlim = range(c(start, end)), ylim = c(13,0))
grid()
segments(start, pos, end, pos)

Чтобы получить более точно, как ваша фигура ...

r <- par('usr') 
plot(pos, type = 'n', xlim = range(c(start, end)), ylim = c(13.5,0.5), xlab = '', 
    xaxt = 'n', yaxt = 'n', panel.first = rect(r[1], r[3], r[2], r[4], col = 'goldenrod'))
# abline(h = 1:13, col = 'white')
# abline(v = 1:13, col = 'white')
grid(lty = 1, col = 'white')
axis(1, 1:13, 1:13, cex.axis = 0.8)
axis(2, 1:13, 1:13, las = 1, cex.axis = 0.8)
segments(start, pos + 0.5, end, pos + 0.5, lwd = 2)
3 голосов
/ 24 февраля 2012

Используйте пакет ggplot2 с geom_segment для рисования линий.

Начните с объединения ваших данных в data.frame, так как это необходимая структура данных для ggplot:

dat <- data.frame(
  pos = c(1, 3, 5, 8, 10, 12),
  start = c(1,3, 6, 7, 10, 11),
  end = c(5, 6, 9, 9, 13, 12)
)

Создание участка:

library(ggplot2)
ggplot(dat) + 
    geom_segment(aes(x=start, y=pos, xend=end, yend=pos), color="blue", size=3) +
    scale_y_reverse()

enter image description here

...