关于ggplot包(二)
关于ggplot包(二)
标尺(Scale)
从前面可以看到,画图其实就是在做映射,不管是映射到不同的几何对象上,还是映射各种图形属性。在对图形属性进行映射之后,使用标尺可以控制这些属性的显示方式,如坐标刻度,如颜色属性。
> ggplot(small)+geom_point(aes(x=carat,y=price,shape=cut,colour=color))+scale_y_log10()+scale_colour_manual(values=rainbow(7))#将Y轴坐标进行log10变换,自己定义颜色为彩虹色
统计变换(Statistics)
统计变换对原始数据进行某种计算,然后在图上表示出来,如对散点图上加一条回归线
> 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_summarystat_bin stat_density stat_qq stat_summary2dstat_bin2d stat_density2d stat_quantile stat_summary_hexstat_bindot stat_ecdf stat_smooth stat_uniquestat_binhex stat_function stat_spoke stat_vlinestat_boxplot stat_hline stat_sum stat_ydensity
坐标系统(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()
风玫瑰图
> ggplot(small)+geom_bar(aes(x=clarity, fill=cut))+coord_polar()
图层(Layer)
对于PS的图层概念,ggplot也能使用+号来叠加图层
分面(Facet)
分面可以让我们按照某种给定的条件,对数据进行分组,然后分别画图
> ggplot(small, aes(x=carat, y=price))+geom_point(aes(colour=cut))+scale_y_log10() +facet_wrap(~cut)+stat_smooth()
主题(Theme)
通过ggplot画图之后,我们可能还需要对图进行定制,像title, xlab, ylab这些高频需要用到的,自不用说,ggplot2提供了ggtitle(), xlab()和ylab()来实现。
但是这个远远满足不了需求,我们需要改变字体,字体大小,坐标轴,背景等各种元素,这需要通过theme()函数来完成。
ggplot2提供一些已经写好的主题,比如theme_grey()
为默认主题,theme_bw()
为白色背景的主题,还有theme_classic()
主题,和R的基础画图函数较像。
别外ggthemes包提供了一些主题可供使用,包括:
theme_economist theme_economist_whitetheme_wsj theme_exceltheme_few theme_foundationtheme_igray theme_solarizedtheme_stata theme_tufte
> p<-ggplot(small)+geom_boxplot(aes(x=cut, y=price,fill=color))> p> require(ggthemes)载入需要的程辑包:ggthemes> p + theme_wsj()
详细说明,可以参考?theme
的帮助文档
二维密度图
> ggplot(diamonds, aes(carat, price))+ stat_density2d(aes(fill = ..level..), geom="polygon")+ scale_fill_continuous(high=‘darkred‘,low=‘darkgreen‘)