2015-07-26 1 views
0

Есть ли простой и эффективный способ определения функции, такой как panel.xyplot (или, скорее, panel.lines), которая соединяет только две точки (x1, y1) и (x2, y2), если x1 < = x2 и y1 < = y2? (В идеале, со всеми другими свойствами удерживаются label.xyplot(...))решетки только линии с положительным наклоном

я задал тот же вопрос, вид месяц назад и решение велико: lattice, connect points only if the connection has a positive slope

Теперь было бы хорошо иметь реальную панели. xyplot, так что я могу использовать свои собственные группы. Он должен работать и строить, как показано ниже, за исключением перекрестных линий. Я приветствую предложения.

enter image description here

ответ

1

Я не уверен, я понимаю, что вы после этого, но если я делаю, то я думаю, что это должно работать для любой данной группы:

library(dplyr) 

set.seed(1) 

dat <- data.frame(x=1:10,y=sample(1:10)) 
dat <- mutate(dat, x0 = x, y0 = y, x1 = lead(x), y1 = lead(y), slope = (x1 - x0)/(y1 - y0)) 

with(dat, plot(x, y)) 
with(dat[1:nrow(dat) - 1,], segments(x0 = x0, y0 = y0, x1 = x1, y1 = y1, 
    col = ifelse(slope >= 0, "black", "white"))) # This bit gets makes line-drawing conditional 

Вот что я получаю от что:

enter image description here

А вот версия для сгруппированных данных, которые не зависят от lattice:

dat2 <- data.frame(x = rep(seq(10), 10), 
        y = sample(1:10, size = 100, replace = TRUE), 
        indx = rep(seq(10), each = 10)) 

dat2g <- dat2 %>% 
    group_by(indx) %>% 
    mutate(., x0 = x, y0 = y, x1 = lead(x), y1 = lead(y), slope = (x1 - x0)/(y1 - y0)) 

plotit <- function(group) { 
    require(dplyr) 
    datsub <- filter(dat2g, indx == group) 
    with(datsub, plot(x, y, main = group)) 
    with(datsub[1:nrow(datsub) - 1,], segments(x0 = x0, y0 = y0, x1 = x1, y1 = y1, col = ifelse(slope >= 0, "black", "white"))) 
} 

par(mfrow=c(floor(sqrt(max(dat2g$indx))), ceiling(sqrt(max(dat2g$indx))))) 
par(mai=c(0.5,0.5,0.5,0.25)) 
for (i in 1:length(unique(dat2g$indx))) { plotit(i) } 

Вот график вывода этого процесса. Он может использовать тонкую настройку, но я думаю, что это то, что вам нужно?

enter image description here