首先写第二部分的前言。

第二部分用来介绍获取数据基本信息的图形技术和统计方法。

本章主要内容

条形图、箱型图、点图

饼图和扇形图

直方图和核密度图

分析数据第一步就是要观察它,用可视化的方式是最好的。本章的主题有两个

1、将变量的分布作可视化展示

2、通过结果变量进行跨组比较

下面从不同的图形开始探索数据。

6.1条形图

6.1.1简单地条形图

条形图是通过条形展示离散变量的频数分布。函数是barplot:

barplot(height) height是主要参数,horiz = TRUE就是横向条形图。

height可以是数值向量或者矩阵。向量的话就是向量每个元素的分布,矩阵的话是按照列一个一个往上加,就是堆叠。

如果要绘制的变量是因子或者有序因子,可以使用plot函数,直接画出条形统计图,形式为plot(因子),书上的例子plot(Arthritis$Improved)。

6.1.2堆砌条形图和分组条形图

barplot后面加矩阵时,如果beside = FALSE 得到一个堆砌条形图,若为TRUE,则为分组条形图。下面是示例:

opar

par(mfrow= c(1,2))

library(vcd)

counts

barplot(counts,

main= "Stacked Bar Plot",

xlab= "Treatment",ylab = "Frequency",

col= c("red","yellow","green"),

legend=rownames(counts))

barplot(counts,

main= "Grouped Bar Plot",

xlab= "Treatment",ylab = "Frequency",

col= c("red","yellow","green"),

legend=rownames(counts),

beside=TRUE)

par(opar)

下面是结果:

注意上面的代码中,添加图例的命令只有在对矩阵作用时才能用。

自然可以对图例进行一下设置(乱弄的,熟悉一下命令):

barplot(counts,

main= "Stacked Bar Plot",

xlab= "Treatment",ylab = "Frequency",

col= c("red","yellow","green")

)

legend("top",legend =rownames(counts),

col= c("red","yellow","green"),cex = 0.8,

pch= rep(15,3),bg = "blue")

6.1.3均值条形图

条形图不一定全都进行数据频数的展示,还可以将均值、中位数方差等传递给barplot函数。

states

means

FUN=mean)

means

barplot(means$x,names.arg= means$Group.1)

其实本质是一样的。lines(means$x)可以在上面图中顶端加一条折线,gplots包中barplot2函数可以作更复杂的图。

6.1.4条形图的微调

6.1.5棘状图

棘状图对堆砌条形图进行重缩放,每个条形的高度均为1,不同的频数对应着比例。vcd包中的spine函数可以做棘状图。

library(vcd)

counts

spine(counts,main= "Spinogram Example")

6.2饼图

书上上来就说饼图不是很常用,R中关于饼图的选型不多.

pie函数:

pie(x, labels = names(x), edges = 200, radius = 0.8,

clockwise= FALSE, init.angle = if(clockwise) 90 else 0,

density= NULL, angle = 45, col = NULL, border =NULL,

lty= NULL, main =NULL, ...)

#主要参数当然是x和labels,其中x是非负数值型变量,表示面积,labels是名称.

下面是一个例子:

par(mfrow = c(2,2))

slices

lbls

pie(slices,labels=lbls,

main= "Simple Pie Chart")

pct

lbls2

pie(slices,labels=lbls2,

col=rainbow(length(lbls2)),

main= "Pie Chart with Percentages")

library(plotrix)

pie3D(slices,labels=lbls2,explode = 0.1,

mian= "3D Pie Chart")

mytable

lbls3

pie(mytable,labels=lbls3,

main= "Pie Chart from a Table\n(with sample sizes)")

注意上面的例子中,plotrix中的pie3D函数,可以画立体饼图.

饼图不太容易看出相对的比例大小,为改善这种情况,有 fan.plot 扇形图来展现大小关系.在plotrix包中,fan.plot函数可以实现.

fan.plot(slices,labels = lbls,main = "Fan Plot")

上面的例子中,扇形张开角的大小就是相对比例关系,而半径大小无所谓.

6.3直方图

直方图通过将值域分为几组,Y值显示频数。用hist函数生成:

hist(x, breaks = "Sturges",

freq= NULL, probability = !freq,

include.lowest= TRUE, right =TRUE,

density= NULL, angle = 45, col = NULL, border =NULL,

main= paste("Histogram of", xname),

xlim= range(breaks), ylim =NULL,

xlab=xname, ylab,

axes= TRUE, plot = TRUE, labels =FALSE,

nclass= NULL, warn.unused =TRUE, ...)

