이것은 아마도 약간 버그와 clunky입니다. 더 똑똑한 사람들로부터 좀 더 우아한 솔루션을보고 싶습니다.
어떻게 가장자리를 처리 할 것인지 명확하지 않습니다. 참조 예
또는 같은
shade_segs <- function(ray1, ray2, xlim = c(-5, 5), ylim = xlim) {
ray <- data.frame(x = c(ray1[1], pmin(ray1[3], xlim[2]),
pmin(ray1[3], ylim[2]), ray2[3]),
y = c(ray2[1], ray1[4],
## how to handle the edges? :
pmin(ray2[4], xlim[2]), pmin(ray2[4], ylim[2])))
# pmin(ray1[4], xlim[2]), pmin(ray2[4], ylim[2])))
# print(ray)
require(ggplot2)
ggplot() + xlim(xlim[1], xlim[2]) + ylim(ylim[1], ylim[2]) +
geom_segment(aes_string(x = ray1[1], y = ray1[2],
xend = ray1[3], yend = ray1[4])) +
geom_segment(aes_string(x = ray2[1], y = ray2[2],
xend = ray2[3], yend = ray2[4])) +
geom_polygon(data = ray, aes(x = x, y = y), fill = "blue", alpha = 0.2) +
theme_bw()
}
library(gridExtra)
## c(x0, y0, x1, y1)
l <- list(shade_segs(ray1 = c(0, 0, 5, 4),
ray2 = c(0, 0, 0, 5)),
shade_segs(ray1 = c(0, 0, 2.5, 2.5),
ray2 = c(0, 0, 1, 5)),
shade_segs(ray1 = c(0, 0, -1, 5),
ray2 = c(0, 0, -.5, 5)),
shade_segs(ray1 = c(0, 0, -3, 5),
ray2 = c(0, 0, -.5, -5)))
(do.call(arrangeGrob, c(l, list(nrow = 2, ncol = 2))))
:
shade_segs <- function(ray1, ray2, xlim = c(-5, 5), ylim = xlim) {
ray <- data.frame(x = c(ray1[1], pmin(ray1[3], xlim[2]),
pmin(ray1[3], ylim[2]), ray2[3]),
y = c(ray2[1], ray1[4],
## how to handle the edges? :
# pmin(ray2[4], xlim[2]), pmin(ray2[4], ylim[2])))
pmin(ray1[4], xlim[2]), pmin(ray2[4], ylim[2])))
# print(ray)
require(ggplot2)
ggplot() + xlim(xlim[1], xlim[2]) + ylim(ylim[1], ylim[2]) +
geom_segment(aes_string(x = ray1[1], y = ray1[2],
xend = ray1[3], yend = ray1[4])) +
geom_segment(aes_string(x = ray2[1], y = ray2[2],
xend = ray2[3], yend = ray2[4])) +
geom_polygon(data = ray, aes(x = x, y = y), fill = "blue", alpha = 0.2) +
theme_bw()
}
library(gridExtra)
## c(x0, y0, x1, y1)
l <- list(shade_segs(ray1 = c(0, 0, 5, 4),
ray2 = c(0, 0, 0, 5)),
shade_segs(ray1 = c(0, 0, 2.5, 2.5),
ray2 = c(0, 0, 1, 5)),
shade_segs(ray1 = c(0, 0, -1, 5),
ray2 = c(0, 0, -.5, 5)),
shade_segs(ray1 = c(0, 0, -3, 5),
ray2 = c(0, 0, -.5, -5)))
(do.call(arrangeGrob, c(l, list(nrow = 2, ncol = 2))))
두 번째는 나에게 더 의미가 있습니다.
고마워요! 이것은 내가 찾고있는 것입니다! –