我的问题与使用ggplot时的情节栏顺序有关。
EffectNames = c("Pull Back(A)","Hook(B)","Peg(C)","AB","BC","AC","ABC")
Half_Effect = c(10.4, 6.5, 5.6, 1.6, 0.98, .77, .65)
paretoData = cbind(EffectNames, Half_Effect)
paretoData = as.data.frame(paretoData)
ggplot(paretoData, aes(x = EffectNames, y = Half_Effect)) +
geom_bar(stat = "identity") +
geom_text(aes(label = Half_Effect), vjust = 1.5, colour = "white")
结果: 条形高度按以下顺序
1.6 0.65 0.77 0.98 6.5 5.6 10.4
AB ABC AC BC Hook(B) Peg(C) PullBack(A)
在Half_Effect中看不到条形高度。如何强制EffectNames的排序以匹配Half_Effect的降序?这可以在ggplot2中完成吗?是的,它可以!见下面的解决方案。
EffectNames=c( "Pull Back(A)","Hook(B)", "Peg(C)","AB", "BC", "AC", "ABC")
Half_Effect=c( 10.4,6.5,5.6,1.6,0.98,.77,.65 )
paretoData=data.frame(EffectNames, Half_Effect)
paretoData
paretoData$EffectNames = factor(paretoData$EffectNames,
levels=c("Pull Back(A)","Hook(B)", "Peg(C)","AB", "BC", "AC", "ABC"))
p=ggplot(paretoData, aes(x=EffectNames, y=Half_Effect)) +
geom_bar(stat="identity") +
geom_text(aes(label=Half_Effect), vjust=1.5, colour="white")
p
答案 0 :(得分:15)
阐述eipi10's comment,可以使用Hadley的forcats
包方便地完成对关卡的重新排序。此外,重新排序可以在调用aes()
内完成,而不是操纵底层数据。这为寻找合适的图形显示提供了额外的灵活性。
paretoData <- data.frame(
EffectNames = c("Pull Back(A)", "Hook(B)", "Peg(C)", "AB", "BC", "AC", "ABC"),
Half_Effect = c(10.4, 6.5, 5.6, 1.6, 0.98, .77, .65))
library(ggplot2)
p <- ggplot(paretoData, aes(x = EffectNames, y = Half_Effect)) +
geom_bar(stat = "identity") +
geom_text(aes(label = Half_Effect), vjust = 1.5, colour = "white")
p
此处,默认情况下,订单是按字母顺序排列的。
library(forcats)
p + aes(x = fct_inorder(EffectNames))
Half_Effect
的值上有意选择的,因此这里没有真正的意外。)fct_inorder()
使我们无需键入两次相同的内容,这在明确指定factor
调用中的级别时是必需的。p
美学来修改情节x
。无需触及基础数据。p + aes(x = fct_reorder(EffectNames, Half_Effect))
此处,通过增加Half_Effect
的值来排序级别。通过使用基础R中的reorder()
代替fct_reorder()
,我们可以达到相同的效果。
要按照OP 的要求按降序显示级别,我们可以
p + aes(x = fct_reorder(EffectNames, Half_Effect, .desc = TRUE))
请注意reorder()
有 no 显式参数来反转顺序,因此我们需要修改控制变量reorder(EffectNames, -Half_Effect)
。