r - R ggplot根据长度在组内排序条
问题描述
这是我的 CSV 文件:
Number,inst,pour,Type
One Smell,450,66.96%,OO smells
One Smell,237,36.18%,Both
One Smell,255,49.71%,Android-specific smells
Two Smells,160,16.22%,OO smells
Two Smells,143,21.83%,Both
Two Smells,109,31.19%,Android-specific smells
Three Smells,109,16.64%,Both
Three Smells,61,7.29%,OO smells
Three Smells,49,11.89%,Android-specific smells
Four Smells,66,10.08%,Both
Four Smells,33,6.24%,Android-specific smells
Four Smells,32,4.91%,OO smells
Five Smells,35,5.34%,Both
Five Smells,24,3.57%,OO smells
Five Smells,4,0.78%,Android-specific smells
Six Smells,22,3.36%,Both
Six Smells,7,1.04%,OO smells
Six Smells,1,0.19%,Android-specific smells
Seven smells,17,2.60%,Both
Eight smells,14,2.14%,Both
Nine Smells,9,1.37%,Both
Ten smells,2,0.31%,Both
Eleven smells,1,0.15%,Both
我根据类型(Android 特定气味、OO 气味、两者)进行分组,结果如下:
这是代码:
library(ggplot2)
theme_set(theme_classic())
# Plot
g <- ggplot(Co.oooa, aes(x=reorder(Number, inst), y=inst, fill=Type))+
theme(axis.text.x = element_text(angle=0, vjust=0.67, size = 10), axis.text.y = element_text(angle=0, vjust=0.6, size=10))
g + geom_bar(stat="identity", width = 0.57, position ="dodge" )+
geom_text(aes(label=pour, group=Type), position=position_dodge(width=0.67), hjust=0.0001, size=2.5 )+
scale_fill_manual(values=c( "gray", "royalblue1", "red"))+
coord_flip()
我需要根据它们的长度重新排序酒吧。例如,对于一种气味,第一个酒吧应该是OO smells
thenAndroid-specific smells
和 finally Both
。
解决方案
我有同样的问题,并结合两个帖子来解决它。
可以使用新的有序因子来实现这一点。请在下面找到一段代码,它可以创建您想要的情节:
Co.oooa = Co.oooa %>%
arrange(Number, inst) %>%
mutate(group_var = factor(paste(Number, Type), levels = paste(Number, Type)))
# 2nd: use aes(group = group_var) along with fct_reorder() to display your data correctly
ggplot(data = Co.oooa,
aes(x = fct_reorder(.f = Number, .x = inst, .fun = sum),
y = inst,
fill = Type,
label = pour,
group = group_var)) +
geom_bar(stat = "identity",
width = 0.57,
position = "dodge") +
geom_text(
position = position_dodge(width = 0.67),
hjust = 0.0001,
size = 2.5
) +
scale_fill_manual(values = c("gray", "royalblue1", "red")) +
coord_flip() +
theme_classic() +
theme(axis.text.x = element_text(angle=0, vjust=0.67, size = 10), axis.text.y = element_text(angle=0, vjust=0.6, size=10))
)
dput()
数据集:
Co.oooa <- structure(list(Number = c("One Smell", "One Smell", "One Smell",
"Two Smells", "Two Smells", "Two Smells", "Three Smells", "Three Smells",
"Three Smells", "Four Smells", "Four Smells", "Four Smells",
"Five Smells", "Five Smells", "Five Smells", "Six Smells", "Six Smells",
"Six Smells", "Seven smells", "Eight smells", "Nine Smells",
"Ten smells", "Eleven smells"), inst = c(450L, 237L, 255L, 160L,
143L, 109L, 109L, 61L, 49L, 66L, 33L, 32L, 35L, 24L, 4L, 22L,
7L, 1L, 17L, 14L, 9L, 2L, 1L), pour = c("66.96%", "36.18%", "49.71%",
"16.22%", "21.83%", "31.19%", "16.64%", "7.29%", "11.89%", "10.08%",
"6.24%", "4.91%", "5.34%", "3.57%", "0.78%", "3.36%", "1.04%",
"0.19%", "2.60%", "2.14%", "1.37%", "0.31%", "0.15%"), Type = c("OO smells",
"Both", "Android-specific smells", "OO smells", "Both", "Android-specific smells",
"Both", "OO smells", "Android-specific smells", "Both", "Android-specific smells",
"OO smells", "Both", "OO smells", "Android-specific smells",
"Both", "OO smells", "Android-specific smells", "Both", "Both",
"Both", "Both", "Both")), class = "data.frame", row.names = c(NA,
-23L))
推荐阅读
- ios - 跳过代码中的 if - then 控制流在警报后运行
- python - Python Selenium - 如何动态单击“加载更多”直到它消失?
- ios - 自 2020 年 4 月 30 日起,Apple 将不再接受使用 UIWebView 的新应用提交
- c++ - 坚持使用 C++ 元编程
- c++ - 如何在 C++ 或 C 中创建和编写索引 png 图像
- elasticsearch - 从 Kibana elasticsearch 嵌入地图
- sql - 查找总和的最大值的子查询
- ios - 从表格视图中的另一个视图控制器播放某些歌曲时遇到问题
- javascript - 使用 VueJS Devtools Chrome Extension 调试另一个 Chrome 扩展
- javascript - 如何使用 var 作为键名从 Json String Node JS 中检索键?