问题描述
我已经按照此示例构造了数据,并希望从中创建一个热图。我在构造y轴时遇到问题,因此字符“ A”在顶部,而其下的数字则按升序排列。
对于给出的示例,我希望有A,1、2和A,3、4。使用fct_relevel
和fct_rev
,我找到了正确使用“ A”的方法位置或轴按我想要的顺序排列,但是如果不弄乱我的方面,我无法找到两种解决方案。
感谢您的帮助!
示例数据:
frws <- rep(c('AtTop','Bottom'),each=12)
fcols <- rep(c('left','right','left','right'),each=6)
xlabs <- rep(c('a','b'),times=12)
mdat <- data.frame(frws,fcols,xlabs,ID)
mdat$ID <- rep (c('A','1','2','A','3','4','4'),each=2)
mdat$numbers <- c(1,1,2,3,3)
这里没有成功:
mdat <- within(mdat,ID <- ordered(ID,levels = (unique(ID))))
mdat <- mdat %>%
mutate(ID = fct_relevel(ID,"A"))
我想使用有序y轴绘制的图:
mdat %>%
ggplot(aes(xlabs,ID)) +
geom_tile(aes(fill = numbers),colour = "white") +
facet_rep_grid(frws ~ fcols,scale="free")+
scale_fill_gradientn( colors = c("white","green","red"),values = rescale (c(0,1.0,2.5)))
解决方法
您可以尝试以下方法:
图书馆(tidyverse)
#Data
frws <- rep(c('AtTop','Bottom'),each=12)
fcols <- rep(c('left','right','left','right'),each=6)
xlabs <- rep(c('a','b'),times=12)
mdat <- data.frame(frws,fcols,xlabs)
mdat$ID <- rep (c('A','1','2','A','3','4','4'),each=2)
mdat$numbers <- c(1,1,2,3,3)
#Format levels
valev <- unique(mdat$ID)
va1 <- valev[valev=='A']
valev <- valev[valev!='A']
valev <- sort(valev,decreasing = T)
levs <- c(valev,va1)
mdat$ID <- factor(mdat$ID,levels = levs)
#Plot
mdat %>%
ggplot(aes(xlabs,ID)) +
geom_tile(aes(fill = numbers),colour = "white") +
facet_rep_grid(frws ~ fcols,scale="free")+
scale_fill_gradientn( colors = c("white","green","red"),values = rescale (c(0,1.0,2.5)))
输出: