gpt4 book ai didi

r - 使用 geom_tile() 和 facet_wrap() 分配单独的高填充值和低填充值

转载 作者:行者123 更新时间:2023-12-05 05:24:44 28 4
gpt4 key购买 nike

我正在使用 geom_tile() 在 ggplot 中绘制多个矩阵。我使用颜色来表示值变量(即填充)。所有数据都在一个数据框中。我试图让填充中的颜色范围针对绘图的每个元素/矩阵进行唯一缩放。当前使用 facet_wrap(),它会在所有绘图中找到最高值并将其指定为“高”值。同样,它会找到“低”值的最低值。

我已经尝试在 facet_wrap() 中使用 scales='free' 但这不合逻辑(并且不起作用)。本质上,我希望它根据每个组中的最高值和最低值为填充分配高值和低值。我不想单独制作每个地 block ,因为我有几十个地 block 。

这是一些示例数据:

图书馆(ggplot2)设置种子(110)

dfA <- data.frame(Var1=rep(LETTERS[1:5],5), Var2=rep(LETTERS[1:5],each=5), Value=sample(1:30, replace=T, 25), Group="A")
dfB <- data.frame(Var1=rep(LETTERS[1:5],5), Var2=rep(LETTERS[1:5],each=5), Value=sample(15:60, replace=T, 25), Group="B")
dfC <- data.frame(Var1=rep(LETTERS[1:5],5), Var2=rep(LETTERS[1:5],each=5), Value=sample(1:99, replace=T, 25), Group="C")
dfX <- rbind(dfA,dfB,dfC)

在这里,我使用 facet_wrap() 绘制了三个平铺图:

ggplot(dfX, aes(Var1, Var2, fill = Value)) + 
geom_tile(colour="white", size=1.75, stat="identity") +
scale_fill_gradient(low = "white", high = "red") +
geom_text(data=dfX, aes(Var1, Var2, label = Value), color="black", size=rel(5)) +
facet_wrap(~Group)

enter image description here

上图并不理想,因为前两个矩阵应具有与最终矩阵相同的填充比例,即使它们的数字分布范围较低。理想情况下,我想要一个解决方案,不只是将每个组的数据范围设置在 0-1 之间,例如使用公式 zi=xi−min(x)/max(x)−min(x)

最佳答案

在不创建“范围”变量和容纳多个地 block 的限制下,这里是(开始)一个解决方案。它不使用分面,因为分面共享颜色/填充/...-比例。我发现 hadley wickham 对此功能请求的旧评论,它是“.. 极不可能,因为通过绘制单独的图很容易解决”source

由于您的比例因图而异并且似乎不需要图例(因为所有值都在图中),所以我删除了所有图例。它可以用于任意多的绘图,只需编辑 grid.arrange 的参数。

library(gridExtra)
#create lots of plots by using lapply/split --> easily scalable to many plots

myplots <- lapply(split(dfX, dfX$Group), function(x){
p1 <- ggplot(x, aes(Var1, Var2, fill = Value)) +
geom_tile(colour="white", size=1.75, stat="identity") +
scale_fill_gradient(low = "white", high = "red") +
geom_text(aes(Var1, Var2, label = Value),
color="black", size=rel(5)) +
labs(title=unique(x$Group)) +
theme(legend.position="none")
}
)

do.call(grid.arrange,c(myplots, ncol=3))

enter image description here

关于r - 使用 geom_tile() 和 facet_wrap() 分配单独的高填充值和低填充值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33907998/

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