我已經搜索了 SO 試圖找到解決方法。我找到了一些答案,但是當我應用它們時,它們并沒有按我的意圖作業(或者我可能只是做錯了什么)。基本上,我有一個我正在嘗試使用 facet_grid 繪制的資料集。我的問題是雙重的:
- 我希望根據數值對網格進行排序
- 我有一個分組變數,我也想按數值(降序)排序,但我希望能夠將升序計數分配給一個組(即,最高組獲得 1,第二高獲得 2 等)所以我可以先選擇最高的組,然后是第二高的組,等等。我有很多組,這些組附帶的值和名稱是隨機的,所以我不想手動分配值。
這是我正在嘗試做的一個例子:
df <- data.frame(grp.name = c("T","F","P","T","F","P","T","F","P","T","F","P"),
grp.num = c(0.9954,0.8754,0.5006,0.9954,0.8754,0.5006,0.9954,0.8754,0.5006,0.9954,0.8754,0.5006),
ind.name = c("L","N","M","C","A","B","I","H","G","D","F","E"),
amount = c(48.41234, 48.12343, 46.83546, 25.9454, 26.01568, 24.946454, 21.1, 21.4545, 20.1, 20.8, 21.5644, 16.5) )
df <- df[order(-df$grp.num,-df$amount),]
t <- ggplot(data=subset(df,grp.name=="T"), aes(grp.name, amount, fill=grp.name, group=grp.name, shape=grp.name, facets=grp.name))
geom_col(width=0.5, position = position_dodge(width=0.6))
facet_grid(grp.name paste0("Number: ",grp.num) ~ ind.name paste0("Number: ",amount),switch = "y")
t
在這種情況下,我只對組 T 進行子集化的原因是因為我想繪制出 10 個最高的組,然后使用 grid.arrange 將它們堆疊在另一個圖中。我希望能夠在不知道名稱的情況下僅對組 1、2、3 等進行子集化,因為這些名稱再次發生變化。
這是我得到的。不是按amount它對方面進行排序,而是按字母順序對它們進行排序ind.name。我首先想要“L”組,因為它的數量最高,然后是“C”,然后是“I”,然后是“D”。同樣,我不想手動執行此操作,因為這些值會發生變化,并且我正在對許多組重新繪制這些圖。

uj5u.com熱心網友回復:
有時,在傳遞給 ggplot 函式之前進行資料準備更簡單。
分面順序適用于因子,因此轉換為由 排序ind.name的因子amount。創建一個grp_nr基于因子順序。
根據 OP 的評論和新資料集進行了修訂。
library(ggplot2)
library(forcats)
library(dplyr)
df %>%
mutate(ind.name = fct_rev(fct_reorder(ind.name, amount)),
amount = round(amount, 3),
grp.num_lev = as.integer(fct_rev(factor(grp.num))),
grp.num = round(grp.num, 3))%>%
filter(grp.num_lev==1) %>%
ggplot(aes(grp.name, amount, fill=grp.name, group=grp.name, shape=grp.name))
geom_col(width=0.5, position = position_dodge(width=0.6))
facet_grid(grp.name paste0("Number: ", grp.num) ~ ind.name paste0("Number: ", amount), switch = "y")

由
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/373433.html
下一篇:使用c#對自定義鏈接串列進行排序
