0. Preparation and Introduction

ggplot2是R中新颖的数据可视化包,这得益于Leland Wilkinson在他的著作《The Grammar of Graphics》中提出了一套图形语法,把图形元素抽象成可以自由组合的成分,Hadley Wickham把这套想法在R中实现。

1. How to use qplot

函数qplot()是ggplot2中十分常用的函数,使用它可以绘制丰富多彩的图形,并且通常只需要一行代码可以搞定。在这里,我们通过R内置的钻石数据包(diamonds)来模拟使用qplot函数的过程。

数据预处理:由于钻石数据量比较大,一步步运行操作可能会导致系统缓慢或者图像不清晰等问题,所以对钻石数据进行必要的预处理,使其数据量变小。

set.seed(1410)#让样本可重复
dsmall<-diamonds[sample(nrow(diamonds),100),]#小数据作图展示

1.1 Colour & Shape  

library(ggplot2)
qplot(carat,price,data=dsmall,colour=color)#将color变量映射到点的颜色
qplot(carat,price,data=dsmall,shape=cut)#cut->形状

上述两幅图是分别设置了颜色(左图)和形状(右图)参数的carat-price散点图。可以明显看出,qplot()函数对于颜色和形状设置的表达十分简练,不需要像plot()函数那样需要多行代码才能完成绘图,这里初步展示了该函数的使用方法。

qplot(carat,price,data=diamonds,alpha=I(1/10))#alpha=I()改变点的透明度

上一行代码通过改变alpha=I(1/10)这个参数来实现点的透明度改变,其中I()内的参数为透明度,数值越小,透明度越高。图形如下所示:

1.2 geom.smooth & Point

qplot(carat,price,data=dsmall,geom=c("point","smooth"))
#point绘制散点图,smooth拟合平滑曲线(展示标准误,可用se=FALSE取消),n较小时method="loess"默认局部回归
qplot(carat,price,data=dsmall,geom=c("point","smooth"),span=0.2)
#span设置曲线平滑程度0(很不平滑)->1(很平滑)
#若数据量大于1000,可以使用mgcv包

上述两图为carat-price的散点图,数据来源于dsmall,并且geom()参数赋予相应的功能(散点图与回归线)。其中,右图拟合曲线的平滑程度为0.2(平滑程度低)。

1.2 geom.boxplot

qplot(color,price/carat,data=diamonds,geom="jitter",alpha=I(1/50))#绘制扰动点图geom="jitter"

这里绘制的是扰动点图,若要绘制箱线图,则使用的是geom="boxplot"参数。

1.2 geom.histogram & density

qplot(carat,data = diamonds,geom = "histogram",binwidth=0.1,xlim=c(0,3))#直方图,binwidth可以改变最小组距

参数geom = "histogram"用来绘制直方图(如下所示),binwidth可以改变组距。

qplot(carat,data = diamonds,geom = "density")#密度曲线图

参数geom = "density"用来绘制密度曲线图(如下所示):

 

你也可以对每一种颜色(Colour)变量分类绘制不同颜色钻石的密度曲线和直方图:

qplot(carat,data = diamonds,geom = "density",colour=color)
qplot(carat,data = diamonds,geom = "histogram",fill=color)

1.2 geom.bar

qplot(color,data=diamonds,geom="bar",weight=carat)+scale_y_continuous("carat")

利用参数geom="bar"来绘制条形图(如下所示)。若想改变坐标轴的标题的话,可以这样写:

qplot(color,data=diamonds,geom="bar",weight=carat) +labs(y="克拉",x="颜色")
#scale_y_continuous修饰图形+改坐标轴名称(continuous连续)

1.3.Point

qplot(displ,hwy,data=mpg,color=factor(cyl))

qplot默认设置为散点图,可以使用factor()函数将图像按照分类变量分类填色,效果如下所示:

 

  

2. How to use ggplot

2.1 try

ggplot(diamonds,aes(carat,price,colour=cut))#这个图形再加上图层之前什么也看不到

bestfit<-geom_smooth(method = "lm",se=F,colour=alpha("steelblue",0.5),size=2)
qplot(sleep_rem,sleep_total,data=msleep)+bestfit

 

qplot(awake,brainwt,data=msleep,log="y")+bestfit

qplot(bodywt,brainwt,data=msleep,log="xy")+bestfit#创建一个带有透明深蓝色回归线的图层

2.2 try  

p<-ggplot(mtcars,aes(mpg,wt))
p+geom_point(colour="darkblue")

p+geom_point(aes(colour="darkblue"))#比较两者的不同

2.3 try

p<-ggplot(diamonds,aes(x=carat))
p+layer(
geom="bar",
position = "identity",
stat="bin",
params=list(fill="steelblue",binwidth=2)
)

以下代码是错误的,新版本没有geom_params和stat_params这两个变量:

p<-ggplot(diamonds,aes(x=carat));p<-p+layer( geom="bar",geom_params=list(fill="steelblue"),stat="bin",stat_params=list(binwidth=2))

2.4 group

Example 1:

nlme包里的一个简单的纵向数据集Oxboys。该数据记录了26名男孩(Subject)在九个不同时期(Occasion)所测定的身高(height)和中心化后的年龄(age)。

library(nlme)
pOxboys<-ggplot(Oxboys,aes(age,height,group=Subject))+geom_line()#geom_line()来连线
pOxboys#正确分组,每条线代表一个男孩

pOxboysx<-ggplot(Oxboys,aes(age,height))+geom_line()
pOxboysx#错误分组,先撒点在连线(默认group=1)

#如果想给所有男孩增加一条光滑曲线
pOxboys+geom_smooth(aes(group=Subject),method = "lm",se=F)#但是实际上我们为每一个男孩都添加了一条光滑曲线