#这里的x是一个数值向量,矩阵也可以;breaks是设置组数;

#freq是一个逻辑值,表示是否归一化数据 其他参数用到再说

下面是一个例子:

par(mfrow=c(2,2))

hist(mtcars$mpg)

hist(mtcars$mpg,

breaks= 12,

col= "red",

xlab= "Miles Per Gallon",

main= "Colored histgram with 12 bins")

hist(mtcars$mpg,

freq=FALSE, #FALSE是将数据归一化

breaks= 12,

col= "red",

xlab= "Miles Per Gallon",

main= "Histogram,rug plot,density")

rug(jitter(mtcars$mpg))

lines(density(mtcars$mpg),col= "blue",lwd = 2)

需要写几个函数:

lines(x, y = NULL, type = "l", ...)

#向图形中添加曲线,lines(x,cos(x)),不会另起一幅图形界面

rug函数:添加“地毯”

rug(x, ticksize = 0.03, side = 1, lwd = 0.5, col = par("fg"),

quiet = getOption("warn") < 0, ...)

#应该就是第三幅图中横轴下面的短线。通常和jitter连用,这是为了避免线的重叠。

jitter函数:为数值向量添加一个扰动

jitter(x, factor = 1, amount = NULL)

#x是数值向量,factor是一个数值,与amount一起决定波动范围,amount是波动的范围设置。其实,这个函数相当于

r

density函数:

density(x, bw = "nrd0", adjust = 1,

kernel = c("gaussian", "epanechnikov", "rectangular",

"triangular", "biweight",

"cosine", "optcosine"),

weights = NULL, window = kernel, width,

give.Rkern = FALSE,

n = 512, from, to, cut = 3, na.rm = FALSE, ...)

是一个核密度函数,通常与画图函数一起用.下面写写核密度估计.

核密度估计是非参数估计的一种,是用来估计一组数的规律用的,所谓非参数,就是不假定数据服从某种分布,而只是利用已知的数据进行分布估计。比如用一个点附近的几个点的均值作为此处的值。有一些核函数可以确定估计方式。最重要的是带宽的选取,有一个公式可以用来评价规律的好坏。

上面的函数中,x是数据,bw是带宽,adjust是与带宽相关的值,共同决定带宽。

还要看一下box函数:

为已经画出的图形周边添加一个盒子,可以设置线型、颜色等。

6.4核密度图

用plot(density(x))来画核密度图。例子:

par(mfrow = c(2,1))

d

plot(d)

d

plot(d,main= "Kernel Density of Miles Per Gallon")

polygon(d,col= "red",border = "blue")

rug(mtcars$mpg,col= "brown")

#注意这里有个函数:polygon这是一个画多边形的函数

polygon(x, y = NULL, density = NULL, angle = 45,

border = NULL, col = NA, lty = par("lty"),

..., fillOddEven = FALSE)

#其中x、y是包含多边形顶点的向量,density是密度的设置,其他比较平凡。

d

plot(d,main = "Kernel Density of Miles Per Gallon")

polygon(d,density = 10,col = "red",border = "blue") #注意这里加上了线的密度,图形见下面斜线图。

rug(mtcars$mpg,col = "brown")

下面注意了,书上说和密度图可以比较组间差距,确实是这样,来看一下,感觉这个挺有用。利用sm包中的sm.density.compare函数进行操作。

sm.density.compare(x, group, h, model = "none", ...)

#x是一个数值向量,group是分组因子向量,关于model,下面两个图是一个对比:

y

g

sm.density.compare(y, g, model

="equal") #一个跟bootstrap相等假设检验相关的量,还会显示一个适当带子

sm.density.compare(y, g, model="none") #画简单图

par(lwd = 2)

library(sm)

cyl.f

labels= c("4 cylinder","6 cylinder","8 cylinder"))

sm.density.compare(mtcars$mpg,mtcars$cyl,xlab= "Miles Per Gallon")

title(main= "MPG Distribution by Car Clyinders")

colfill

legend(locator(1),levels(cyl.f),fill=colfill) #这里的locator函数是用鼠标点击确定位置

箱线图是一项可视化分布和组间差异的手段,并且很常用。

6.5箱线图

箱线图绘制连续型变量的五个数 最小数、.25四分位数、中位数、.75分位数、最大值。还可以显示离群点 正负1.5*IQR 以外的值,其中IQR是四分位距(上下四分之一分位数之差)。boxplot函数:

