ggplot2分组绘图时stat_summary指定fun.data=mean_sdl不生效问题
ggplot2 stat_summary(mean_sdl) 不生效问题原因与解决方案
问题产生原因
ggplot2的全局美学映射会被所有图层默认继承。你将fill = Subject写在ggplot()的全局aes中时,stat_summary图层也会继承Subject作为分组变量,最终会按「Day + 每个受试者」的组合来计算均值和标准差。而你的数据里每个受试者在单个Day下只有1条观测记录,单样本计算得到的标准差为0,所以pointrange会收缩为不可见的点,看起来就像没正常渲染。
解决方案
推荐的最优方案是:将仅作用于散点的fill = Subject映射从全局aes移除,放到geom_point()的局部美学映射中,避免stat_summary继承无关的分组变量。修改后代码如下:
ggplot(data = df, mapping = aes(x = Day, y = Value)) + stat_summary(fun.data = mean_sdl, fun.args = list(mult = 2), geom = 'pointrange', fatten = 3*1.2, size = 1.2, color = 'black') + geom_point(aes(fill = Subject), shape = 21, color = 'white', size = 2)
如果你确实需要保留全局fill = Subject映射,可在stat_summary中关闭美学继承,手动指定所需的映射即可:
ggplot(data = df, mapping = aes(x = Day, y = Value, fill = Subject)) + stat_summary(aes(x = Day, y = Value), fun.data = mean_sdl, fun.args = list(mult = 2), geom = 'pointrange', fatten = 3*1.2, size = 1.2, color = 'black', inherit.aes = FALSE) + geom_point(shape = 21, color = 'white', size = 2)
内容的提问来源于stack exchange,提问作者Sam Min
相关产品推荐
相关产品推荐

