zoukankan      html  css  js  c++  java
  • 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将展示残差的图例。

    人生的奔跑不在于瞬间的爆发,而在于途中的坚持。
  • 相关阅读:
    [BAT] 通过批处理删除7天前的报告,并删除当前目录下的空文件夹
    Codeforces Round #361 (Div. 2) A
    Codeforces Round #359 (Div. 2) C
    Codeforces Round #359 (Div. 2) B
    Codeforces Round #359 (Div. 2) A
    Codeforces Round #357 (Div. 2) C
    Codeforces Round #357 (Div. 2) B
    Codeforces Round #357 (Div. 2) A
    Codeforces Round #356 (Div. 2) C
    Codeforces Round #356 (Div. 2) B
  • 原文地址:https://www.cnblogs.com/Nelsonblog/p/11794424.html
Copyright © 2011-2022 走看看