使用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 %&gt;% group_by(Backlog.Item.Type) %&gt;% 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),]%&gt;%melt()%&gt;%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 foundError 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绘制多子图

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,一维散点图)带状图(双分类变量分组:色彩配置添加箱图位置参数调整)实战