使用ggplot2绘制长尾猴行为数据遇阻,求绘图指导
解决ggplot2绘制长尾猴行为数据的图表问题
原始代码与需求
你需要用ggplot2绘制长尾猴行为数据的横向分组条形图,现有代码如下:
males<-c(21,50,25,12,15,1,5) females<-c(20,30,22,12,16,46,8) activities<- c("playing", "grooming", "dancing", "feeding", "mating", "fighting", "eating") Vervet<-data.frame(activities,females, males) Vervet %>% pivot_longer(females:males, values_to = "Count", names_to = "Gender") %>% ggplot(mapping = aes(x= activities , y= Count, fill= Gender))+ geom_col(position = "dodge")+ scale_fill_continuous()+ coord_flip()+ theme_bw()+ theme(panel.grid = element_blank())
预期效果为:横向分组条形图,每个行为对应雌雄两组条形,按指定顺序排列活动,颜色区分性别,无网格线,布局简洁。
问题分析与修正代码
现有代码存在3个核心问题:分类变量误用连续颜色映射、活动顺序未匹配预期、图表细节未对齐预期风格。修正后的完整代码如下:
males <- c(21,50,25,12,15,1,5) females <- c(20,30,22,12,16,46,8) activities <- c("playing", "grooming", "dancing", "feeding", "mating", "fighting", "eating") Vervet <- data.frame(activities, females, males) # 重新指定活动的因子顺序,匹配预期图的排列逻辑 Vervet$activities <- factor(Vervet$activities, levels = c("fighting", "grooming", "playing", "dancing", "mating", "feeding", "eating")) Vervet %>% pivot_longer(females:males, values_to = "Count", names_to = "Gender") %>% ggplot(aes(x = activities, y = Count, fill = Gender)) + geom_col(position = position_dodge(width = 0.8)) + # 调整分组条形的间距 scale_fill_manual(values = c("females" = "#e07a5f", "males" = "#3d405b")) + # 匹配预期的性别配色 coord_flip() + theme_bw() + theme( panel.grid = element_blank(), axis.title.y = element_blank(), # 隐藏冗余的y轴标签 legend.title = element_blank(), # 隐藏图例标题 legend.position = "top" # 将图例移至顶部,贴合预期布局 ) + labs(y = "Count") # 明确设置y轴数值标签
关键修改说明
- 活动顺序调整:将
activities转换为因子类型,手动指定水平顺序,确保翻转后的y轴活动排列与预期图一致 - 颜色映射修正:替换错误的
scale_fill_continuous()为scale_fill_manual(),针对分类变量Gender指定对应颜色,匹配预期风格 - 布局细节优化:调整分组条形间距、隐藏冗余标签、移动图例位置,让整体布局更贴近预期效果
内容的提问来源于stack exchange,提问作者Thacien
相关产品推荐
相关产品推荐

