眼睛度数的r是什么意思,眼睛验光cyl是什么意思

  

  Ggplot2并不是R绘制图形的唯一途径。为了快速浏览数据,有时使用R basic包中的绘图功能很有用。这些功能都是R软件默认安装的,不需要安装额外的包。它们很短,易于输入,在处理简单问题时易于使用,并且速度极快。   

  

  如果你想画更复杂的图形,那么转用ggplot2包通常是更好的选择。部分原因是ggplot2提供了一个统一的接口和几个选项来代替基本绘图系统中图形的修补和各种特殊情况。一旦掌握了ggplot2的工作机制,就可以应用这些知识绘制各种统计图,从散点图、直方图到小提琴图、地图。   

  

  本文介绍的技巧演示了用基本绘图系统绘制统计图的方法,也讲解了如何在ggplot2中用qplot()函数绘制相同的图形。qplot()函数的语法类似于基本绘图系统的语法。对于由qplot()函数绘制的每个图形,该技术还提供了一个等效的解决方案,以便使用更强大的ggplot()函数进行绘制。   

  

  如果你已经知道如何使用基本的图形系统,那么当你想要绘制更复杂的图形时,你可以把这些例子放在一起进行比较,帮助你过渡到ggplot2系统。   

  

  1如何画散点图?   

  

  方法plot()函数可以用来绘制散点图(见图1)。运行该命令时,向量X和向量Y被依次传递给plot()函数。   

  

  绘图(百万辆汽车$wt,百万辆汽车$mpg)   

  

  图1基本绘图系统绘制的散点图   

  

  对于ggplot2系统,通过qplot()函数可以得到相同的绘图结果(见图2):   

  

  库(ggplot2) qplot (mtcars $ wt,mtcars $ mpg) 图2 ggplot 2包中qplot()函数绘制的散点图   

  

  如果图形中使用的两个参数向量包含在同一个数据框中,可以运行以下命令:   

  

  Qplot(wt,mpg,data=mtcars)#这相当于下面的GGplot (mtcars,AES (x=wt,y=mpg)) geom _ point () 2画线图问题如何画线图?   

  

  用plot()函数绘制折线图时(见图3左图),需要给它传递一个包含x值的向量和一个包含y值的向量,使用参数type='l ':   

  

  Plot (pressure $ temperature,pressure $ pressure,type=' l') 图3左:基本绘图系统绘制的线图右:在图上添加数据点和另一条折线   

  

  如果要向图形中添加数据点或多条折线(见图3右图),需要用plot()函数绘制第一条折线,然后分别用points()函数和lines()函数添加数据点和多条折线:   

  

  plot(pressure$temperature,pressure$pressure,type=' l ')points(pressure $ temperature,pressure $ pressure)lines(pressure $ temperature,pressure$pressure/2,Col=' red ')points(pressure $ temperature,pressure $ pressure/2,Col=' red ')在ggplot2中,可以使用qplot()函数并将参数设置为geom='line,以获得类似的绘图结果(参见图4):   

  

  库(ggplot2)qplot(pressure $ temperature,pressure $ pressure,geom=' line') 图4左:gg plot 2中qplot()函数绘制的折线图右:添加了数据点的折线图   

  

  如果函数的两个参数向量已经包含在同一个数据框中,则可以运行以下语句:   

  

  Qplot(温度,压力,数据=压力,geom=' line') #这相当于下面的命令ggplot(压力,AES (x=温度,Y=压力))geom_line()#添加数据点qplot(温度,压力,数据=压力,geom=c ('line ',' point')) #这相当于下面的命令ggplot(按   

ure, aes(x=temperature, y=pressure)) + geom_line() + geom_point()3 绘制条形图问题如何绘制条形图?

  

方法对变量的值绘制条形图(见图5左图),可以使用barplot()函数,并向其传递两个向量作为参数,第一个向量用来设定条形的高度,第二个向量用来设定每个条形对应的标签(可选)。

  

如果向量中的元素已被命名,则系统会自动使用元素的名字作为条形标签:

  

