r - 如何在每个 ggplot 的方面对堆栈进行排序?
问题描述
请帮助我们按升序对堆栈进行排序!即左侧似乎是有序的,但右侧并没有真正排序,因为 1.7 应该出现在右端。(请参考截图)
类似但不准确的查询 如何使用 ggplot2 上的标识来控制堆叠条形图的排序 在 ggplot 中对堆叠条形图进行 排序 重新排列每个方面的升序以获取 ggplot 堆叠条形图
df = data.frame(cat = c(rep("A",9),rep("B",11)),
grp = c(rep("C",3),rep("D",3),rep("F",3), rep("C",3),rep("D",3),rep("E",2),rep("F",3)),
yrs = c(rep(c("2017","2018","2019"),5),"2017","2019","2017","2018","2019"),
per = c(2.4,2.5,3.2,
15.3,17,16.7,
82.4,80.5,80.1,
8.6,9.6,15.2,
36.2,42.2,40.4,
1.7,1.1,53.4,
48.2,43.4))
df %>%
ggplot(aes(x = "scale",y = per, fill = grp)) +
# geom_bar(stat="identity") +
geom_col() +
geom_text(aes(label= round(per,1)),
position=position_stack(vjust=0.5), size= 3) +
facet_grid(vars(yrs),vars(cat)) +
coord_flip() +
theme_bw() +
xlab("") +
ylab("") +
ggtitle("How to sort ") +
theme(legend.position="bottom",
legend.title = element_blank(),
plot.title = element_text(hjust = 0.5),
axis.text = element_blank(),
axis.ticks = element_blank())
解决方案
默认情况下,条形图按照字母顺序排列grp
。要订购,我们可以通过使用例如fromper
重新订购来为您的情况实现这一点。但是请注意,对于 facets,这个简单的解决方案不适用于更一般的情况。grp
fct_reorder
forcats
library(ggplot2)
library(dplyr)
library(forcats)
df <- data.frame(cat = c(rep("A",9),rep("B",11)),
grp = c(rep("C",3),rep("D",3),rep("F",3), rep("C",3),rep("D",3),rep("E",2),rep("F",3)),
yrs = c(rep(c("2017","2018","2019"),5),"2017","2019","2017","2018","2019"),
per = c(2.4,2.5,3.2,
15.3,17,16.7,
82.4,80.5,80.1,
8.6,9.6,15.2,
36.2,42.2,40.4,
1.7,1.1,53.4,
48.2,43.4))
df %>%
ggplot(aes(x = "scale", y = per, fill = fct_reorder(grp, per))) +
# geom_bar(stat="identity") +
geom_col() +
geom_text(aes(label= round(per,1)),
position=position_stack(vjust=0.5), size= 3) +
facet_grid(vars(yrs),vars(cat)) +
coord_flip() +
theme_bw() +
xlab("") +
ylab("") +
ggtitle("How to sort ") +
theme(legend.position="bottom",
legend.title = element_blank(),
plot.title = element_text(hjust = 0.5),
axis.text = element_blank(),
axis.ticks = element_blank())
由reprex 包于 2020-03-17 创建(v0.3.0)
推荐阅读
- r - 根据其他列修改列的值
- gradle - 预期为 BEGIN_ARRAY,但在生成 APK 时为第 1 行第 2 列路径 $ 的 BEGIN_OBJECT
- html - 页面加载后将焦点设置在“只读”字段上是否正确/有效的设计
- r - 如何使用闪亮的用户选择呈现动态 UI
- java - 如果第一个失败,如何并行运行任务并等待第二个,否则回复并让第二个运行
- sonarqube - Sonarqube getter 和 setter 重复
- spring-mvc - 如何使用 OkHttp3 获取 WebSocket 连接生成的 SessionId?
- javascript - 如何使用 JAVA SCRIPT 检索以下字符串中“_”之间的字符 - ID_123_george?
- javascript - 错误 TS:“元素”类型上不存在属性“数据集”
- javascript - 我将 Chartjs 与插件 chartjs 数据源一起使用,但无法指定要使用的数据部分