r - 如何在ggplot中绘制每组带有误差线的点?
问题描述
我有以下数据框:
mlt = structure(list(V1 = c("Female > 55", "Male > 55", "Finance Industry",
"South"), climatechange = c(0.116, 0.093, -0.186, 0.311), `SE climatechange` = c(0.299720594648884,
0.209685397712576, 0.198822469025311, 0.220794746780239), housing = c(-0.223,
0.288, -0.063, -0.401), `SE housing` = c(0.240842826106496, 0.262613125585529,
0.233796203318591, 0.112279926339202), macro = c(-0.219, -0.243,
0.252, 0.058), `SE macro` = c(0.167027449787956, 0.109527362813708,
0.225740740488032, 0.139837005156927), `pension and savings` = c(0.287,
0.815, 0.348, -0.611), `SE pension and savings` = c(0.278129111903788,
0.26508680711124, 0.250889015745089, 0.0571662145564419)), row.names = c(NA,
-4L), class = "data.frame")
View(df)
数据框有 4 个主题,每个主题都有相应的标准错误。到目前为止,我只绘制了第一个主题:
mlt1 = mlt[,c(1:3)]
ggplot(mlt1, aes(V1, climatechange,
ymin = climatechange - 1.96*`SE climatechange`, ymax= climatechange + 1.96*`SE climatechange`)) +
scale_x_discrete('') +
scale_y_continuous('Marginal Effect \n',limits=c(-1,1)) +
theme_classic() +
theme(panel.border = element_rect(fill=NA)) + geom_errorbar(aes(x = V1, y = climatechange),
size=0.8,width=.2, col = "#0072B2") +
geom_point(aes(fill=factor(climatechange)), size=5, shape = 21) +
scale_fill_manual(values=c(rep("#0072B2",13))) +
geom_hline(yintercept=0, col = "grey") + theme(legend.position="none") + theme(axis.text = element_text(color = "black", size = 12),
axis.title = element_text(size = 12)) + labs(title="Climate Change") +
theme(plot.title = element_text(color = "black", size = 12, face = "bold", hjust = 0.5)) +
theme(axis.text.x = element_text(angle = 45, hjust = 0.5, vjust = 0.5))
不过,我想做的是得到一个如下所示的图表:
其中不是 A,B,... 我有我的四个主题,并且为每个主题显示相应的变量。环顾四周,我看到有人使用:facet_grid(.~Test, space = "free_x", shrink = T, scales = "free_x")
. 然而; 我不确定如何应用于我的数据集。
谁能帮我?
谢谢!
解决方案
要为所有四个做 - 首先您需要旋转几次以使数据框整洁(即为measure
(topic)mean
和创建列SE
),然后通过度量变量创建数据框分面:
mlt %>%
pivot_longer(2:9,
names_to = c("measure"),
values_to = "est") %>%
mutate(stat = ifelse(str_detect(measure, "^SE"), "SE", "mean"),
measure = str_extract(measure, "\\w*$")) %>%
pivot_wider(names_from = "stat",
values_from = "est",
id_col = c(V1, measure)) %>%
ggplot(aes(x = V1, mean,
ymin = mean - 1.96*SE,
ymax = mean + 1.96*SE)) +
scale_x_discrete('') +
scale_y_continuous('Marginal Effect \n',
# limits=c(-1,1)
) +
coord_cartesian(ylim = c(-1, 1)) +
theme_classic() +
theme(panel.border = element_rect(fill=NA)) +
geom_errorbar(size=0.8,width=.2, col = "#0072B2") +
geom_point(size=5, shape = 21) +
scale_fill_manual(values=c(rep("#0072B2",13))) +
geom_hline(yintercept=0, col = "grey") +
theme(legend.position="none") +
theme(axis.text = element_text(color = "black", size = 12),
axis.title = element_text(size = 12)) + labs(title="Climate Change") +
theme(plot.title = element_text(color = "black", size = 12, face = "bold", hjust = 0.5)) +
theme(axis.text.x = element_text(angle = 45, hjust = 0.5, vjust = 0.5)) +
facet_wrap(~measure, nrow = 1)
推荐阅读
- ios - 如何在 Swift 中找到解码 JSON 的第一个值
- typescript - 如何获得标识符节点打字稿编译器的定义
- r - R ifelse 抽出 NA
- express - 在 Ubuntu 18.04 服务器上安装 Oracle Express Ediion 18c - 连接问题
- python - 您好,我的 bitmex rest api 连接出错
- javascript - Openlayers (ol5) mouseposition 和 map.on 位置向北约 -5 公里,东约 -3 公里
- javascript - 在插入之前检查样本是否存在,如果存在则在下一列中插入
- discord.js - ytdl-core 无法提取 html5player 密钥:https://www.youtube.com/s/player/6bc49f0e/player_ias.vflset/en_US/base.js
- java - 将韩文(韩文)字母分解成元素?
- amazon-cloudformation - Whatsapp 商业 API HTTPS 证书