我正在尝试使用如下所示的数据集创建 Lollipop 图:
set.seed(123)
example_df <- data.frame(strategy = as.factor(rep(LETTERS[1:5], each = 2)),
mt_equip = as.factor(rep(c('r', 'v'), times = 5)),
cc = as.factor(c('cc', 'cc', 'no_cc', 'no_cc', 'part_cc', 'part_cc', 'cc', 'cc', 'no_cc', 'no_cc')),
vt = as.factor(c(rep('d10', 4), rep('d1+d10', 2), rep('d1', 4))),
model_ouput = rnorm(10)
)
example_df
strategy mt_equip cc vt model_ouput
1 A r cc d10 -0.56047565
2 A v cc d10 -0.23017749
3 B r no_cc d10 1.55870831
4 B v no_cc d10 0.07050839
5 C r part_cc d1+d10 0.12928774
6 C v part_cc d1+d10 1.71506499
7 D r cc d1 0.46091621
8 D v cc d1 -1.26506123
9 E r no_cc d1 -0.68685285
10 E v no_cc d1 -0.44566197
我的目标是制作一个 Lollipop 图以便:
- 它们按
cc
分组和着色,以mt_equip
作为shape
规范。 - 在每个
cc
类别中, Lollipop 从最低到最高排序。 - Lollipop 应该分开,不要像图中那样缠在一起。
我尝试了 ggalt
包中的 geom_lollipop()
选项,如下所示:
library(ggalt)
option2 <- ggplot(data = example_df,
aes(x = reorder(cc, model_ouput))) +
geom_lollipop(aes(y = model_ouput,
shape = mt_equip,
color = cc),
size = 5) +
scale_shape_manual(values = c(21, 24))
plot(option2)
这是我得到的:
我怎样才能:
- 解开 Lollipop ,使每个 Lollipop 都独立于
cc
组中? - 将 (1) 中解开的 Lollipop 从低到高排序?我试过
reorder
但没有产生如图所示的设计效果。 - 将条形图制作成空心的,以便进行颜色和描边的后期处理?
感谢您的帮助。
最佳答案
根据@GregorThomas 的一些提示,我终于用以下代码解决了这个问题:
library(ggalt)
library(dplyr)
library(tidyr)
set.seed(123)
example_df <- data.frame(strategy = as.factor(rep(LETTERS[1:5], each = 2)),
mt_equip = as.factor(rep(c('r', 'v'), times = 5)),
cc = as.factor(c('cc', 'cc', 'no_cc', 'no_cc', 'part_cc', 'part_cc', 'cc', 'cc', 'no_cc', 'no_cc')),
vt = as.factor(c(rep('d10', 4), rep('d1+d10', 2), rep('d1', 4))),
model_ouput = rnorm(10)
)
#the strategy variable is not unique so we make it so but combining two cols
example_df_mod <- example_df %>%
unite(col = 'strategy', c(strategy, mt_equip), remove = F)
#make lollipop plot grouped by cc and sorted within each group
option2 <- example_df_mod %>%
group_by(cc) %>%
arrange(model_ouput, .by_group = T) %>%
ggplot(aes(group = cc)) +
geom_lollipop(aes(x = order(cc, model_ouput),
y = model_ouput,
shape = mt_equip,
color = cc),
size = 5)
plot(option2)
关于r - 在组内排序的 Lollipop 图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61602311/