[英]R ggplot2 stacked barplot by percentage with several categorical variables
[英]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()
) 中的函數允許您以一種可以輕松調整繪圖函數的方式轉換數據。 這是為每個變量生成圖的代碼。 在你的情況,如果你有多個分類變量,你可以調整與面ncol
和nrow
選項。 接下來解決方案:
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.