如何使用 ggplot2 在条形图中绘制彼此相邻的故障类型
How to plot failure types stacked next to each other in bar plots using ggplot2
我有一个这样的数据框:
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='_'))
然后我使用条形图为每个类别绘制 pareto,如下所示
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)。我面临的问题是,自从我使用 "dcast" 以来,失败的类型已经从行转变为列,我不知道如何将它们包含在 ggplot 中以获得每个类别的 4 个子条形图而不是 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')
我有一个这样的数据框:
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='_'))
然后我使用条形图为每个类别绘制 pareto,如下所示
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)。我面临的问题是,自从我使用 "dcast" 以来,失败的类型已经从行转变为列,我不知道如何将它们包含在 ggplot 中以获得每个类别的 4 个子条形图而不是 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')