我堆叠了一个 Dataframe ,显示group
s上每id
的value
s:
df <- tibble::tibble(id = c(LETTERS[1:6], LETTERS[1:5]),
value = c(paste0("V", 1:6), paste0("V", 1:5)),
group = c(rep("group_1", 6), rep("group_2", 5)))
df
#> # A tibble: 11 x 3
#> id value group
#> <chr> <chr> <chr>
#> 1 A V1 group_1
#> 2 B V2 group_1
#> 3 C V3 group_1
#> 4 D V4 group_1
#> 5 E V5 group_1
#> 6 F V6 group_1
#> 7 A V1 group_2
#> 8 B V2 group_2
#> 9 C V3 group_2
#> 10 D V4 group_2
#> 11 E V5 group_2
我想创建一个热图,显示每个group
s(fill)中每个id
(y)的每个value
(x)的“可用性”:
ggplot(df, aes(x = id, y = value, fill = group)) +
geom_tile()
问题是fill
重叠:我所能看到的是,F/V6只在group_1
(而不是在group_2
)。然而,对于ID A到E,值V1到V5在两个组中都可用,因此group_2
的颜色在group_1
的顶部,使其看起来像它们只在group_2
中可用。
如果我使用facet_wrap()
,可用性更明显:
ggplot(df, aes(x = id, y = value, fill = group)) +
geom_tile() +
facet_wrap("group")
然而,在我的真实的设置中,热图非常大,所以很难比较哪个组中有哪些值可用。
如果值在两个组中都可用,是否可以将每个图块一分为二,如果值只存在于一个组中,是否可以将其保持完整?因此,在上面的第一个图中,蓝色瓷砖将被一分为二(同时显示蓝色和红色),红色瓷砖将保持不变。
更新
感谢stefan对使用position = "dodge"
的出色提示。然而,我注意到我的问题实际上比上面的reprex更复杂:每个value
可以出现在每个group
的多个id
中。当使用position = "dodge"
时,ggplot 2会将每个id
“列””划分为与id
中每个value
的出现次数一样多的部分:
df <- tibble::tibble(id = c("A", "A", "A", "B", "B", "C", "C", "C", "A", "A", "B", "B", "C", "C"),
value = c("V1", "V2", "V3", "V1", "V3", "V1", "V2", "V4", "V1", "V2", "V1", "V3", "V1", "V4"),
group = c(rep("group_1", 8), rep("group_2", 6)))
df
#> # A tibble: 14 x 3
#> id value group
#> <chr> <chr> <chr>
#> 1 A V1 group_1
#> 2 A V2 group_1
#> 3 A V3 group_1
#> 4 B V1 group_1
#> 5 B V3 group_1
#> 6 C V1 group_1
#> 7 C V2 group_1
#> 8 C V4 group_1
#> 9 A V1 group_2
#> 10 A V2 group_2
#> 11 B V1 group_2
#> 12 B V3 group_2
#> 13 C V1 group_2
#> 14 C V4 group_2
ggplot(df, aes(x = id, y = value, fill = group)) +
geom_tile(position = "dodge")
你可以看到,在“A列”中,三个瓷砖被放置在彼此的上方和旁边,将可用空间分成三部分。我想实现的是将这三对图块在“A列”中绘制在彼此的顶部,以便它们对齐,使用分配给每个值的“A列”的整个可用空间。
3条答案
按热度按时间hc8w905p1#
一个选项是使用
position="dodge"
:更新
你可以尝试在
group
aes上Map组:tct7dpnv2#
如果你想要三角形,你可能需要手动使用一些wrangling和
geom_polygon
,比如:创建于2022-02-16由reprex package(v2.0.1)
5sxhfpxr3#
我刚刚实现了一个新的geom
GeomSplitTile
,它允许在矩阵图的每个字段中绘制两个相关的值。除了添加所需的定义外,这更容易使用,并且应该允许与faceting和position
s的任意组合:使用您的示例:
创建于2023-09-29由reprex package(v2.0.1)
希望这有帮助,让我知道,如果你想在一个独立的/其他一些R包!