lecture
website icon
統計繪圖
簡介 直方圖 密度圖 長條圖 折線圖 圓餅圖 散布圖 箱型圖 雷達圖 動畫
×
website icon 資料管理 統計分析 相關資源 巨人肩膀 語法索引 關於作者

簡介

本部分介紹長條圖,使用到的指令包含:

Facebook Icon Twitter Icon LinkedIn Icon LINE Icon

長條圖的用途是顯示類別變數的次數分配,與直方圖用於表示連續變數的次數或機率分配有明顯不同,所以長條圖不能轉換成密度圖。

長條圖

barplot()是R Base繪製長條圖的指令,通常需要搭配table()計數,如果要替每個長條取名稱,可使用names.arg參數。要增加數值,先將變數轉換為字串後再利用text()加上。

> data<-read.csv("c:/Users/USER/downloads/customer.csv", header=T, sep=",")
> count<-table(data$pets_dogs)
> p<-barplot(count, col="aquamarine4", ylim=c(0,90), names.arg=c("No dogs", "1 dog", "2 dogs"), main="How many dogs do you have?")
> text(p, y=count+2, labels=as.character(count))

當然,我們也可以把圖改為橫式,只要設定horiz=T即可。

> p<-barplot(count, col="aquamarine4", horiz=T, xlim=c(0,90), names.arg=c("No dogs", "1 dog", "2 dogs"), main="How many dogs do you have?")
> text(p, x=count+2, labels=as.character(count))
R Base直式長條圖 R Base橫式長條圖

ggplot2的長條圖指令是geom_bar(),再用geom_text()加上資料標籤,使用vjust、hjust調整垂直、水平平分距離。

> p<-ggplot(data, aes(x=pets_dogs))+
+ geom_bar(color="aquamarine4", fill="aquamarine4")+
+ xlab("No. of dogs")+
+ theme_minimal()+
+ ggtitle("How many dogs do you have?")+
+ geom_text(stat="count", aes(label=(..count..)), vjust=-1)
> p

直條圖轉換成橫條圖的時候,只需加上coord_flip()。

> p<-ggplot(data, aes(x=pets_dogs))+
+ geom_bar(color="aquamarine4", fill="aquamarine4")+
+ xlab("No. of dogs")+
+ theme_minimal()+
+ ggtitle("How many dogs do you have?")+
+ geom_text(stat="count", aes(label=(..count..)), hjust=-1)+
+ coord_flip()
> p
ggplot2直式長條圖 ggplot2橫式長條圖

堆疊長條圖

堆疊長條圖的畫法直接在table()裡設定分組變數,再用barplot()繪圖。

> count<-table(data$gender, data$pets_dogs)
> barplot(count, main="How many dogs do you have?(by gender)", col=c("aquamarine3", "aquamarine4"), names.arg=c("No dogs", "1 dog", "2 dogs"))
> legend("topright", c("Male", "Female"), bty="n", fill=c("aquamarine3", "aquamarine4"))

ggplot2堆疊長條圖的繪圖法:

> p<-ggplot(data, aes(x=pets_dogs, fill=as.factor(gender)))+
+ geom_bar()+
+ scale_fill_manual(label=c("Female", "Male"), values=c("aquamarine4", "aquamarine3"))+
+ theme_minimal()+
+ ggtitle("How many dogs do you have? (by gender)")+
+ theme(legend.title=element_blank())+
+ geom_text(stat="count", aes(label=..count..), position=position_stack(vjust=0.5))
> p
R Base堆疊長條圖 ggplot2堆疊長條圖

群組長條圖

R Base群組長條圖的畫法直接用beside=TRUE設定。

> barplot(count, beside=TRUE, main="How many dogs do you have?(by gender)", col=c("aquamarine3", "aquamarine4"), names.arg=c("No dogs", "1 dog", "2 dogs"))
> legend("topright", c("Male", "Female"), bty="n", fill=c("aquamarine3", "aquamarine4"))

ggplot2的群組長條圖與堆疊長條圖的差異,在於position="dodge"參數設定。

> p<-ggplot(data, aes(x=pets_dogs, fill=as.factor(gender)))+
+ geom_bar(position="dodge")+
+ scale_fill_manual(label=c("Male", "Female"), values=c("aquamarine3", "aquamarine4"))+
+ theme_minimal()+
+ theme(legend.title=element_blank())+
+ ggtitle("How many dogs do you have? (by gender)")
> p
R Base群組長條圖 ggplot2群組長條圖