格子图只有正斜率的线

时间:2015-07-26 09:04:55

标签: r plot lattice

如果x1&lt; = x2和y1 <= y2? (理想情况下,所有其他属性都由panel.xyplot

保留

我在一个月前问了同​​样的问题,解决方案很棒: lattice, connect points only if the connection has a positive slope

现在可以使用真正的 panel.xyplot之类功能,以便我可以使用自己的组。除了交叉线之外,它应该如下工作和绘图。 我欢迎提出建议。

enter image description here

1 个答案:

答案 0 :(得分: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