R语言入门--第五节(认识基本统计图)

记录下条形图,直方图,箱线图以及其它部分常见统计图的函数与技巧~

1、条形图

barplot()函数:针对类别型变量,频率分类计数
tip:原始数据先table,再绘图

library(vcd)  #示例用vcd包的一项数据
Arthritis$Improved   
#观察变量类型为类别型
table(Arthritis$Improved)
counts <- table(Arthritis$Improved)  
# 针对分类变量统计计数
counts
class(counts)
#为专有的二联表格式
str(counts)
barplot(counts, 
        main="Simple Bar Plot", col = rainbow(3),
        xlab="Improvement", ylab="Frequency",)
#添加horiz=TRUE 参数会生成水平条形图
barplot
  • 堆砌条形图与分组条形图
#若对象是一个矩阵
counts <- table(Arthritis$Improved, Arthritis$Treatment)
#counts有两组(对照组,改善组),每组针对效果又分为三种类型
#堆砌条形图,besides=FALSE(默认值)
barplot(counts, 
        main="Stacked Bar Plot",
        xlab="Treatment", ylab="Frequency", 
        col=c("red", "yellow","green"),            
        legend=rownames(counts))
堆砌条形图.png
#分组条形图,需要设置参数besides=TRUE。二者区别可见图
barplot(counts, 
        main="Grouped Bar Plot", 
        xlab="Treatment", ylab="Frequency",
        col=c("red", "yellow", "green"),
        legend=rownames(counts), beside=TRUE)
分组条形图.png

补充一个棘状图:spine是每个条形高度均为1,每一段的高度表示比例的堆砌条形图

attach(Arthritis)
counts <- table(Treatment,Improved)
spine(counts, main="Spinogram Example")
detach(Arthritis)
棘状图.png

关于条形图并非一定是根据频率,也可以利用整合函数(aggregate)创建均值、中位数等条形图。
下面以绘制均值条形图为例,顺便复习下整合函数aggregate的用法

states <- data.frame(state.region, state.x77)
means <- aggregate(states$Illiteracy, by=list(state.region), FUN=mean)
#参数依次为-所想要返回的变量-整合依据-整合功能
means    #查看下返回的结果
barplot(means$x, names.arg=means$Group.1,col = rainbow(4))  #name.arg选项为展示标签
title("Mean Illiteracy Rate")  #添加个大标题
image.png

2、直方图:hist()

  • 用于展示连续性变量频数分布图。x轴是将值域分割为一定数量的组,y轴为频数。
hist(x)  #x是数值型向量 
mtcars$mpg  #查看下,确实为一连串数值
hist(mtcars$mpg)   
#最简单的画法,参数均为默认
hist

变化分组,上色等

hist(mtcars$mpg, 
     breaks=12, 
     col=rainbow(12), 
     xlab="Miles Per Gallon", 
     main="Colored histogram with 12 bins")
#上述参数依次为:指定分为12组;上色;添加标题。
  • 修饰1:添加一条轴须图,是一种一维的表达方式。看x轴~
rug(jitter(mtcars$mpg, amount = 0.01))   
  • 修饰2:添加正态分布曲线
xfit <- seq(min(mtcars$mpg), max(mtcars$mpg), length = 40)
yfit <- dnorm(xfit, mean = mean(mtcars$mpg), sd = sd(mtcars$mpg))

yfit <- yfit*diff(h$mids[1:2])*length(x)
# 确定正态分布点
lines(xfit, yfit, col = "blue", lwd = 2)
直方图

3、箱线图

描述了连续型变量的分布
五个数:最小值、下四分位数(.25)、中位数(.5)、上四分位数(.75),最大值。
能够判断离群点(IQR±1.5*IQR以外的值,IQR=四分位距,即上四分位数与下四分位数的差值。若数据点未达到计算范围两端,则由这些数据点的高值和低值(不包括离群值)来确定须线。

#(1)直接绘图单箱线图
boxplot(mtcars$mpg, ylim=c(5,35))
#ylim参数指定y轴的起始位置
boxplot1
#(2)单因子并列箱线图
mtcars$cyl.f <- factor(mtcars$cyl,
                       levels=c(4,6,8),
                       labels=c("cyl4","cyl6","cyl8"))
boxplot(mpg~cyl.f,data=mtcars,
        main="Car Milage Data", 
        xlab="Number of Cylinders", 
        ylab="Miles Per Gallon")
#针对cyl三种不同的类型,画三个箱线图
单因子.png
#(3)交叉双因子并列箱线图
mtcars$cyl.f <- factor(mtcars$cyl,
                       levels=c(4,6,8),
                       labels=c("4","6","8"))
mtcars$am.f <- factor(mtcars$am, 
                      levels=c(0,1), 
                      labels=c("auto","standard"))
#上述将两个数值型变量转换为因子型
boxplot(mpg ~ am.f *cyl.f, 
        data=mtcars, 
        varwidth=TRUE,
        col=c("gold", "darkgreen"),
        main="MPG Distribution by Auto Type", 
        xlab="Auto Type")
#varwidth=TRUE 表示箱图的宽度可适当变化。
交叉因子.png

补充:画含有凹槽的箱线图,boxplot() 函数添加notch=TRUE参数,若两个箱的凹槽不重叠,则表明其中位数有显著差异。

4、点图

  • dotchart(x,label=)函数
dotchart(mtcars$mpg,labels=row.names(mtcars),
         cex=.7,
         main="Gas Mileage for Car Models", 
         xlab="Miles Per Gallon")
#上面是个简单的点图;下面来绘制个经排序、分组,着色后精美的点图
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\ngrouped by cylinder",
         xlab = "Miles Per Gallon")
点图.png

5、其它图形

核密度图

  • 估计连续型变量概率分布的非参数方法
    如前,正态分布概率密度曲线是有参数的(均值mean,方差sd);而核密度图仅根据数据特征估计概率密度的方法。
    plot(density(x))
d=density(mtcars$mpg)
plot(d)
polygon(d,col="red",border="blue")   #在下方添加实心颜色
核密度.png
  • 绘制多条核密度曲线,比较组间差别
library(sm)  #需要加载一个包
cyl.f <- factor(mtcars$cyl, levels = c(4,6,8),
                labels = c("4 cylinder", "6 cylinder", 
                           "8 cylinder"))
sm.density.compare(mtcars$mpg, mtcars$cyl, xlab = "Miles Per Gallon")
colfill <- c(2:(1 + length(levels(cyl.f))))   #注意颜色对应的数字
legend(locator(1), levels(cyl.f), fill = colfill)
#交互式确定图例位置
多条核密度曲线比较

小提琴图

  • 就是核密度图以镜像的方式在箱线图上的叠加,白点为中位数。
  • 值得注意的是按因子绘制多类小提琴图时,vioplot函数要求要把不同组分(类别)分离到不同的变量中。
library(vioplot)
x1 <- mtcars$mpg[mtcars$cyl==4] 
x2 <- mtcars$mpg[mtcars$cyl==6]
x3 <- mtcars$mpg[mtcars$cyl==8]
vioplot(x1, x2, x3, 
        names=c("4 cyl", "6 cyl", "8 cyl"))
小提琴图.png

还有饼图的做法,觉得用到的机会不多,就不介绍了,详见p116
代码大部分参考教材《R语言实战(第2版)》
--寒假自学R语言的生信小白。
武汉加油!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,236评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,867评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,715评论 0 340
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,899评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,895评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,733评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,085评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,722评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,025评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,696评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,816评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,447评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,057评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,009评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,254评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,204评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,561评论 2 343

推荐阅读更多精彩内容