如何使用ggplot2绘制条形图中彼此相邻堆叠的故障类型

时间:2015-11-17 18:08:09

标签: r ggplot2 dplyr reshape2

我有一个这样的数据框:

ID <- c("A","A","B","B","A","B","B","B","A","A","A","A","B","B","A","A","A","B","B","B")
Measurement <- c("Len","Len","Len","Wid","Ht","Ht","Wid","Len","Ht","Ht"
                 ,"Wid","Ht","Len","Ht","Wid","Len","Wid","Ht","Len","Wid")
STATUS <- c("FAIL","FAIL","FAIL_AVG_HIGH","FAIL","FAIL","FAIL_AVG_HIGH","FAIL#Pts","FAIL","FAIL_AVG_LOW","FAIL"
            ,"FAIL#Pts","FAIL","FAIL_AVG_HIGH","FAIL","FAIL","FAIL_AVG_LOW","FAIL","FAIL_AVG_LOW","FAIL","FAIL#Pts")
df1 <- data.frame(ID,Measurement,STATUS)

我正在创建2列以获取每个类别的失败测量计数并为每个类别创建MEAS_ID列

df2 <- dcast(df1, Measurement+ID~STATUS, value.var="STATUS")
df2$Count <- rowSums(df2[3:6])
df2 <- within(df2, MEAS_ID <- paste(Measurement, ID, sep='_'))

然后,我使用条形图为每个类别绘制帕累托图,如此

windows()
ggplot(df2, aes(reorder(MEAS_ID,Count), Count)) + 
  geom_bar(stat = "identity") + 
  theme(plot.title=element_text(face="bold", size=20)) +
  ggtitle("Count of Failed Measurements") +
  xlab("MEAS_ID") + ylab("Count") +
  coord_flip()

enter image description here

理想情况下,我希望为上面显示的每个类别绘制彼此相邻的故障类型(FAIL,FAIL#Pts,FAIL_AVG_HIGH,FAIL_AVG_LOW)。我面临的问题是,因为我使用了&#34; dcast&#34;失败的类型已经从行转移到列中,我不知道如何将它们包含在ggplot中以获得4个子条形图,而不是每个类别的1个条形图。如果不清楚,请告诉我。

请提供您的意见,以帮助我解决这个问题。

1 个答案:

答案 0 :(得分:1)

您根本不需要使用dcast。相反,你可以在ggplot中使用一些奇特的魔法:

ggplot(df1, aes(x=paste(Measurement, ID), y=..count.., fill=STATUS)) + geom_bar()

如果评论者是正确的,并且听起来像是这样,那么您需要添加一些内容以使每个类别分组,但不会堆叠:

ggplot(df1, aes(x=paste(Measurement, ID), y=..count.., fill=STATUS)) + geom_bar(position = 'dodge')
相关问题