簡體   English   中英

多個分類變量的條形圖除以 R 中的一個分類變量

[英]Barplot for several categorical variables divided by one categorical variable in R

我想可視化一個分類變量如何為其他幾個分類變量而變化。

我的數據看起來像這樣

  Species Class species2
1   setosa     1        0
2   setosa     1        1
3   setosa     1        0
4   setosa     1        1
5   setosa     1        0
6   setosa     1        1
7   setosa     0        0
8   setosa     0        1
9   setosa     1        1
10  setosa     1        1

在我的真實dataset我有 13 個分類變量,我想按類划分它們,如下所示。

條形圖

有沒有更簡單的方法來使用格子或R其他包來做到這一點? 理想情況下,我想要一個帶有每個變量面板的圖,顯示每個級別的計數或百分比,由變量“類”着色。

對於這個例子,我使用了以下代碼。

library(lattice)
data <- iris
data <- as.data.frame(data)
data <- data[-c(1,2,3,4)]
data$Class <- as.factor(c(rbinom(50,1,0.7),rbinom(100,1,0.1)))
data$species2 <- as.factor(rbinom(150,1,0.85))

data2 <- as.data.frame(table(data$Species,data$Class))
barchart(Var1~Freq,groups=Var2,data=data2,stack=TRUE,
         auto.key=list(title = "Class",columns=2))
data3 <- as.data.frame(table(data$species2,data$Class))
barchart(Var1~Freq,groups=Var2,data=data3,stack=TRUE,
         auto.key=list(title = "Class",columns=2))

也許你正在尋找這個。 我建議你使用ggplot2 接下來描述的代碼可以根據需要為每個變量構建一個圖。 它被稱為受精圖。 獲得它的關鍵是將數據重塑為長形。 根據您的代碼,您必須根據每個變量進行拆分,然后使用lattice來創建每個分開的圖。 優點是tidyverse ( pivot_longer() ) 中的函數允許您以一種可以輕松調整繪圖函數的方式轉換數據。 這是為每個變量生成圖的代碼。 在你的情況,如果你有多個分類變量,你可以調整與面ncolnrow選項。 接下來解決方案:

library(tidyverse)
#Data
data <- iris
data <- as.data.frame(data)
data <- data[-c(1,2,3,4)]
data$Class <- as.factor(c(rbinom(50,1,0.7),rbinom(100,1,0.1)))
data$species2 <- as.factor(rbinom(150,1,0.85))
#Code
data %>% pivot_longer(-Class) %>%
  group_by(name,Class,value) %>%
  summarise(N=n()) %>%
  ggplot(aes(y=value,x=N,fill=Class))+
  geom_bar(stat = 'identity',color='black',alpha=0.2)+
  facet_wrap(.~name,scales='free')+
  theme_bw()+
  theme(legend.position = 'top')

輸出:

在此處輸入圖片說明

在百分比的情況下,你可以試試這個:

#Code 2
data %>% pivot_longer(-Class) %>%
  group_by(name,Class,value) %>%
  summarise(N=n()) %>%
  ggplot(aes(y=value,x=N,fill=Class))+
  geom_bar(stat = 'identity',color='black',alpha=0.2,position = 'fill')+
  scale_x_continuous(labels = scales::percent)+
  facet_wrap(.~name,scales='free')+
  theme_bw()+
  theme(legend.position = 'top')

輸出:

在此處輸入圖片說明

暫無
暫無

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

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