r - 如何在 ggplot geom_point 中实现轴条目的方面特定排序?
问题描述
我考虑以下类型的geom_point
情节。我需要为每个垂直面根据它们的大小s
对条目进行排序。下图中所需的顺序是A、C、B、D 和B、A、C(或 B、C、A)。困难在于,虽然我可以通过重新排列 factor 的级别来指定一般顺序,但我不知道如何为每个方面更改此顺序。m
v
s1
s2
m
set.seed(1)
m1 = c('A','B','C','D')
m2 = c('A','B','C')
s = c(rep('s1',4),rep('s2',3))
d = data.frame(m = factor(c(m1,m2)), s=factor(s), v=sample(1:10, replace=T,7))
library(ggplot2)
ggplot(d, aes(x=m, y=v)) + geom_point(size=2) + coord_flip() +
facet_grid( s~. , scales='free', space='free')
解决方案
一种选择是确实使用您所描述的因子级别,但使用一个前缀来分隔不同方面的级别。稍后,您可以使用labels
scale 的参数来删除前缀。下面的例子:
set.seed(1)
m1 = c('1A','1B','1C','1D')
m2 = c('2A','2B','2C')
s = c(rep('s1',4),rep('s2',3))
d = data.frame(m = c(m1,m2),
s=factor(s),
v=sample(1:10, replace=T,7),
stringsAsFactors = FALSE)
d$m <- factor(d$m, levels = c("1A", "1C", "1B", "1D", "2B", "2A", "2C"))
library(ggplot2)
ggplot(d, aes(x=m, y=v)) +
geom_point(size=2) +
coord_flip() +
facet_grid( s~. , scales='free', space='free') +
scale_x_discrete(
labels = function(x){substr(x, 2, nchar(x))}
)
推荐阅读
- go - 如何追踪 golang 堆栈溢出?
- javascript - Javascript中的第一类函数和回调函数有什么区别吗?
- php - 在laravel中更改与ckeditor5集成的ckfinder3的默认窗口
- ios - 如何在 iOS 应用中获取 Wifi 提供商信息
- python - 如何在 pygame 中将 f 字符串传送到 if 语句?
- conditional-operator - 与三元运算符混淆
- firebase - 如何在 Flutter 中使用 FutureBuilder 小部件更新数据?
- react-native - 异步/等待 componentDidMount 中的数据获取未按预期提供结果
- google-app-engine - 使用 gcloud 命令行界面在特定区域创建谷歌云应用引擎实例?
- python - 我正在尝试使用 py2app 构建我的 python 代码的独立应用程序,但是当我打开应用程序时出现错误