问题描述
df <- structure(list(Species = structure(c(1L,2L,3L,1L,3L),.Label = c("setosa","versicolor","virginica"),class =
"factor"),flower_att = c("Sepal.Length","Sepal.Length","Sepal.Width","Petal.Length","Petal.Width","Petal.Width"),measurement =
c(5.1,7,6.3,3.5,3.2,3.3,1.4,4.7,6,0.2,2.5),month =
c("January","February","January","February")),row.names = c(NA,-12L),class = "data.frame")
我想并排显示每个物种和月份的萼片长度和宽度。我希望使用热图中的对角线分割单元来完成此操作,其中包含 2 个不同颜色的图例,即长度为红色,宽度为蓝色。如果可能,我希望该值显示在单元格段中。 到目前为止,我的搜索找到了最接近的 example,但我正在寻找可行的 ggplot 版本。
我自己的尝试目前如下所示。我不知道如何分解细胞。
ggplot(df,aes(x=month,y=Species)) + geom_tile(aes(fill=measurement),color="black") + theme(axis.text.x = element_text(angle=45,hjust = .5)) +
geom_text(aes(label = round(measurement,.1))) + scale_fill_gradient(low =
"white",high = "red")
更新
在互联网上进行了一些认真的挖掘后,我发现了一个使用 geom_segment
和 geom_text_repel
的潜在选项,见下文。谁能告诉我这是否是一个可行的选择?如果是这样,我如何才能使其满足上述要求?
我愿意将 scale_fill_gradient
切换为 scale_fill_manual
或其他替代方案,我的主要目标是让所有数据并排显示
ggplot(df,y=Species)) +
geom_tile(aes(fill=measurement),color="black") +
theme(axis.text.x = element_text(angle=45,hjust = .5)) +
geom_text_repel(aes(label = round(measurement,.1))) +
scale_fill_gradient(low = "white",high = "red")
gb <- ggplot_build(p)
p + geom_segment(data=gb$data[[1]],aes(x=xmin,xend=xmax,y=ymin,yend=ymax),color="black")
解决方法
这有点hacky,但老实说,如果不创建专用的geom,我认为你不能让它变得不那么hacky - 而且创建geom 也可能有点hacky :)
- 使用
sapply
为每个 x/y 坐标创建三角形多边形。我想你可以在你未来的compute_group
层中使用这种方法。 - 搞乱因素是使订单正确的必要之恶。如果您希望在 y 轴上有一个特定的顺序,您还需要先分解
StatSplitTile
。 - 使用
Species
获得多个填充比例的非常简单的方法。 - 为更好的可比性设置相同的限制
- coord_equal 让它看起来更好
ggnewscale
由 reprex package (v0.3.0) 于 2021 年 1 月 27 日创建