barplot(BOD$demand, names.arg=BOD$Time)有时候,“条形图”表示的是分组数据中各个元素的频数(见图5右图)。这种条形图跟直方图有些类似,不过,其用离散取值的x轴替代了直方图中连续取值的x轴。要计算向量中各个类别的频数,可以使用table()函数。

  

table(mtcars$cyl) 4 6 8 11 7 14 # 值为4的频数为11,6的为7,8的为14图5 左图:基础绘图系统绘制的条形图 右图:向量元素的频数条形图

  

只需将上面的表格结果传递给barplot()函数即可绘制频数条形图:

  

# 生成频数表barplot(table(mtcars$cyl))对于ggplot2系统,可以使用qplot()函数得到类似的绘图结果(见图6)。绘制变量值的条形图时需将参数设定为geom="bar"和stat="identity"。注意变量x分别为连续取值和离散取值时输出结果的差异。

  

library(ggplot2)qplot(BOD$Time, BOD$demand, geom="bar", stat="identity")# 将x转化为因子型变量,令系统将其视作离散值qplot(factor(BOD$Time), BOD$demand, geom="bar", stat="identity")

  

图6 左图:qplot()函数绘制的连续变量x的变量值条形图 右图:将变量x转化为因子型变量(注意,横坐标上没有6这个类别)

  

qplot()函数也可以用来绘制分组变量的频数条形图(见图7),事实上,这是ggplot2绘制条形图的默认方式,它比绘制变量值条形图的命令更简短。再提醒一次,注意连续x轴和离散x轴的差异。

  

# cyl是连续变量qplot(mtcars$cyl)# 将cyl转化为因子型变量qplot(factor(mtcars$cyl))

  

图7 左图:qplot()函数绘制的连续变量x的频数条形图 右图:将cyl转化为因子型变量

  

如果参数向量包含在同一个数据框内,则可以运行下面的语句:

  

# 变量值条形图,这里用BOD数据框中的Time列# 和demand列分别作为x和y参数qplot(Time, demand, data=BOD, geom="bar", stat="identity")# 这与下面的语句等价ggplot(BOD, aes(x=Time, y=demand)) + geom_bar(stat="identity")# 频数条形图qplot(factor(cyl), data=mtcars)# 这与下面的语句等价ggplot(mtcars, aes(x=factor(cyl))) + geom_bar()4 绘制直方图问题如何绘制直方图来查看一维数据的分布特征?

  

方法可以使用hist()函数绘制直方图(见图8),使用时需向其传递一个向量:

  

hist(mtcars$mpg)# 通过breaks参数指定大致组距hist(mtcars$mpg,breaks=10)

  

图8 左图:基础绘图系统绘制的直方图 右图:使用更多分组。注意:由于组距变小,每组对应的样本数有所减少

  

对于ggplot2包,可以使用qplot()函数得到同样的绘图结果(见图9):

  

qplot(mtcars$mpg)

  

图9 左图:ggplot2中qplot()函数绘制的直方图,组距为默认值 右图:组距更大的直方图

  

如果参数向量在同一个数据框内,则可以使用下面的语句:

  

library(ggplot2)qplot(mpg, data=mtcars, binwidth=4)# 这等价于ggplot(mtcars, aes(x=mpg)) + geom_histogram(binwidth=4)5 绘制箱线图问题如何绘制箱线图以对不同分布进行比较?

  

方法使用plot()函数绘制箱线图(见图10)时向其传递两个向量:x和y。当x为因子型变量(与数值型变量对应)时,它会默认绘制箱线图:

  

plot(ToothGrowth$supp, ToothGrowth$len)当两个参数向量包含在同一个数据框中时,也可以使用公式语法。公式语法允许我们在x轴上使用变量组合,如图 10 所示。

  

# 公式语法boxplot(len ~ supo, data = ToothGrowth)# 在x轴上引入两变量的交互boxplot(len ~ supp + dose, data = ToothGrowth)

  

图10 左图:基础绘图系统绘制的箱线图 右图:基于多分组变量的箱线图

  

