【发布时间】:2016-02-27 17:46:38
【问题描述】:
我正在使用geom_tile() 在 ggplot 中绘制几个矩阵。我使用颜色来表示值变量(即填充)。所有数据都在一个数据框中。我试图让填充中的颜色范围针对绘图的每个元素/矩阵进行唯一缩放。目前使用facet_wrap(),它会在所有地块中找到最高值并将其分配为“高”值。同样,它会找到“低”值的最小值。
我尝试在facet_wrap() 中使用scales='free',但这不合逻辑(并且不起作用)。本质上,我希望它根据每个组中的最高值和最低值来分配填充的高值和低值。我不想单独制作每个情节,因为我有几十个情节。
这里是一些示例数据:
图书馆(ggplot2) set.seed(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)
上图并不理想,因为前两个矩阵应该具有与最终矩阵相同的填充比例,即使它们的数量分布范围较小。理想情况下,我想要的解决方案不仅仅是将每个组的数据范围在 0-1 之间,例如使用公式 zi=xi−min(x) / max(x)−min(x)
【问题讨论】:
-
您可以创建三个单独的图并使用 gridExtra/gridArrange 将它们组合起来。
facet_...地块有一个图例/填充比例。