r - 在 R 中使用 fct_relevel 和 ggplot 重新排序变量
问题描述
我正在尝试使用 fct_relevel() 对图中的变量进行重新排序。我尝试将列更改为一个因子。我不确定为什么我的代码不起作用。我需要“拥有的面板”显示在“没有拥有的面板”前面。我也对不依赖 fct_relevel() 的替代方案持开放态度。
图形代码:
groups %>%
mutate(panels = fct_relevel(panels), "Owned Panels", "Did Not Own Panels") %>%
ggplot(., aes(x=reason, y = mean, fill = panels)) +
geom_bar(stat = "identity", color = "black", position = position_dodge()) +
geom_errorbar(aes(ymin = mean - se, ymax = mean+se), width = .2, position = position_dodge(.9)) +
geom_text(aes(label = round(mean, digits =2)), position = position_dodge(width=1.0), vjust = -1.5) +
#facet_wrap(~dv) +
labs(title = ~ "Likelihood of solar panel installation after meeting ambassador",
y = "Likelihood of installing solar panels",
x = "Reason to install solar panels") +
scale_fill_discrete(name = "Ambassador solar\npanel ownership") +
scale_y_continuous(limits = c(1, 7), oob = scales::oob_squish)
数据:
structure(list(dv = c("behavior", "behavior", "behavior", "behavior"
), panels = c("Owned Panels", "Owned Panels", "Did Not Own Panels",
"Did Not Own Panels"), reason = c("Environment", "Money", "Environment",
"Money"), mean = c(5.15789473684211, 5.36065573770492, 4.85454545454545,
4.35483870967742), se = c(0.224988824122626, 0.194223670966034,
0.187878787878788, 0.210884132880012)), row.names = c(NA, -4L
), groups = structure(list(dv = c("behavior", "behavior"), panels = c("Did Not Own Panels",
"Owned Panels"), .rows = structure(list(3:4, 1:2), ptype = integer(0), class = c("vctrs_list_of",
"vctrs_vctr", "list"))), row.names = 1:2, class = c("tbl_df",
"tbl", "data.frame"), .drop = TRUE), class = c("grouped_df",
"tbl_df", "tbl", "data.frame"))
解决方案
在 OP 的代码中,fct_relevel
在指定级别之前已关闭
library(forcats)
library(dplyr)
library(ggplot2)
groups %>%
mutate(panels = fct_relevel(panels), "Owned Panels", "Did Not Own Panels")
^
相反,它会(也在ungroup
这样做之前)
groups %>%
ungroup %>%
mutate(panels = fct_relevel(panels, "Owned Panels", "Did Not Own Panels") ) %>%
ggplot(., aes(x=reason, y = mean, fill = panels)) +
geom_bar(stat = "identity", color = "black", position = position_dodge()) +
geom_errorbar(aes(ymin = mean - se, ymax = mean+se), width = .2, position = position_dodge(.9)) +
geom_text(aes(label = round(mean, digits =2)),
position = position_dodge(width=1.0), vjust = -1.5) +
#facet_wrap(~dv) +
labs(title = ~ "Likelihood of solar panel installation after meeting ambassador",
y = "Likelihood of installing solar panels",
x = "Reason to install solar panels") +
scale_fill_discrete(name = "Ambassador solar\npanel ownership") +
scale_y_continuous(limits = c(1, 7), oob = scales::oob_squish)
推荐阅读
- c# - asp .net core 3 本地化问题导致页面中断
- android - 底部片断内存泄漏
- node.js - Ionic,Node Sass 还不支持你当前的环境
- java - 我希望我的应用程序在 gps 打开时在后台服务上运行
- django - 石墨烯在订阅时返回 NoneType 错误
- sql - 从表中为选择的每一行选择任意行
- r - 计算数据集每一列的比例(百分比)
- angular - 无法加载角度生成的网页(ng build --prod)
- python - 你能把 python 编程到 Arduino 上吗
- snowflake-cloud-data-platform - 我们可以在雪花数据库的物化视图中使用枢轴函数吗