[英]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.