![一圖勝千言:用好圖表,好好說話](http://p2.ttnews.xyz/loading.gif)
作者:herain R語言中文社區專欄作者
知乎ID:https://www.zhihu.com/people/herain-14
前言
從數據需求的角度選擇恰當的圖表,更好的以圖的形式彰顯數據的潛在性,規律性,價值性,數據的描述性分析包括用圖表展示數據和用統計量描述數據等內容。避免使用圖表上的誤區,區分扇形圖與餅圖(很多人都把餅圖當作扇形圖),不要用時間年份做橫軸的條形圖(真的很傻),本文將常有的圖表根據恰當的用途歸位五大類,同時提供R繪圖方法。
五大類
- 展示【類別頻數】的圖表:簡單的條形圖, 帕累託圖,複式條形圖和脊形圖,馬賽克圖,餅圖,扇形圖,洛倫茨曲線
- 展示【數據分佈】的圖表:直方圖,莖葉圖,箱線圖,小提琴圖,點圖,核密度圖
- 展示【數據關係】的圖表:散點圖,矩陣散點圖,氣泡圖
- 展示【數據相似性】的圖表:輪廓圖,雷達圖,星圖,臉譜圖
- 時間之上【看趨勢】的圖表: 時間序列圖
1.展示類別頻數的圖表
# 單變量頻度表
> data1> summary(data1)
社區性別 態度
A社區:27 男:36 反對:31
B社區:17 女:44 贊成:49
C社區:21
D社區:15
> count1 > prop.table(count1)*100
#二聯列表
> count1 > addmargins(count1)
#多維列聯表
> count1> count1
1.1 簡單的條形圖
> par(mfrow=c(1,3), mai=c(0.7,0.7,0.6,0.1),cex=0.7,cex.main=0.8)
> barplot(count1, xlab="頻數", ylab="社區",horiz=TRUE, main = "(a) 水平條形圖", col=2:5, family='SimSun')
> barplot(count2, xlab="性別", ylab="頻數",col=8:9, main = "(b) 垂直條形圖", family='SimSun')
> barplot(count3, xlab="態度", ylab="頻數",col=2:3, main = "(c) 垂直條形圖", family='SimSun')
![一圖勝千言:用好圖表,好好說話](http://p2.ttnews.xyz/loading.gif)
1.2 帕累託圖:
> par(mai=c(0.7,0.7,0.1,0.8),cex=0.7,cex.main=0.8)
> barplot(x, xlab="社區", ylab="頻數", col=2:5, family="SimSun")
> y> par(new=T)
> plot(y, type="b", lwd=1.5, pch=15, axes=F, xlab=' ', ylab=' ', main=' ')
> axis(4)
> par(las=0)
> mtext("累積頻數", side=4, line=3)
> mtext("累積頻數", side=4, line=3, family='SimSun')
> mtext("累積分佈曲線", line=-2.5, cex=0.8, adj=0.75,family='SimSun')
1.3:複式條形圖和脊形圖
par(mfcol=c(1,2), cex=0.6)
barplot(mytable, xlab="社區", ylab="頻數", ylim=c(0,16),col=c("red", "blue"),legent=rownames(mytable), args.legend=list(x=12), beside=TRUE, main=“(a)社區條形圖”,family=‘SimSun’)
barplot(mytable, xlab="社區", ylab="頻數", ylim=c(0,30),col=c("green", "blue"),legend=rownames(mytable), args.legend=list(x=4.8), main=“(b)社區 堆疊條形圖”,family='SimSun')
1.4:馬賽克圖
mosaicplot(~性別+社區+態度, data=data1, color=2:3, main="")
1.5:餅圖
data1> count1> count1
A社區 B社區 C社區 D社區
27172115
> name> name
[1] "A社區" "B社區" "C社區" "D社區"
> precent> label> par(pin=c(3,3),mai=c(0.1,0.4,0.1,0.4), cex=0.8)
> pie(count1,labels=label,init.angle=90)
> pie(count1,labels=label,init.angle=90,family="SimSun")
pie3D(count1,labels=label,explode=0.1,labelcex=0.7,family="SimSun")
1.6: 扇形圖
fan.plot(count1, labels=label, ticks=200, col=c(4:9))
1.7: 洛倫茨曲線
example2_10library(DescTools)
plot(Lc(example2_10$組中值, example2_10$人數), xlab="人數比例", ylab="收入比例",col=4,panel.first=grid(10,10,col="gray70"))
2.展示數據分佈的圖表
2.1 :直方圖
example2_2 > par(mfcol=c(2,2), cex=0.7, family='SimSun')
> hist(example2_2$銷售額,xlab="銷售額", ylab="頻數", main="(a)普通")
> hist(example2_2$銷售額,freq=FALSE, breaks=20, xlab="銷售額", ylab="頻率", main="(c)增加軸線須線和密度線")
> curve(dnorm(x,mean(example2_2$銷售額), sd(example2_2$銷售額)), add=T, col="red")
>rug(example2_2$銷售額)
2.2:莖葉圖
> stem(example2_2$銷售額)
The decimal point is 1 digit(s) to the right of the |
16 | 17
17 | 1222
18 | 1136788
19 | 11234566667889999
20 | 000012333334455566677778899
21 | 00224556666777788889
22 | 0222344445556689
23 | 0334455678889
24 | 0133368
25 | 2234
26 | 15
27 | 2
2.3:箱線圖
boxplot(example2_2$銷售額, col="lightblue", cex.axis=0.5)
> example2_3 > par(mfcol=c(1,1), cex=0.7, family='SimSun')
> boxplot(example2_3, col="lightblue",xlab="運動員", ylab="射擊環數", cex.lab=0.8, cex.axis=0.6, family="SumSin")
2.4:小提琴
library(vioplot)
par(cex=0.5)
x1x2x3x4x5x6vioplot(x1,x2,x3,x4,x5,x6, col="lightblue", names=c('亞歷山大.彼得裡夫利','拉爾夫.許曼',
'克里斯蒂安.賴茨','列昂尼德.葉基莫夫','基思.桑德森','羅曼.邦達魯克'))
2.5:點圖
> example2_3_1 > par(mfcol=c(1,1), cex=0.7, family='SimSun')
> dotchart(example2_3_1$射擊環數, groups=example2_3_1$運動員, xlab="射擊環數", pch=20)
> par(mfcol=c(1,1), cex=0.7, family='SimSun')
> dotplot(射擊環數~運動員, data=example2_3_1, col="black", pch=9, family='SimSun')
2.6:核密度圖
> par(cex=0.7, family='SimSun')
> densityplot(~射擊環數|運動員, data=example2_3_1,col="blue",cex=0.5, family='SimSun')
3.展示數據關係的圖表
3.1:散點圖
> x> y> d> plot(d)
> polygon(d[chull(d),], col='pink', lty=3,lwd=2)
> points(d)
> abline(lm(y~x),lwd=2,col=4)
> abline(v=mean(x),h=mean(y),lty=2,col="gray70")
3.2:矩陣散點圖
example2_4> par(cex=0.7, family='SimSun')
> plot(example2_4, cex=0.6, gap=0.5, family="SimSun")
3.3:氣泡圖
> attach(example2_4)
> r> symbols(廣告費用,銷售網點數,circle=r, inches=0.3, fg="white", bg="lightblue",ylab="銷售網點數", xlab=" 廣告費用")
> text(廣告費用,銷售網點數, rownames(example2_4),cex=0.4)
4.展示數據相似性的圖表
4.1:輪廓圖
> example2_5> par(mai=c(0.7,0.7,0.1,0.1),cex=0.8, family="SimSun")
> matplot(t(example2_5[2:9]),type='b',lty=1:7,col=1:7,xlab="消費項目",ylab="支出金額",pch=1,xaxt='n')
> axis(side=1, at=1:8, labels=c("食品","衣著","居住","家電設備用品及服務","醫療保健", "交通和通信", "教育文化娛樂服務","其他商品和服務"),cex.axis=0.6)
"高收入戶", "最高收入戶"))
> legend(x="topright", legend=c("最低收入戶", "低收入戶","中等偏下戶", "中等收入戶", "中等偏上戶", "高收入戶", "最高收入戶"), lty=1:7, col=1:7, text.width=1, cex=0.7)
4.2:雷達圖
> library(fmsb)
> radarchart(example2_5[,2:9], axistype=0, seg=4, maxmin=F, vlabels=names(example2_5[,2:9]), pcol=1:7, plwd=1.5)
> legend(x="topright", legend=c("最低收入戶", "低收入戶","中等偏下戶", "中等收入戶", "中等偏上戶", "高收入戶", "最高收入戶"), lty=1:7, col=1:7, text.width=1, cex=0.7)
4.3:星圖
> mat25 > rownames(mat25)> par(cex=0.7, family='SimSun')
> stars(mat25, key.loc=c(7,2,5),cex=0.8)
5.展示數據隨時間變化的圖表
example2_9> par(mai=c(0.7,0.7,0.1,0.1), cex=0.8, family="SimSun")
> plot(example2_9[,2], lwd=1.5, ylim=c(2000,30000), xlab="年份", ylab="居民消費水平",type="n")
> grid(col="gray60")
> points(example2_9[,2], type="o", lwd=1.5, xlab="年份", ylab="居民消費水平")
> lines(example2_9[,3], type="b", lty=2, lwd=1.5, xlab="年份", col="blue")
> legend(x="topleft",legend=c("農村居民消費水平","城鎮居民消費水平"), lty=1:2, col=c(1,4), cex=0.8)
往期精彩:
- R語言圖表排版之一頁多圖
- 圖表色彩運用原理的全面解析
- 常用圖表的用法-分佈類
回覆 爬蟲 爬蟲三大案例實戰
回覆 Python 1小時破冰入門
回覆 數據挖掘 R語言入門及數據挖掘
回覆 人工智能 三個月入門人工智能
回覆 數據分析師 數據分析師成長之路
回覆 機器學習 機器學習的商業應用
回覆 數據科學 數據科學實戰
回覆 常用算法 常用數據挖掘算法
閱讀更多 天善智能 的文章