簡體   English   中英

如何在R中生成條形圖/直方圖,該條形圖/直方圖按因子編號排序但顯示因子名稱?

[英]How do I produce a barchart/histogram in R that orders by factor number but displays the factor names?

我有關於蘑菇食用性的數據,如下所示:

SpeciesName         Edibility   EdibilityRank  
abruptibulbus       Good                    3  
arvensis            Choice                  1  
bisporus            Good                    3  
bitorquis           Choice                  1  
campestris          Choice                  1  
diminutivus         Presumed harmless       4  
fuscofibrillosus    Choice non-standard     2  
haemorrhoidarius    Choice non-standard     2  
micromegethus       Presumed harmless       4  
placomyces          Mildly poisonous        5  
silvaticus          Choice non-standard     2  
silvicola           Good                    3  
subrufescens        Choice                  1  

對於每種蘑菇(第一列),都有一個可食用性描述符(第二列),數字可食用性排名(第三列),等級越低,蘑菇越可取。 描述符和排名之間存在一對一的關系。

我想生成一個條形圖/直方圖,以顯示每個可食用級別的頻率,按等級排序,並在x軸上用描述符標記。 換句話說,盡管可食用性描述符看起來像是名義/類別變量,但實際上是名義上的變量,名義關系由Rank變量給出。

我可以按照描述符的名稱按字母順序排序:

edtable <- table(SourceFile$Edibility)
par(mai=c(3,1,1,1))
barplot(edtable, las=2)

或按這樣的頻率:

edtable <- table(SourceFile$Edibility)
par(mai=c(3,1,1,1))
barplot(edtable [order(edtable, decreasing = T)], las=2)

但是我找不到一種方法來按數字等級排序相同類型的事物。

library(data.table)
library(ggplot2)

mytable = df[, .N, keyby = .(EdibilityRank, Edibility)]
ggplot(mytable, aes(Edibility, N )) + geom_histogram(stat = "identity")

您的源數據中有多余的信息,這是個壞主意,因為它可能導致數據輸入問題(例如,如果Edability和EdibilityRank相互矛盾)。 有幾種更好的方法,但是一種方法只是使用R的factor()類。 ggplot2遵循將“ levels =”定義為因子時定義的順序。 參見下面的不完整數據。

library(ggplot2)

mushrooms <- data.frame(SpeciesName = c("abruptibulbus", "arvensios", "boisbisporus", "bitorquis", "campestris", "diminutivus", "fuscofibrillosus", "placomyces"),
                  Edibility = factor(c("Good", "Choice", "Good", "Choice", "Choice", "Presumed harmless", "Choice non-standard", "Mildly poisonous"), 
                                 levels = c("Choice", "Choice non-standard", "Good", "Presumed harmless", "Mildly poisonous")))

ggplot(mushrooms, aes(x = Edibility)) + geom_histogram()

在此處輸入圖片說明

如果您正在從文本文件或其他內容(未指定)中讀取數據,則除非您指定stringsAsFactors = FALSE ,否則read.csv會自動將Edibility轉換為因子。 但是它將默認按字母順序排列因子級別。 在這種情況下,您需要指定它們,例如通過

mushrooms$Edibility <- factor(mushrooms$Edibility, levels = c(my ordered vector here))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM