在边距中绘制任意线条,R plot 有几个面板
Draw arbitrary lines in margins, R plot with several panels
我有这个代码
par(mfrow = c(1,2))
plot(1:5, 5:1)
这是什么情节
我希望能够在整个绘图中添加随机线条(例如,参见红线)。它们可能在图本身、内边距或外边距上。
- 线坐标不应相对于其中一个面板。它们应该相对于整个地块区域。理想情况下,在绘图之前或之后绘制。
- 线条应该可以从一个地块穿过到另一个地块,从内边距到外边距。
我不想使用 ggplot2。我觉得我需要使用 grid
,但我不确定从哪里开始。
不难。添加一个新的白色面板(遍布整个地块),您可以通过 xpd = TRUE
绘制您想要的线段
这是我的例子;
set.seed(111)
random_segments <- data.frame(x0 = runif(5, 0, 2), y0 = runif(5, 0, 2),
x1 = runif(5, 0, 2), y1 = runif(5, 0, 1))
par(mfrow = c(1,2))
plot(1:5, 5:1)
plot(11:20, 20:11)
par(new = T, mfrow = c(1, 1))
plot(1, type = "n", axes = F, ann = F)
with(random_segments, segments(x0, y0, x1, y1, xpd = TRUE))
[编辑]
您可以制作带有您想要的坐标且没有边距的白色面板(您不需要使用 xpd = TRUE
因为没有边距)。
set.seed(111)
random_segments <- data.frame(x0 = runif(5, 0, 1), y0 = runif(5, 0, 1),
x1 = runif(5, 0, 1), y1 = runif(5, 0, 1))
def_par <- par(no.readonly = TRUE)
par(mfrow = c(1,2))
plot(1:5, 5:1)
plot(11:20, 20:11)
par(new = T, mfrow = c(1, 1), mar = c(0,0,0,0))
plot(1, type = "n", axes = F, ann = F, xaxs = "i", yaxs = "i",
xlim = c(0, 1), ylim = c(0, 1))
with(random_segments, segments(x0, y0, x1, y1))
points(c(0, 0, 1, 1), c(0, 1, 0, 1), col = "red") # to check coordinate
par(def_par) # recover
墨鱼的好解决方案!
关键是 xpd = TRUE
(允许在绘图区域外绘图)
由于我打字,这里是...
dev.off()
par(mfrow = c(1,2))
par(xpd=TRUE)
plot(1:5, 5:1)
lines(x=-1:2,y=-2:1,col="red")
lines(x=-1:1,y=-1:1,col="red")
lines(x= 1:3,y= 4:2,col="red")
lines(x= 4:7,y= 5:8,col="red")
lines(x= 2:4,y= 5:7,col="red")
# Control the length & slope of lines
plot(1:5, 5:1)
lines(x= -1:1,y=2:4,col="red")
lines(x=rep(1,3),y=0:2,col="red")
lines(x= 1:3,y=rep(6,3),col="red")
lines(x= 3:6,y= 2:5,col="red")
lines(x=c(4,4.2,4.4),y=4:6,col="red")
我有这个代码
par(mfrow = c(1,2))
plot(1:5, 5:1)
这是什么情节
我希望能够在整个绘图中添加随机线条(例如,参见红线)。它们可能在图本身、内边距或外边距上。
- 线坐标不应相对于其中一个面板。它们应该相对于整个地块区域。理想情况下,在绘图之前或之后绘制。
- 线条应该可以从一个地块穿过到另一个地块,从内边距到外边距。
我不想使用 ggplot2。我觉得我需要使用 grid
,但我不确定从哪里开始。
不难。添加一个新的白色面板(遍布整个地块),您可以通过 xpd = TRUE
这是我的例子;
set.seed(111)
random_segments <- data.frame(x0 = runif(5, 0, 2), y0 = runif(5, 0, 2),
x1 = runif(5, 0, 2), y1 = runif(5, 0, 1))
par(mfrow = c(1,2))
plot(1:5, 5:1)
plot(11:20, 20:11)
par(new = T, mfrow = c(1, 1))
plot(1, type = "n", axes = F, ann = F)
with(random_segments, segments(x0, y0, x1, y1, xpd = TRUE))
[编辑]
您可以制作带有您想要的坐标且没有边距的白色面板(您不需要使用 xpd = TRUE
因为没有边距)。
set.seed(111)
random_segments <- data.frame(x0 = runif(5, 0, 1), y0 = runif(5, 0, 1),
x1 = runif(5, 0, 1), y1 = runif(5, 0, 1))
def_par <- par(no.readonly = TRUE)
par(mfrow = c(1,2))
plot(1:5, 5:1)
plot(11:20, 20:11)
par(new = T, mfrow = c(1, 1), mar = c(0,0,0,0))
plot(1, type = "n", axes = F, ann = F, xaxs = "i", yaxs = "i",
xlim = c(0, 1), ylim = c(0, 1))
with(random_segments, segments(x0, y0, x1, y1))
points(c(0, 0, 1, 1), c(0, 1, 0, 1), col = "red") # to check coordinate
par(def_par) # recover
墨鱼的好解决方案!
关键是 xpd = TRUE
(允许在绘图区域外绘图)
由于我打字,这里是...
dev.off()
par(mfrow = c(1,2))
par(xpd=TRUE)
plot(1:5, 5:1)
lines(x=-1:2,y=-2:1,col="red")
lines(x=-1:1,y=-1:1,col="red")
lines(x= 1:3,y= 4:2,col="red")
lines(x= 4:7,y= 5:8,col="red")
lines(x= 2:4,y= 5:7,col="red")
# Control the length & slope of lines
plot(1:5, 5:1)
lines(x= -1:1,y=2:4,col="red")
lines(x=rep(1,3),y=0:2,col="red")
lines(x= 1:3,y=rep(6,3),col="red")
lines(x= 3:6,y= 2:5,col="red")
lines(x=c(4,4.2,4.4),y=4:6,col="red")