r - 如何更改长数据框的 x 轴上非数字变量的顺序?
问题描述
我有一个很长的数据框,想用三组制作一个 xy 图。x 变量不是数字变量,当它被绘制时,它遵循特定的顺序。我想改变这一点,而不是按序列 {002}、{011}、{10-2}、{100} 绘制数据,而是按序列 {002}、{011}、{100} 绘制数据, {10-2} 即反转 x 轴上的第 3 和第 4 位置。
由于我的真实数据框更长,以编程方式重新排列值的最佳方法是什么。
谢谢!
set.seed(129)
df_long <- data.frame(x=c('{002}', '{011}', '{100}', '{10-2}', '{002}', '{011}', '{100}', '{10-2}', '{002}', '{011}', '{100}', '{10-2}'),
type=rep(c('A', 'B', 'C'), each=4),
value=rnorm(12))
ggplot(df_long, aes(x = x, y = value, group = type)) +
geom_point(aes(color = type)) +
geom_line(aes(color = type))
解决方案
由于离散尺度的限制决定了中断的顺序,并且可以给定一个函数,因此您可以使用匿名函数来反转第 3 和第 4 值。
library(ggplot2)
set.seed(129)
df_long <- data.frame(x=c('{002}', '{011}', '{100}', '{10-2}', '{002}', '{011}', '{100}', '{10-2}', '{002}', '{011}', '{100}', '{10-2}'),
type=rep(c('A', 'B', 'C'), each=4),
value=rnorm(12))
ggplot(df_long, aes(x = x, y = value, group = type)) +
geom_point(aes(color = type)) +
geom_line(aes(color = type)) +
scale_x_discrete(
limits = function(x) {
x[3:4] <- x[4:3]
x
}
)
由reprex 包(v0.3.0)于 2020 年 12 月 23 日创建
推荐阅读
- linux - 运行 n=-1 个作业时 CPU 内核未得到充分利用
- c# - 动态加载局部视图并从控制器加载索引
- bash - 以编程方式更新文件的 Bash 脚本
- bash - 如何从 yum check-updates 获取可用更新的计数
- ios - 如何在 UITableViewCell 中制作动态 UIStackView?
- javascript - 如何解决谷歌应用程序的内容服务 - 脚本返回 java 脚本对象而不是 json 字符串?
- webpack - 在 shadow dom 中包含 webpack dist css 文件
- python - Postgresql:用于子字符串匹配的 Levenshtein 编号
- php - php正则表达式获取base64字符串
- javascript - 动态加载 vuejs 库并在其上渲染组件