我的问题与使用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")
Run Code Online (Sandbox Code Playgroud)
结果:条形高度按以下顺序排列
1.6 0.65 0.77 0.98 6.5 5.6 10.4
AB ABC AC BC Hook(B) Peg(C) PullBack(A)
Run Code Online (Sandbox Code Playgroud)
在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
Run Code Online (Sandbox Code Playgroud)
Uwe*_*Uwe 16
通过阐述eipi10的评论,可以使用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
Run Code Online (Sandbox Code Playgroud)
此处,默认情况下,订单按字母顺序排列.
library(forcats)
p + aes(x = fct_inorder(EffectNames))
Run Code Online (Sandbox Code Playgroud)
Half_Effect
,因此这里没有真正的惊喜.)fct_inorder()
节省我们两次输入相同的东西,这在明确指定调用中的级别时是必需的factor
.p
仅通过改变x
美学来修改情节.无需触及基础数据.p + aes(x = fct_reorder(EffectNames, Half_Effect))
Run Code Online (Sandbox Code Playgroud)
在这里,水平是通过增加值来排序的Half_Effect
.我们可以通过使用reorder()
基数R而不是使用来实现相同的效果fct_reorder()
.
要按照OP的要求按降序显示水平,我们可以做
p + aes(x = fct_reorder(EffectNames, Half_Effect, .desc = TRUE))
Run Code Online (Sandbox Code Playgroud)
请注意,reorder()
有没有明确的参数顺序颠倒,所以我们就需要修改控制变量reorder(EffectNames, -Half_Effect)
.
归档时间: |
|
查看次数: |
15704 次 |
最近记录: |