boxplot(x, ..., range = 1.5, width = NULL, varwidth =FALSE,

notch= FALSE, outline = TRUE, names, plot =TRUE,

border= par("fg"), col = NULL, log = "",

pars= list(boxwex = 0.8, staplewex = 0.5, outwex = 0.5),

horizontal= FALSE, add = FALSE, at = NULL)

#参数比价直观,用的时候差

可以使用boxplot.stats(x)可以显示箱线图的各种统计量。

6.5.1使用并列箱线图进行跨足比较

boxplot函数:

boxplot(formula, data = NULL, ..., subset, na.action =NULL)

#这里的formula是公式,而data是列表或者数据框。

#示例函数 y~A 将为类别变量A的每个值并列的生成数值型变量y的箱线图。y~A*B 将为变量A和B所有水平的两两组合生成数值型变量y的箱线图。

#参数 varwidth= TRUE 是使箱线图的宽度与样本使大小的平方根 成正比。

例子:

boxplot(mpg~cyl,data =mtcars,

notch=TRUE,

varwidth=TRUE,

col= "red",

main= "Car Mileage Data",

xlab= "Number of Cylinders",

ylab= "Miles Per Gallon")

话说多图的目的在于更好地体现数据的信息,那么图形的各种属性是可以反应数据的特点的,比如 notch = TRUE在中位数的地方加一个凹槽,可以明显看出中位数的差别,而宽度varwidth = TRUE 表示宽度与样本量平方根成正比,可以看出样本量的大小关系。

下面又一个例子:

mtc

mtc$cyl.f

labels= c("4","6","8"))

mtc$am.f

labels= c("auto","standard"))

boxplot(mpg~cyl.f*am.f,data =mtc,

varwidth=TRUE,

col= c("gold","darkgreen"),

main= "Mpg Distribution by Auto Types",

xlab= "Auto Types")

上面的图形中,可以看出cyl越小,并且为standard时,耗油最少。可以很好的反应y的影响因素。同时,由宽度大小,可以看出8.auto和4.standard数量最多。

6.5.2小提琴图

作为箱线图和核密度图的结合,小提琴图名字还是第一次听过。vioplot包中vioplot函数可以绘制此图。函数vioplot:

vioplot( x, ..., range=1.5, h, ylim, names, horizontal=FALSE,

col="magenta", border="black", lty=1, lwd=1, rectCol="black",

colMed="white", pchMed=19, at, add=FALSE, wex=1,

drawRect=TRUE)

例子:

library("vioplot")

x1

x2

x3

vioplot(x1,x2,x3,

names= c("4","6","8"),

col= "gold")

title("Violin Plot of Miles Per Gallon")

#值得注意的是,必须将每一个想画小提琴图的向量分别列出来,不能用数据框……

图中,中间的白点和黑线是中位数和分位数等箱线图元素,而周边曲线是核密度图。关于小提琴图,书上说,时间会证明一切。

6.6点图

dotchart函数:

dotchart(x, labels = NULL, groups = NULL, gdata =NULL,

cex= par("cex"), pch = 21, gpch = 21, bg = par("bg"),

color= par("fg"), gcolor = par("fg"), lcolor = "gray",

xlim= range(x[is.finite(x)]),

main= NULL, xlab = NULL, ylab =NULL, ...)

#这里x是一个数值向量或者矩阵,labels是每个值的标签组成的向量,groups是对向量x进行分组,

#gdata是分组数据的量,比如均值、中位数等 其他参数比较平凡

下面是例子:

dotchart(mtcars$mpg,labels = row.names(mtcars),cex = .7)

一般而言,点图经过排序,并且将分组分别涂色表示以后才更有用。

下面的例子:

mtc

mtc$cyl

mtc$color[mtc$cyl== 4]

labels=row.names(mtc),

cex= .7,

groups=mtc$cyl,

gcolor= "black", #这个语句是设置labels的显示颜色,就是图中的4、6、8

color=mtc$color,

pch= 19,

main= "Gas Mileage for Car Models\ngrouded by cylinder",

xlab= "Miles Per Gallon")

从上图中可以看出,随着缸数的增加,每加仑英里数在减少~但是也有特殊点和离群点,特殊点是最上面的两个绿点,离群点是最下面两个绿点。

注意,Himsc中有dotchart2函数,提供更丰富的点图选项。

下一章用于描述分布和二元关系的定量统计方法和一类推断方法,需要看一遍统计了。

