我对此提出了一些怀疑,但我确实看过其他问题,并没有找到似乎适用于我的示例。ggplot的数据帧变量订单
我想在ggplot的y轴上的字符标签基于数据框的其他列排序。我相信这是一个在使用ggplot之前正确设置因子和级别的问题,但我对如何做到这一点的具体细节有困难。
下面是一个简化的例子(对潜在不似乎是有意义的点):
library(tidyverse)
library(ggplot2)
set.seed(1)
num_rows <- 12
sample_names <- do.call(paste0, replicate(5, sample(letters, num_rows, TRUE), FALSE))
df1 <- data.frame(region=sample(c("N", "S", "E", "W"), num_rows, replace = TRUE),
sub_region=sample(c("High", "Medium", "Low"), num_rows, replace = TRUE),
my_order = seq(1,num_rows),
my_name = sample_names,
var_1 = sample(100, num_rows, replace = TRUE))
#try using arrange
df2 <- df1 %>% arrange(factor(df1$region, levels = c("N","E","S","W")),
factor(df1$sub_region, levels = c("High","Medium","Low")))
df2 %>% ggplot() + geom_point(aes(x = var_1, y = my_name, color=sub_region))
#try using order
df3 <- df1
df3$region <- factor(df1$region, levels = c("N","E","S","W"))
df3$sub_region <- factor(df1$sub_region, levels = c("High","Medium","Low"))
df4 <- df3[order(df1$region, df1$sub_region, df1$my_order),]
df4 %>% ggplot() + geom_point(aes(x = var_1, y = my_name, color=sub_region))
我希望具有由区域,则子区域,然后my_order(排序my_names和相应的值(至少现在不显示图表中的任何一个),但my_name似乎继续以字母顺序显示,无论我尝试使用排列(来自dplyr)还是顺序。我意识到我没有为my_order列添加任何代码,但由于排序的第一个级别不起作用,我以为我会坚持这一点。
我寻找y轴是按照该顺序(从顶部向下):
qymni fswvl jjkcs ouasm xziqg fqvar
等
显然,我做错了什么,但我不确定是什么。我将不胜感激任何帮助。另外,我是否正确,一旦我有这个工作正常,使用group_by并从dplyr总结将保留my_names的顺序?
谢谢!我不会想出这个,因为我发现forcats的文档有点稀疏,我没有意识到我需要以这种方式使用顺序。我认为有可能没有forcats做到这一点,但我很乐意使用这个解决方案。 –