R的绘图(二)——基本图形

本文介绍了R语言中的基本图形,包括点线图、条形图(简单、堆叠、分组及荆棘图)、饼图、直方图和箱线图。条形图利用barplot()函数绘制,荆棘图借助vcd包的spine()函数。饼图和直方图展示了数据的不同视觉表示,箱线图则用于观察数据分布的统计特性。点图通过dotchart()函数绘制,可用于简单数据分析。尽管ggplot2提供更高级的绘图功能,但理解这些基本图形对于数据分析和报告至关重要。

点线图与画图基础

在下面的链接中我已经介绍了点线图和画图基础,这里就略过了。
R的绘图(一)——绘图plot()基础
除了点线图以外,在实际的运用中还有许多其它基本图形,本篇笔记将简单介绍这些图形。就像本科毕业设计一样,虽然搞出了很高大上的设计,然而还是不得不把最基本的东西说道说道。

条形图

条形图可以说是基础图形里比较复杂的,变化最多的一种。为了阐述它的制作,我们还要载入vcd包,载入这个包的原因是1、我们可以使用里面的Arthritis数据集,这个数据集是很好的绘图材料;2、我们需要用它来绘制条形图的变形——荆棘图。
条形图的核心函数是barplot(height)

最简单的条形图

我们先用table提取Arthritis数据集中的“病人改善状况”的变量的计数,然后用barplot绘图,参数horiz决定了绘制的条形图是竖直的还是水平的。当height是一个向量时,它确定了各个条形的高度,画出来的就是最简单的条形图。

count <- table(Arthritis$Improved)
par(mfrow=c(1,2))
barplot(count)
barplot(count,horiz=T)

为了省事标题还有xy轴标签全部省略了(这可不是一个好习惯)

堆叠和分组

如果height不是一个向量而是一个矩阵,就会绘制出堆叠图或者分组图,核心参数是beside,当它为真的时候会输出分组,反之堆砌。这一次我们把Arthritis数据集中的恢复状况和用药做成一个table。

count <- table(Arthritis$Improved,Arthritis$Treatment)
par(mfrow=c(1,2))
barplot(count,col=c("red","blue","yellow"),ylim=c(0,55),legend=rownames(count))
barplot(count,col=c("red","blue","yellow"),legend=rownames(count),beside=T)

这次加了图例,另外为了图例不和下方柱体重叠,调整了一下y轴范围。

荆棘图

刚才说到,vcd包中有一种特殊的条形图:荆棘图,函数为spine(),我们直接spine(count)可以得到下面的例子:

在荆棘图中我们可以一下子比较出:治疗组比起安慰剂组治疗效果更好。但是由于spine()不支持颜色col参数,所以只能作为在统计中间过程中的说明,不适用于最终结果展示。

在本节的最后提醒一下,不要忘记条形图也可以通过强大的par函数进行微调

饼图

我在毕业设计中曾经提及:人们对长度的认知比面积的认知要好得多;因此我们常常用直方图或者条形图来代替饼图。也许也是因为同样的原因,R的基本绘图中关于饼图的部分也相当少。我们直接用一列代码绘制4个饼图(包括一个扇形图)来阐述饼图的绘制方法。

par(mfrow=c(2,2))  #设定版面2*2
slice <- c(10,12,4,6,8)
lb <- c("US","UK","China","Russia","Canada")
pie(slice,labels=lb,main="Simple Pie")

pct <- round(slice/sum(slice)*100)  #添加比例
lb2 <- paste(lb," ",pct,"%",sep="")
pie(slice,labels=lb2,col=rainbow(length(lb2)),main="Simple Pie II")

library(plotrix)  #载入一个饼图包,可以绘制3D和扇形图
pie3D(slice,labels=lb,explode=0.1,main="Pie 3D")
fan.plot(slice,labels=lb,main="Fan Plot")

结果如上,干脆利落,无需解释。

直方图

作为饼图的长度版,依然没有什么好解释的……只是它的变化比饼图多一些的地方在于:我们可以在直方图中添加轴须图、密度曲线。下面的4个图给出了从简单到完善的直方图,为了偷懒省去了标题。

par(mfrow=c(2,2))
attach(mtcars)

hist(mpg)
hist(mpg,breaks=12,col="red",xlab="M/Gallon")

hist(mpg,breaks=12,col="red",xlab="M/Gallon",freq=F)
rug(jitter(mpg))
lines(density(mpg),col="blue",lwd=2)

hist(mpg,breaks=12,col="red",xlab="M/Gallon")
x <- mtcars$mpg
xfit <- seq(min(x),max(x),length=40)
yfit <-dnorm(xfit,mean=mean(x),sd=sd(x))*diff(h$mids[1:2])*length(x)
lines(xfit,yfit,col="yellow",lwd=2)
box()

注意在图3中,我们令freq=F,这时候画出来的是频率图而非频数图,这样更便于我们画轴须图。而在图4中我们通过xfit和yfit的计算画出了正态密度曲线。注意正态密度曲线和普通的直方图密度曲线是有些微差别的,后者可以运用在频数图上面,前者绘制更为直接,一个density()函数解决。
同样的道理,核密度图可以直接通过density进行绘制,因为它的可视化意义不强,更多是作为中间结果,因此这里略去。

箱线图

箱线图可以观察的东西很多,包括五值和四个分位数,我们将会在ggplot2的运用中详细讲解箱线图的精妙之处,而在这里就只做简单的说明和绘制。箱线图的函数是boxplot(formula,data),formula是一个公式,形如yA或yA*B。我们考虑mtcars里面的气缸数和用汽油数的箱线图:

boxplot(mpg ~ cyl,data=mtcars,main="Car data",xlab="Cylinders",ylab="M/Gallon")

就显得很简陋……
boxplot中还提供了别的参数,notch=T时会出现凹槽;varwidth=T时箱线图宽度会和样本成比例。此外,箱线图可以进行一对多的绘制(y ~ A*B),还有另外一种和核密度图结合的形式——小提琴图。这些在ggplot2的使用中我们都会详细讲解,毕竟现在不用ggplot2就感觉落伍了,更何况再三强调——自己本科设计就做的这玩意。

点图

最后是散点图。格式是dotchart(x,labels=),这样直接绘制出来可能比较杂乱,我们自然可以通过调整一些参数发现数字特征,参考下面的例子。

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] <- "orange"

dotchart(x$mpg,labels=row.names(x),cex=0.8,groups=x$cyl,
col=x$color,pch=19,main="GM for Car Models",xlab="M/Gallon")

如此一来我们基本可以看出缸数和耗油量的关系了,但是当点多起来的时候,我们就需要考虑别的办法了。

小结

总体来说,基本图形大致上就是这些,无论是描述连续型变量还是离散型(类别型)变量都有不同的方法。其中很多描述还是十分简单,因为还是那句话……等到我们学习使用ggplot2的时候,我们需要引入一个完全不同的绘图原理,因此这些东西只要了解,并且在比较随意的场合随意地使用就好了。
话虽如此,现在还哪有什么随意的场合啊!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值