R语言由浅入深:第三章、数据可视化

第三章、数据可视化

本章主要是了解一下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.panelupper.panel 来分别设置主对角线下方和上方的元素类型。 text.paneldiag.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将展示残差的图例。

人生的奔跑不在于瞬间的爆发,而在于途中的坚持。
原文地址:https://www.cnblogs.com/Nelsonblog/p/11794424.html