对于ggplot2包,你可以使用qplot()函数绘制同样的图形(见图11),使用时将参数设定为geom="boxplot":

  

library(ggplot2)qplot(ToothGrowth$supp, ToothGrowth$len, geom="boxplot")

  

图11 左图:qplot()函数绘制的箱线图 右图:基于多分组变量的箱线图

  

当两个参数向量在同一个数据框内时,则可以使用下面的语句:

  

qplot(supp, len, data=ToothGrowth, geom="boxplot")# 这等价于ggplot(ToothGrowth, aes(x=supp,y=len)) + geom_boxplot()使用interaction()函数将分组变量组合在一起也可以绘制基于多分组变量的箱线图,如图11右图所示。本例中,dose变量是数值型,因此,我们必须先将其转化为因子型变量,再将其作为分组变量:

  

# 使用三个独立的向量参数qplot(interaction(ToothGrowth$supp, ToothGrowth$dose), ToothGrowth$len,geom="boxplot")# 也可以以数据框中的列作为参数qplot(interaction(supp, dose), len, data=ToothGrowth, geom="boxplot")# 这等价于ggplot(ToothGrowth, aes(x=interaction(supp, dose), y=len)) + geom_boxplot()你可能会注意到基础绘图系统绘制的箱线图与ggplot2略有不同。这是因为两者在绘图过程中调用的计算分位数的方法略有差异。运行?geom_boxplot和?boxplot.base命令可以得到更多关于两者差异的细节信息。

  

6 绘制函数图像问题如何绘制函数图像?

  

方法可以使用curve()函数绘制函数图像,如图12左图所示。使用时需向其传递一个关于变量x的表达式:

  

curve(x^3 - 5*x, from=-4, to=4)你可以绘制任何一个以数值型向量作为输入且以数值型向量作为输出的函数图像,包括你自己定义的函数,如图12右图所示。

  

  

图12 左图:基础绘图系统绘制的函数图像 右图:绘制用户自定义的函数

  

将参数设置为add=TRUE可以向已有图形添加函数图像:

  

# 绘制用户自定义的函数图像myfun <- function(xvar) {   1/(1 + exp(-xvar + 10))    }curve(myfun(x), from=0, to=20)# 添加直线curve(1-myfun(x), add = TRUE, col ="red")对于ggplot2,可以使用qplot()函数绘制得到同样的结果(见图13)。使用时需设定stat="function"和geom="line",并向其传递一个输入和输出皆为数值型向量的函数:

  

library(ggplot2)# 将x轴的取值范围设定为0到20qplot(c(0, 20), fun=myfun, stat="function", geom="line")# 这等价于ggplot(data.frame(x=c(0, 20)), aes(x=x)) + stat_function(fun=myfun, geom="line")图13 qplot()函数绘制的函数图像

  

本文节选自《R数据可视化手册》

  

  

内容简介

  


R具有强大的统计计算功能和便捷的数据可视化系统。本书重点讲解R的绘图系统,指导读者通过绘图系统实现数据可视化。

  

书中提供了快速绘制高质量图形的150多种技巧,每个技巧用来解决一个特定的绘图需求。读者可以通过目录快速定位到自己遇到的问题,查阅相应的解决方案。同时,作者在大部分的技巧之后会进行一些讨论和延伸,介绍一些总结出的绘图技巧。

  

本书侧重于解决具体问题,是R数据可视化的实战秘籍。本书中绝大多数的绘图案例都是以强大、灵活制图而著称的R包ggplot2实现的,充分展现了ggplot2生动、翔实的一面。从如何画点图、线图、柱状图,到如何添加注解、修改坐标轴和图例,再到分面的使用和颜色的选取等,本书都有清晰的讲解。虽然本书的大多数技巧使用的是ggplot2,但是并不仅仅局限于ggplot2的介绍。作者的理念是用合适的工具来完成合适的绘图任务,读者也可以学到许多其他有用的绘图函数和工具,来适应各种复杂的需求。

  

本书是学习R中丰富的数据可视化方法的权威手册,非常适合对R语言有基本的了解的读者阅读。

相关文章