gpt4 book ai didi

r - geom_tile : Clean Diagonal Tiles Border

转载 作者:行者123 更新时间:2023-12-04 11:35:43 26 4
gpt4 key购买 nike

我有一个用 geom_tile 创建的热图其中 x 和 y 值相同且排序方式相同。
我想在图表对角线的瓷砖周围放置黑色边框。

set.seed(42L)
data <- data.frame(x = rep(letters[1:3], each = 3L),
y = rep(letters[1:3], 3L),
fill = rnorm(9L))

我的选择是使用 color aes 变量设置为 TRUENA并使用 scale_color_manual删除 NA 的灰色边框值。
data$diag <- data$x == data$y
data$diag[!data$diag] <- NA

ggplot(data, aes(x = x, y = y, fill = fill)) +
geom_tile(aes(color = diag), size = 2) +
scale_color_manual(guide = FALSE, values = c(`TRUE` = "black"))

enter image description here

但是渲染不是那么干净,边界似乎有点被“不可见”的 NA 边界覆盖。

如何改进我的图表?还有另一种方法吗?
谢谢你

最佳答案

似乎边界不是由实际上不存在的“不可见”NA 边界覆盖,而是由图块本身覆盖。这意味着我们正在处理层的顺序。那么我们可以尝试的是首先添加一个普通的 geom_tile然后是另一个 geom_tile边框仅使用对角线图块的数据。那是,

ggplot(data, aes(x = x, y = y, fill = fill)) + geom_tile() +
geom_tile(data = data[!is.na(data$diag), ], aes(color = diag), size = 2) +
scale_color_manual(guide = FALSE, values = c(`TRUE` = "black"))

enter image description here

您的问题与 another one有关,其中所有瓷砖都有边框,目标是让它们不重叠。然后可以调整平铺大小以创建边框空间。然而,在这种情况下,通过调整瓦片大小,我们会产生一些间隙,这会让事情看起来更糟。
ggplot(data, aes(x = x, y = y, fill = fill)) +
geom_tile(aes(color = diag), width = 0.98, height = 0.98, size = 2) +
scale_color_manual(guide = FALSE, values = c(`TRUE` = "black"))

enter image description here

另一方面,同意同一个单 geom_tile中没有办法调整图层顺序的想法。称呼。

最后,受@utubun 回答启发的另一种选择。
data$diag <- data$x == data$y
ggplot(data[order(data$diag), ], aes(x = x, y = y, fill = fill)) +
geom_tile(aes(color = diag), size = 2) +
scale_color_manual(guide = FALSE, values = c(`TRUE` = "black", `FALSE` = NA))

本例中我们对调用里面的数据进行排序,还需要指定 FALSE边界应该是不可见的。

关于r - geom_tile : Clean Diagonal Tiles Border,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53228917/

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