首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

R绘图-ggplot2 (2)

4、标尺(Scale)

画图就是在做映射,不管是映射到不同的几何对象上,还是映射各种图形属性。

#这一小节介绍标尺,在对图形属性进行映射之后,使用标尺可以控制这些属性的显示方式,

#比如坐标刻度,可能通过标尺,将坐标进行对数变换;比如颜色属性,也可以通过标尺,进行改变。

#以数据(Data)和映射(Mapping)一节中所画散点图为例,将Y轴坐标进行log10变换,再自己定义颜色为彩虹色。

ggplot(small)+geom_point(aes(x=carat, y=price, shape=cut, colour=color))+scale_y_log10()+scale_colour_manual(values=rainbow(7))

5、统计变换(Statistics)

统计变换对原始数据进行某种计算,然后在图上表示出来,例如对散点图上加一条回归线。

#这里就不按颜色、切工来分了,不然ggplot会按不同的分类变量分别做回归,图就很乱,

#如果我们需要这样做,我们可以使用分面,这个将在后面介绍。

ggplot(small, aes(x=carat, y=price))+geom_point()+scale_y_log10()+stat_smooth()

#这里,aes所提供的参数,就通过ggplot提供,而不是提供给geom_point,因为ggplot里的参数,相当于全局变量,

#geom_point()和stat_smooth()都知道x,y的映射,如果只提供给geom_point(),则相当于是局部变量,

#geom_point知道这种映射,而stat_smooth不知道,当然你再给stat_smooth也提供x,y的映射,

#不过共用的映射,还是提供给ggplot好。

ggplot2提供了多种统计变换方式:

stat_abline stat_contour stat_identity stat_summary

stat_bin stat_density stat_qq stat_summary2d

stat_bin2d stat_density2d stat_quantile stat_summary_hex

stat_bindot stat_ecdf stat_smooth stat_unique

stat_binhex stat_function stat_spoke stat_vline

stat_boxplot stat_hline stat_sum stat_ydensity

统计#变换是非常重要的功能,我们可以自己写函数,基于原始数据做某种计算,并在图上表现出来,也可以通过它改变geom_xxx函数画图的默认统计参数。

比如#把boxplot的中位线替换成了平均值来作图。

6、坐标系统(Coordinante)

坐标系统控制坐标轴,可以进行变换,例如XY轴翻转,笛卡尔坐标和极坐标转换,以满足我们的各种需求。

#坐标轴翻转由coord_flip()实现

ggplot(small)+geom_bar(aes(x=cut, fill=cut))+coord_flip()

#转换成极坐标可以由coord_polar()实现:

ggplot(small)+geom_bar(aes(x=factor(1), fill=cut))+coord_polar(theta="y")

#这也是为什么之前介绍常用图形画法时没有提及饼图的原因,饼图实际上就是柱状图,只不过是使用极坐标而已,柱状图的高度,对应于饼图的弧度,饼图并不推荐,因为人类的眼睛比较弧度的能力比不上比较高度(柱状图)

#靶心图:

ggplot(small)+geom_bar(aes(x=factor(1), fill=cut))+coord_polar()

#风玫瑰图(windrose)

ggplot(small)+geom_bar(aes(x=clarity, fill=cut))+coord_polar()

7、图层(Layer)

photoshop流行的原因在于PS 3.0时引入图层的概念,ggplot的牛B之处在于使用+号来叠加图层,这堪称是泛型编程的典范。

在前面散点图上,我们已经见识过,加上了一个回归线拟合的图层。

#有了图层的概念,使用ggplot画起图来,就更加得心应手。

#做为图层的一个很好的例子是蝙蝠侠logo,batman logo由6个函数组成,在下面的例子中,我先画第一个函数,之后再加一个图层画第二个函数,不断重复这一过程,直到六个函数全部画好。

require(ggplot2)

f1data.frame(x=x,y=y)

d -3*sqrt(33)/7,]

return(d)

}

x1data.frame(x2=x2, y2=y2)

p2data.frame(x3=x3, y3=y3)

p3data.frame(x4=x4,y4=y4)

p4data.frame(x5=x5,y5=y5)

p5data.frame(x6=x6,y6=y6)

p6

#下面再以生物界中常用的柱状图+误差图为实例,展示ggplot2非常灵活的图层。

Normaldata.frame(V=c("Normal", "Cancer"), mean=m, sd=s)

d$V

参考链接:http://ygc.name/2014/05/11/use-ggplot2/

下一篇
举报
领券