使用ggplot在R中并排绘制两个分组变量
Posted
技术标签:
【中文标题】使用ggplot在R中并排绘制两个分组变量【英文标题】:Plotting two grouped variables side to side in R using ggplot 【发布时间】:2018-08-30 07:33:34 【问题描述】:我有一个名为 mydata
的数据框。以下是相关列的示例:
Backlog.Item.Type Item.Created.To.Closed.Days Item.Created.To.Finished.Days
User Story 67 84
Task 14 17
Task 9 10
Epic 105 NA
User Story 56 59
Bug 5 NA
现在,我想要完成以下操作:我想取Item.Created.To.Closed.Days
列和Item.Created.To.Finished.Days
列的平均值,按Backlog.Item.Type
分组,然后将两者相邻绘制。计算我使用的平均值,这是有效的:
mydata %>%
group_by(Backlog.Item.Type) %>%
summarise_at(vars(Item.Created.to.Closed.Days),
funs(mean(Item.Created.to.Closed.Days, na.rm = TRUE)))
对于绘图部分,我尝试了类似
mydata.long <- melt(mydata)
ggplot(mydata.long,
aes(Backlog.Item.Type, value, fill = variable)) +
geom_bar(stat = "identity", position = "dodge")
但我似乎无法让它工作。我还应该注意,我只想为两列绘制 Backlog.Item.Type == 'User Story'
和 Backlog.Item.Type == 'Task'
的均值。从视觉上表示,这就是我想要完成的:
请原谅我糟糕的绘画技巧!我对颜色或其他东西没有任何偏好,我只需要完成它:D 在此先感谢,我希望我已经足够清楚并以可以理解的方式提出了我的问题!
【问题讨论】:
您可以运行 dput(df) 然后将输出添加到您的问题中吗? y 轴的计数是多少,如何获得它的值? @Tung 我的数据集由 2700 行和 20 列组成,所以我认为我做不到!但是,我的问题中描述了所有相关的列和行。还是您需要更多? @Antonis 抱歉,我应该更清楚一点。我希望 y 轴显示天数:按与 Item.Created.To.Closed.Days 和 Item.Created.To.Finished.Days 列相对应的积压项目类型分组的平均值。 【参考方案1】:假设您提供的图表包含您的整个数据集,因此不应与您在此处提供的示例数据相对应,您可以这样做:
mydata=mydata %>% group_by(Backlog.Item.Type) %>% summarise(Item.Created.To.Closed.Days=
mean(Item.Created.To.Closed.Days,na.rm=T),
Item.Created.To.Finished=mean(Item.Created.To.Finished,na.rm=T))
mydata=mydata[complete.cases(mydata),]%>%melt()
ggplot(mydata,aes(x=Backlog.Item.Type,y=value,fill=variable))+geom_bar(stat = "identity", position = "dodge")
【讨论】:
感谢您的回答!我想我应该补充一点,实际上,我的数据集由 2700 行和大约 20 列组成。我将您的答案编辑为:mydata=mydata %>% group_by(Backlog.Item.Type) %>% summarise(Item.Created.To.Closed.Days=mean(Item.Created.To.Closed.Days,na.rm=T),Item.Created.To.Finished=mean(Item.Created.To.Finished,na.rm=T)) mydata=mydata[complete.cases(mydata),]%>%melt()%>%rename("count"="value") ggplot(mydata,aes(x=Backlog.Item.Type,y=count,fill=variable))+geom_bar(stat = "identity", position = "dodge")
使用这个但是我得到了很多错误:object 'Item.Created.To.Closed.Days' not found
、Error in rename(., count = "value") : unused argument (count = "value")
和 Don't know how to automatically pick scale for object of type function. Defaulting to continuous. Error: Aesthetics must be either length 1 or the same as the data (1): x, y, fill
这里运行正常。我编辑了答案检查它是否现在运行。它有点简化,例如 y 轴现在标记为“值”,但您可以轻松重命名。以上是关于使用ggplot在R中并排绘制两个分组变量的主要内容,如果未能解决你的问题,请参考以下文章
R语言使用ggplot2包使用geom_dotplot函数绘制分组点图(双分类变量分组可视化)实战(dot plot)
R语言使用ggplot2包的快速可视化函数qplot绘制散点图(分类变量分组配色连续值程度配色)实战
R语言使用ggplot2包geom_jitter()函数绘制分组(strip plot,一维散点图)带状图(双分类变量分组:色彩配置形状配置)实战
R语言使用ggplot2包使用geom_dotplot函数绘制分组点图(双分类变量分组可视化颜色自定义添加箱图)实战(dot plot)
R语言使用ggplot2包geom_jitter()函数绘制分组(strip plot,一维散点图)带状图(双分类变量分组:色彩配置添加箱图位置参数调整)实战