gpt4 book ai didi

r - 覆盖两个相同尺寸的冲积地 block

转载 作者:行者123 更新时间:2023-12-04 10:31:26 25 4
gpt4 key购买 nike

我正在尝试在 R 中的冲积图上绘制矩形。
我的代码是:

library(alluvial)
tit <- as.data.frame(Titanic)
tit2d <- aggregate(Freq ~ Class + Survived, data=tit, sum)


alluvial(tit2d, freq = tit2d$Freq, xw = 0.0, alpha = 0.8,
gap.width = 0.1, col = "steelblue", border = "white",
layer = tit2d$Survived != "Yes", blocks = F)

par(new = TRUE)
plot(c(0, 1), c(0, 1), type = "n", xlab = "", ylab = "")
rect(0, 0, 0.3, 0.4, col = "red")

但是如何确保两个图的坐标相同,因为我的矩形基于冲积坐标?

最佳答案

通常 par("usr") 命令可以告诉您当前绘图区域的极值。但是这里有点困难,因为冲积函数调整了mar函数内的图形参数。它将边距更改为 c(2,1,1,1) .在函数结束时,它会将边距恢复到最初的状态。默认边距为 c(5, 4, 4, 2) + 0.1,表示底部、左侧、顶部和右侧外边距到绘图区域之间的行数(1 行 = 1/5 英寸)。查看 par 的帮助页面并向下滚动,直到您到达 mai 以查看良好的图表。冲积函数所做的另一个调整是将轴的默认样式从常规 (xaxs="r", yaxs="r") 更改为内部 (xaxs="i", yaxs="i"),这会导致轴进一步延伸。

例如:

alluvial( tit2d, freq=tit2d$Freq, xw=0.0, alpha=0.8,
gap.width=0.1, col= "steelblue", border="white",
layer = tit2d$Survived != "Yes", blocks = F )

u <- par("usr"); u
par(new=TRUE)
plot(0, type= "n", xlab = "", ylab = "", las=1, xaxs = "i", yaxs = "i",
xlim=c(u[1], u[2]), ylim=c(u[3], u[4]))
rect(u[1], u[3], u[2], u[4], col = "red")

您将得到一个填充大部分绘图区域的红色矩形。矩形极端和冲积极端之间的巨大差距是由于边缘的所述变化。

您可以尝试通过手动减少边距来模拟冲积功能,如下所示:
op <- par(mar=c(2,1,1,1))
par(new=TRUE)
plot(0, type= "n", xlab = "", ylab = "", las=1,
xlim=c(u[1], u[2]), ylim=c(u[3], u[4]))
rect(u[1], u[3], u[2], u[4], col = "green")
par(op)

您的绿色矩形现在应该覆盖整个冲积地块。

编辑 :
要突出显示较低的矩形:
par(new=TRUE, mar=c(2,1,1,1)) 
u <- par("usr")
rect(u[1], temp$endpoints[[1]][1,1], u[1]+0.2, # Note: cw has a default value of 0.1
temp$endpoints[[1]][1,2], col = "red")

rect(u[1]+1, temp$endpoints[[1]][1,1], u[1]+1.2,
temp$endpoints[[1]][1,2], col = "red")

rect(u[1]+2, temp$endpoints[[1]][1,1], u[1]+2.2,
temp$endpoints[[1]][1,2], col = "red")

编辑 : 感谢@Darren Tsai 指出低级绘图函数,例如 rect()没有用于修改轴样式的“xaxs”参数,因为轴已经存在!

关于r - 覆盖两个相同尺寸的冲积地 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60409269/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com