R语言acres92 region_《R语言实战》读书笔记-- 第六章 基本图形相关推荐

  1. 《Python从入门到实践》读书笔记——第六章 字典

    <Python从入门到实践>读书笔记--第六章 字典 1. 一个简单的字典 alien_0 = {'color': 'green', 'points': 5}print(alien_0[' ...

  2. 《C++ Primer》读书笔记—第六章 函数

    声明: 文中内容收集整理自<C++ Primer 中文版 (第5版)>,版权归原书所有. 学习一门程序设计语言最好的方法就是练习编程 一.函数基础 1.一个典型的函数定义包括以下内容:返回 ...

  3. [swift 进阶]读书笔记-第六章:函数 C6P1函数的灵活性(The flexibility of function)...

    第六章:函数(function) 6.1 函数的灵活性(The flexibility of function) 注:本节前部分主要通过一个排序的demo来介绍了函数的灵活性 话不多说,直接上代码 v ...

  4. 《Microsoft Sql server 2008 Internals》读书笔记--第六章Indexes:Internals and Management(3)

    <Microsoft Sql server 2008 Internals>读书笔记订阅地址: http://www.cnblogs.com/downmoon/category/230397 ...

  5. R语言acres92 region_[R语言 学习笔记] circlize绘制基因组圈图的原理与使用(一)...

    由于图形大多由点.线.多边形等简单图形组成,circlize实现了在圆形作图区域添加图形的低级绘图函数,通过低级绘图函数的不同组合,可以轻松生成更复杂的图形.这一原则确保了各种类型的高级图形不会受软件 ...

  6. C语言入门经典读书笔记 ----第六章 字符串和文本的应用

    1.什么是字符串 字符串常量的例子非常常见,字符串常量是放在一对双引号中的一串字符或符号,一对双引号之间的任何内容都会被编译器视为字符串,包括特殊字符和嵌入的空格.以下是使用字符串的例子: print ...

  7. spring boot 503_Spring实战读书笔记第4章 面向切面的Spring

    本章内容: 面向切面编程的基本原理 通过POJO创建切面 使用@AspectJ注解 为AspectJ切面注入依赖 在软件开发中,散布于应用中多的功能被称为横切关注点(cross-cutting con ...

  8. Maven实战读书笔记(六):Maven灵活构建

    Maven为了支持构建的灵活性,内置了3大特性,即:属性.Profile和资源过滤. 6.1 Maven属性 Maven的属性与Java代码的常量有异曲同工之妙,都是为了消除重复,对相关内容进行统一管 ...

  9. hive实战读书笔记(第9章)Hive性能优化

    hive用户面临的一个比较大的问题是,用户需要等待较长的响应时间,与传统关系数据库查询的性能相比,hive响应速度慢的令人发指 本章介绍一套诊断改进hive查询性能的系统方法,通过这个过程,将单个hi ...

最新文章

  1. JavaScript装饰器模式
  2. 生成唯一id号解决方法
  3. 笔试题 遗忘点记录 面向对象特点 + 产生死锁条件+ windows内存管理方法
  4. 【iVX 初级工程师培训教程 10篇文拿证】05 画布及飞机大战游戏制作
  5. 分布式领域CAP理论
  6. 理解 CI 和 CD 之间的区别(翻译)
  7. 面试题: 找出二叉树上任意两个结点的最近共同父结点。
  8. Eclipse.技巧
  9. linux内核分析与应用 -- 并发(上)
  10. pycharm 改成中文亲测好用
  11. Android gallery 3D效果(扩展Gallery)
  12. J2EE是什么(二)
  13. whta is the前后端分离
  14. 做网站如何选阿里云服务器呢?
  15. 情感预测SHINE: Signed Heterogeneous Information Network Embedding for Sentiment Link Prediction引介
  16. 【Python_010】利用python对excel进行去重
  17. 小程序动态tabBar菜单,根据条件渲染不同的tabBar
  18. excel高级筛选怎么用_Excel教程:用高级筛选做超级拆分器
  19. java面试题(精选版)
  20. 京东管培生(产品方向)线上hr面

热门文章

  1. MySQL慢查询处理之mysqldumpslow和mysqlsla
  2. 超微服务器使用IPMI安装操作系统小记
  3. Android开发者指南(12) —— Android Supported Media Formats
  4. 大家一起来博皮——2:液态布局和固态布局,页面框架篇
  5. 为什么越来越多的企业使用互联网电话(VoIP)?—Vecloud微云
  6. PostgreSQL和Excel的数据合并
  7. 摄像机丢失信号及偏色的检测思路
  8. Blackey win10 + python3.6 + VSCode + tensorflow-gpu + keras + cuda8 + cuDN6N环境配置(转载)
  9. 合并多个文本文件方法
  10. [C++]C++11:Function与Bind