我有一个这样的数据框:
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()
理想情况下,我希望为上面显示的每个类别绘制彼此相邻的故障类型(FAIL,FAIL#Pts,FAIL_AVG_HIGH,FAIL_AVG_LOW)。我面临的问题是,因为我使用了&#34; dcast&#34;失败的类型已经从行转移到列中,我不知道如何将它们包含在ggplot中以获得4个子条形图,而不是每个类别的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')