簡體   English   中英

使用ggplot2的序數因子的密度直方圖

[英]Density histogram for ordinal factor using ggplot2

我有一個簡單的數據集,看起來像這樣:

school       score     grade subject
Your school  83.27     1     English
All schools 113.60     6     English

年級是9個等級的序數因子,學校是2個等級的因子。

'data.frame':   12762 obs. of  4 variables:
 $ school : Factor w/ 2 levels "Your school",..: 1 2 2 2 2 2 2 2 2 2 ...
 $ score  : num  83.3 113.6 109.2 117.4 100.3 ...
 $ grade  : Ord.factor w/ 9 levels "1"<"2"<"3"<"4"<..: 1 6 6 7 4 3 6 1 6 6 ...
 $ subject: chr  "English" "English" "English" "English" ...

我想使用密度函數用ggplot2繪制多面直方圖。 如果我試着沒有密度我會得到這個:

p <- ggplot(ss, aes(x=grade))
p <- p + geom_histogram() 
p <- p + facet_wrap(~school)

在此處輸入圖片說明

當我添加密度以對y軸進行歸一化時,我得到以下信息:

p <- ggplot(ss, aes(x=grade))
p <- p + geom_histogram(aes(y=..density..)) 
p <- p + facet_wrap(~school)

在此處輸入圖片說明

我想念什么?

R無法計算一個因子的密度,即使是有序的因子。 最好的選擇是將grade轉換為數字(例如,使用as.numeric(as.character(x)) )。

xy <- data.frame(school = sample(c("your", "all"), size = 100, replace = TRUE),
                   grade = sample(1:10, size = 100, replace = TRUE))
xy$grade.factor <- factor(xy$grade, ordered = TRUE)

library(ggplot2)

# doesn't work for factors
ggplot(xy, aes(x = grade.factor)) +
  theme_bw() +
  geom_histogram(aes(y = ..density..)) +
  facet_wrap(~ school)

# works for integers/numeric
ggplot(xy, aes(x = grade)) +
  theme_bw() +
  geom_histogram(aes(y = ..density..)) +
  facet_wrap(~ school)

暫無
暫無

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

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