ggplot2中数据子集化导致geom_tile尺寸不一致问题求助
问题原因与解决方案
这是因为position是连续数值型变量,geom_tile默认会根据当前图层的数据范围自动计算瓷砖的height参数:
- 完整数据集的y轴范围是1-10,瓷砖高度基于这个范围计算
- 子集数据的y轴范围仅为6和9,瓷砖高度会基于这个小范围重新计算,导致尺寸和全集不匹配
手动设置height无效的原因是你可能只在其中一个geom_tile里设置了参数,需要在所有瓷砖图层中统一指定固定值,或者调整变量类型让刻度统一。
解决方案1:统一指定瓷砖尺寸
给所有geom_tile设置相同的height(这里因为position是间隔为1的整数,设置height=1刚好匹配每个位置的区间):
df <- data.frame( position = 1:10, year = 2000, id = c("D", "A", "C", "A", "A", "B", "A", "C", "B", "A") ) ggplot(df, aes(x = factor(year), y = position)) + geom_tile(height = 1) + geom_tile(data = subset(df, id == "B"), fill = "red", height = 1)
解决方案2:将连续变量转为离散因子
把position转成因子类型,让y轴变成离散刻度,此时geom_tile会自动适配离散刻度的间距,所有瓷砖尺寸自然统一:
ggplot(df, aes(x = factor(year), y = factor(position))) + geom_tile() + geom_tile(data = subset(df, id == "B"), fill = "red")
内容的提问来源于stack exchange,提问作者quasiquails
相关产品推荐
相关产品推荐

