我對此提出了一些懷疑,但我確實看過其他問題,並沒有找到似乎適用於我的示例。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做到這一點,但我很樂意使用這個解決方案。 –