如何修复/调整ggplot geom_tile中每个带的宽度

4

这是我的问题的样例数据:

sampledata <- matrix(c(1:60,1:60,rep(0:1,each=60),sample(1:3,120,replace = T)),ncol=3)
colnames(sampledata) <- c("Time","Gender","Grade")
sampledata <- data.frame(sampledata)
sampledata$Time <- factor(sampledata$Time)
sampledata$Grade <- factor(sampledata$Grade)
sampledata$Gender <- factor(sampledata$Gender)

我正在使用geom_tile从这个样本数据绘制热力图。

color_palette <- colorRampPalette(c("#31a354","#2c7fb8", "#fcbfb8", "#f03b20"))(length((levels(factor(sampledata$Grade)))))
ggplot(data = sampledata) + geom_tile( aes(x = Time, y = Gender, fill = Grade))+scale_x_discrete(breaks = c("10","20","30","40","50"))+scale_fill_manual(values =color_palette,labels=c("0-1","1-2","2-3","3-4","4-5","5-6",">6"))+  theme_bw()+scale_y_discrete(labels=c("Female","Male"))

我得到了这张图:enter image description here 我想单独调整男性和女性的宽度,以便为不同性别获得不同的宽度。下图显示了宽度的含义:enter image description here 是否可以通过更改我的当前代码来实现这一点?谢谢!
1个回答

3
如果你想让“宽度”相同,可以在geom_tile中使用height美学属性:
ggplot(data = sampledata) +
    geom_tile(aes(x = Time, y = Gender, fill = Grade, height = 0.25))

图表01

如果你想让它们独立,那么你需要传递一个与sampledata data.frame长度相同的向量,可能最简单的方法是创建一个新变量:

# Assign Females a height of 0.25 and Males a height of 0.75
sampledata$myHeight = ifelse(sampledata$Gender == 0, 0.25, 0.75)

然后:

ggplot(data = sampledata) + 
  geom_tile(aes(x = Time, y = Gender, fill = Grade, height = myHeight)) 

Plot 02


1
非常感谢!我已经找到了这个https://github.com/hadley/ggplot2/issues/674 我以为我的问题无法得到答案。很高兴知道高度是可以调整的! - Yukun
在使用geom_tile()将高度降低到<1后,是否可能调整"带"之间的间隙?由于我只有几个"带",所以我发现它看起来很奇怪,要么有大的"宽度"或者间隔。我尝试了geom_raster(),但它根本不支持高度或宽度参数。 - elarry
@elarry我建议您提出一个新问题。请确保提供一个可重现的示例和您尝试过的代码。您还可以包括一个链接到这个问题,说明它与您的问题相关但不相同。 - JasonAizkalns

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接