pOxboys+geom_smooth(aes(group=1),method = "lm",se=F)

 

2.5 Stat

ggplot(diamonds,aes(x=carat))+geom_histogram(aes(y=..density..),binwidth = 0.1)

这里的..density..是一种新语法,他告诉ggplot2将密度而不是频数映射到y轴

2.6 TRY

d<-ggplot(diamonds,aes(carat))+xlim(0,3)
d+stat_bin(aes(ymax=..count..),binwidth = 0.1,geom="area")

d+stat_bin(aes(size=..density..),binwidth = 0.1,geom="point",position="identity")

  

 

 

  

How To Use ggplot2的更多相关文章

  1. 跟我一起ggplot2(1)

    ggplot2 R的作图工具包,可以使用非常简单的语句实现非常复杂漂亮的效果. qplot 加载qplot library(ggplot2) # 测试数据集,ggplot2内置的钻石数据 qplot( ...

  2. R语言:ggplot2精细化绘图——以实用商业化图表绘图为例

    本文版权归http://www.cnblogs.com/weibaar 本文旨在介绍R语言中ggplot2包的一些精细化操作,主要适用于对R画图有一定了解,需要更精细化作图的人,尤其是那些刚从exce ...

  3. ggplot2 多图排版

    和R自带的绘图系统不同,ggplot2不能直接通过par(mfrow) 或者 layout()来排版多张图片.终于发现,其实可以通过一个『gridExtra』包来搞定: require(gridExt ...

  4. ggplot2 上篇

    title: "ggplot2 上篇" author: "li_volleyball" date: "2016年4月16日" output: ...

  5. ggplot2包--R可视化

    1.ggplot2发展历程 ggplot2是Hadley在爱荷华州立大学博士期间的作品,也是他博士论文的主题之一,实际上ggplot2还有个前身ggplot,但后来废弃了,某种程度上这也是Hadley ...

  6. ggplot2.multiplot:将多个图形使用GGPLOT2在同一页上

    一页多图 介绍 ggplot2.multiplot是一个易于使用的功能,将多个图形在同一页面上使用R统计软件和GGPLOT2绘图方法.这个功能是从easyGgplot2包. 安装并加载easyGgpl ...

  7. ggplot2 legend图例的修改

    ggplot2中的legend包括四个部分: legend.tittle, legend.text, legend.key, legend.backgroud.针对每一部分有四种处理方式: eleme ...

  8. Plotting means and error bars (ggplot2)

    library(ggplot2) ############################################# # summarySE ######################### ...

  9. ggplot2 学习笔记 (持续更新.....)

    1. 目前有四种主题 theme_gray(), theme_bw() , theme_minimal(),theme_classic() 2. X轴设置刻度 scale_x_continuous(l ...

  10. ggplot2 demo

    title <- rep("A Really Rather Long Text Label", 25)value <- runif(25, 1,10)spacing & ...

随机推荐

  1. java与javac的区别

    1.前提:java分为两部分 一个是编译(javac命令),一个是运行(java命令) 2.java与javac的区别 javac负责的是编译,将.java文件编译成.class文件,当执行javac ...

  2. SQL SERVER的检查点checkpoint

    1 什么是检查点 数据修改操作 都是在 内存中的数据页进行修改,每次修改后并没有立即把这些页面写入磁盘,而是等到一定时期,数据库引擎对数据库发起 检查点命令,这时,该命令就会创建一个已知的正常点,把当 ...

  3. jpush 延迟推送的栗子

    这个 推送是上个月做的, 上线之后没有问题,所以,我就把 这个整套代码 整理一哈,方便以后使用. 首先需求是这样的:  在比赛结束后的 10 钟 开始给 参加比赛的球员  发送消息,告诉他们比赛的信息 ...

  4. 从覆盖bootstrap样式谈css选择器优先级

    样式优先级 首先简单说几个定义样式的方式: 元素内嵌: <li><a href="" style="color:#ffffff;">SH ...

  5. 强大的健身软件——Keep

    Keep是一款具有社交属性的健身工具类产品.用户可利用碎片化的时间,随时随地选择适合自己的视频健身课程,进行真人同步训练.完成后还可以"打卡"晒成就.   你可根据器械.部位.难度 ...

  6. ACM 比大小

    比大小 时间限制:3000 ms  |  内存限制:65535 KB 难度:2   描述 给你两个很大的数,你能不能判断出他们两个数的大小呢? 比如123456789123456789要大于-1234 ...

  7. IE浏览器下使用AJAX登陆接口请求缓存与登陆不了的问题解决

    问题: 在IE浏览器下面,登陆的时候老是登陆不上,但是打开控制台的时候再登陆却能登陆上. 分析: 通过抓包,发现,在不打开控制台的时候,少了一个接口的请求,却返回了改接口的返回信息,但是返回信息并不是 ...

  8. .Net程序员学用Oracle系列(22):分析函数(OVER)

    1.函数语法 1.1.语法概述 1.2.窗口详解 1.2.1.ROWS 窗口 1.2.2.RANGE 窗口 2.函数用法 2.1.普通统计类函数 2.2.数据排序类函数 2.3.数据分布类函数 2.4 ...

  9. 四大组件之一---------activity的知识

    activity的生命活动 activity的四种启动模式 Android中以一个任务栈用来管理activity 一个栈的形式进行管理 在清单文件中,通过<activity>标签的andr ...

  10. db2 sequence 查询

    1. 查询名字 select * from sysibm.sysequences where seqname='wx_Id' 2.nextVal select wx_seq_id.currval fr ...