我用ggplot在R中制作了一个热图。
示例
# Libraries
library(tidyverse)
# Create data frame
df <- data.frame(test = rep(c("testA-01", "testA-02", "testA-03", "testB-01", "testB-02", "testB-03", "testC-01", "testC-02", "testC-03"),3),
time = c( rep(0,9), rep(1, 9), rep(2, 9) ),
score = sample(1:10, 27, replace = TRUE) )
# Create heatmap
ggplot(data = df, mapping = aes(x = time, y = test)) +
geom_tile(mapping = aes(fill = score, width=0.9, height=0.9)) +
scale_fill_gradientn(limits = c(1,10), colours=c("grey95", "grey40", "red"), na.value = "white" ) +
scale_y_discrete(name = "Test", limits = c("testC-03", "testC-02", "testC-01", "testB-03", "testB-02", "testB-01", "testA-03",
"testA-02", "testA-01")) +
theme_classic()
这导致了以下情节:
我想将标签捆绑在y轴上,这样我就不会对每个测试重复三次“ Test [letter]”。我可以手动完成此操作,但是,我认为也许可以使用ggplot。解决方案的第一部分是从limits
的{{1}}中删除“ Test [letter]”部分。接下来,我想垂直添加标签,并将每个测试在y轴上分组(最好使用垂直线将测试分组),如下所示:
在ggplot中这可能吗?如果是这样,您该怎么做?
答案 0 :(得分:3)
数据帧的某些重新排列使绘制变得容易:
df <- data.frame(batch = c( rep("TestA",9), rep("TestB", 9), rep("TestC", 9) ),
test = rep(c(1,2,3),9),
time = rep(c(0,0,0,1,1,1,2,2,2),3),
score = sample(1:10, 27, replace = TRUE) )
情节
使用facet_grid()
函数可以对图中的数据进行分面。使用annotation_custom()
和ggplot
的{{1}}函数,我能够添加“分组”行。
coord_cartesian()