第三章、数据可视化
本章主要是了解一下R语言中自带的一些画图工具和数据包,用以数据分析。
注:本章大部分代码出自老师PPT,数据是R语言自带数据,图像是自己练习截图,本文主要是记录自己的练习过程。
本章的基本内容:
基本图形:条形图、饼图、直方图、核密度图、箱线图、马赛克图
中级绘图:散点图、气泡图、折线图、相关图、马赛克图
一、基本图形
1.条形图(Bar plots)
使用vcd包
(1)简单条形图:
barplot(height)
其中height是一个向量或一个矩阵
例:数据源是随vcd包分发的Arthritis数据框,探索类风湿性关节炎新疗法研究的结果
library(vcd)
counts<-table(Arthritis$Improved)#准备数据
head(counts)
#vertical barplot
barplot(counts,main = "Simple Bar Plot",
xlab = "Improvement",ylab = "Frequency")
#horizontal bar plot
barplot(counts,main="Horizintal Bar Plot",
xlab = "Frequency",ylab = "Improvement",horiz = TRUE)
(2)堆砌条形图(stacked barplot):报告里比较喜欢堆砌条形图
选择数据
counts1<-table(Arthritis$Improved,Arthritis$Treatment)
counts1
#stacked barplot
barplot(counts1,
main = "Stacked barplot",
xlab = "Treatment",ylab = "Freequency",
col=c("red","yellow","green"),
legend=rownames(counts1))
(3)分组条形图(grouped barplot):
# grouped barplot
barplot(counts1,
main="Grouped Bar Plot",
xlab="Treatment", ylab="Frequency",
col=c("red", "yellow", "green"),
legend=rownames(counts1), beside=TRUE)
(4)均值条形图
除了基于计数数据或频率数据,还可以使用数据整合函数结合barplot()函数,来创建表示均值、中位数、标准差等的条形图
例:美国各个地区平均文盲率排序的条形图:
states <- data.frame(state.region, state.x77)#R自带数据
means <- aggregate(states$Illiteracy,
by=list(state.region), FUN=mean) #聚合运算求均值
means <- means[order(means$x),] #排序
barplot(means$x, names.arg=means$Group.1)
title("Mean Illiteracy Rate Barplot")
2.饼图
统计学家更倾向于使用条形图或点图,数据分析中用的不多。
(1)饼图的创建:
饼图可以由pie(x,labels)创建
其中x是一个非负的数值向量,表示每个扇形的面积,而labels则是表示各个扇形标签的字符型向量。
(2)饼图举例:
①简单的饼图
pieces<-c(15,4,6,25,11)
names<-c("a","b","c","d","e")
pie(pieces,labels = names,main = "Pie chart")
②3D饼图(仅仅是炫酷而已)
install.packages("plotrix")#先导入包
library(plotrix)
pie3D(pieces,labels = names,explode = 0.1,main="3D pie")
③扇形图(Fan plot)
fan.plot(pieces,labels = names,main = "Fan plot")
3.直方图(Histograms)
直方图通过在X轴上将值域分割为一定数量的组,在Y轴上显示相应值的频数,展示了连续型变量的分布
hist(x)
其中x是一个由数据值组成的数值向量。参数freq=FALSE表示根据概率密度而不是频数绘制图形。参数breaks用于控制组的数量。在定义直方图中的单元时,默认将生成等距切分。
(1)例1:简单直方图
hist(mtcars$mpg)
(2)例2:指定组数和颜色
hist(mtcars$mpg
,breaks = 10,
col = "green",
xlab = "Miles per G",
main="green histogram with 10 bins")
4.核密度图(Kernel density plots):
核密度估计是用于估计随机变量概率密度函数的 一种非参数方法。
会根据样本进行建模,不利用数据分布的先验知识。
(1)绘制方法:
plot(density(x))
其中x是一个数值型向量
plot()函数会创建一幅新的图形,所以要向一幅已经存在的图形上叠加一条密度曲线,可以使用lines()函数。
(2)例1:
d <- density(mtcars$mpg) #returns the density data
plot(d) #plots the results
(3)核密度图直方图叠加:
使用lines()
hist(mtcars$mpg,
freq=FALSE,
breaks=12,
col="green",
xlab="Miles Per Gallon",
main="Histogram, density curve")
lines(density(mtcars$mpg), col="blue", lwd=2)
5.箱线图/盒装图(Box plots)
(1)单个盒装图
箱线图通过绘制连续型变量的五数总括,即最小值、下四分位数、中位数、上四分位数以及最大值,描述了连续型变量的分布。箱线图能够显示出可能为离群点的观测。
优点:数据量少,简洁
缺点:数据量少,简洁
例:
boxplot(mtcars$mpg, main="Box plot", ylab="Miles per Gallon")
(2)多个箱线图(使用并列箱线图进行跨组比较)
格式为: boxplot(formula, data=dataframe)
其中的formula是一个公式,dataframe代表提供数据的数据框(或列表)。一个示例公式为y~A,这将为类别型变量A的每个值并列地生成数值型变量y的箱线图。公式y~ A*B则将为类别型变量A和B所有水平的两 两组合生成数值型变量y的箱线图。
例:
boxplot(mpg~cyl,data=mtcars,
main="Car Milage Data",
xlab="Number of Cylinders",
ylab="Miles Per Gallon")
公式mpg~cyl表示:针对不同的 cyl数值,分别生成mpg的箱线图。
6.点图(Dot plots)
点图提供了一种在简单水平刻度上绘制大量有标签值的方法。
(1)创建方式:
使用dotchart() 函数创建点图,格式为dotchart(x,labels=)
其中的x是一个数值向量,而labels则是由 每个点的标签组成的向量
(2)示例:
#cex指定字符大小
dotchart(mtcars$mpg, labels=row.names(mtcars), cex=.6,
main="Gas Mileage for Car Models",
xlab="Miles Per Gallon")
(3)示例:
x <- mtcars[order(mtcars$mpg),]
x$cyl <- factor(x$cyl)
x$color[x$cyl==4] <- "red"
x$color[x$cyl==6] <- "blue"
x$color[x$cyl==8] <- "darkgreen"
dotchart(x$mpg,
labels = row.names(x),
cex=.7,
pch=19,
groups = x$cyl,
gcolor = "black",
color = x$color,
main = "Gas Mileage for Car Models
grouped by cylinder",
xlab = "Miles Per Gallon")
二、中级绘图
1.散点图
(1)散点图:描述两个连续型变量之间的关系
R中创建散点图的基础函数是plot(x, y),其中,x和y是数值型向量,代表着图形中的(x, y)点。
例:探究车重和单位油量行驶公里数的关系
attach(mtcars)
plot(wt, mpg,
main="Basic Scatterplot of MPG vs. Weight",
xlab="Car Weight (lbs/1000)",
ylab="Miles Per Gallon ", pch=19)
abline(lm(mpg ~ wt), col="red", lwd=2, lty=1) #在plot图上添加直线
#abline()函数用来添加最佳拟合的线性直线
detach(mtcars)
(2)散点图矩阵:P32
pairs()函数创建基础的散点图矩阵
①例:
pairs(~ mpg + disp + drat + wt, data=mtcars,
main="Basic Scatterplot Matrix")
②更复杂一点的散点图矩阵(与其他图像相结合):
library(car)
scatterplotMatrix(~ mpg + disp + drat + wt,
data=mtcars, spread=FALSE,
smoother.args=list(lty=2),
main="Scatter Plot Matrix via car Package")
(3)高密度散点图:
smoothScatter()函数,可利用核密度估计生成用颜色密度来表示点分布的散点图
例:人为设计的例子,10000个观测点
set.seed(1234)
n <- 10000
c1 <- matrix(rnorm(n, mean=0, sd=.5), ncol=2)
c2 <- matrix(rnorm(n, mean=3, sd=2), ncol=2)
mydata <- rbind(c1, c2)
mydata <- as.data.frame(mydata)
names(mydata) <- c("x", "y")
with(mydata, smoothScatter(x, y,
main="Scatter Plot colored by Smoothed Densities"))
这样就较容易地表现出那个地方的密度更大了。
hexbin()将二元变量的封箱放到六边形单元格内。
IDPmisc包中的iplot()函数可通过颜色来表示点的密度(在某特定点上数据点的数目)
(4)三维散点图:比较炫酷,但是用处一般
使用scatterplot3d中的scatterplot3d()函数绘制
scatterplot3d(x,y,z)
x,y,z均表示向量
2.气泡图:添加第三变量
除了通过三维散点图可以展示三个定量变量间的关系,还可以使用二维散点图,加上用点的大小来代表第三个变量的值。即气泡图。
symbols(x, y, circle=radius)
3.折线图(Line charts):
刻画数据变动的图像
①折线图的创建:
plot(x,y,type=)
lines(x,y,type=)
折线图的一些类型:
②plot()和lines()的区别
plot()函数是被调用时即创建一幅新图;lines()函数则是在已存在的图形上添加信息, 并不能自己生成图形。
因此,lines()函数通常是在plot()函数生成 一幅图形后再被调用
③折线图例子:
R自带Orange数据集
t1 <- subset(Orange, Tree==1)
plot(t1$age, t1$circumference,
xlab="Age (days)",
ylab="Circumference (mm)",
main="Orange Tree 1 Growth",
type="b")
4.相关图(Correlograms):
比较现代的方法,相关系数矩阵来表示,相关系数矩阵是多元统计分析的一个基本方式。
哪些被考察的变量与其他变量相关 性很强,而哪些并不强?相关变量是否以 某种特定的方式聚集在一起?随着变量数 的增加,这类问题将变得更难回答。
相关图是检验定量变量中众多二元关系的一种有效方式。
(1)corrgram()函数格式:
corrgram(x, order=, panel=, text.panel=, diag.panel=)
其中,x是一行一个观测的数据框。当order = TRUE时,相关矩阵将使用主成分分析法对变 量重新排序,这使得二元变量的关系模式更为 明显。选项panel 设定非对角线面板使用的元素类型。可通过选项lower.panel和upper.panel 来分别设置主对角线下方和上方的元素类型。 text.panel和diag.panel选项控制着主对角线元素类型。
(2)相关图例子:
library(corrgram)
corrgram(mtcars, order=TRUE,
lower.panel=panel.shade,
upper.panel=panel.pie, text.panel=panel.txt,
main="Corrgram of mtcars intercorrelations")
下三角:蓝色斜杠表示单元格中的两个变量呈正相关。红色斜杠 表示变量呈负相关。色彩越深, 说明变量相关性越大。
上三角:颜色的功能同上,但相关性大小由被填 充的饼图块的大小来展示。正相关性将从12点钟处开始顺时针填充饼图,而负相关性则逆时针方 向填充饼图。
5.马赛克图:
①进行复杂分析的时候还是有用的。
马赛克图用于可视化两个以上的类别型变量(只观察单个类别型变量,可以使用柱状图或者饼图)。
②mosaic()函数调用格式:
mosaic(table,shade=,legend=)
其中table是数组形式的列联表。
添加选项shade = TRUE将根据拟合模型的皮尔逊残差值对图形上色。
添加选项legend = TRUE将展示残差的图例。