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. 使用JS实现手风琴效果

    想要实现简单的手风琴切换效果,需要使用JS实现,如下是使用javascript源码实现,后续会更新使用jQuery实现. 1. 先进行简单的布局:我们可以再ul下添加几个li实现html的简单布局,再 ...

  2. 用OC和Swift一起说说二叉树

    前言:    一:在计算机科学中,二叉树是每个节点最多有两个子树的树结构.通常子树被称作"左子树"(left subtree)和"右子树"(right subt ...

  3. C#的for循环使用方法

    for循环是程序语言开发中常见的技法之一,这类循环可以执行指定的次数,并维护它自己的计数器,要定义for循环,需要下述信息:1.初始化计数器变量的一个起始值;2.继续循环的条件,它应涉及到计数器变量; ...

  4. 转 jquery怎么在header中设置请求信息

    jquery是js的类库,js本身不能操作header,因为js是在浏览器加载页面过程中才开始执行的 header需要服务器端执行操作 如果是ajax,是可以设置header $.ajax({ url ...

  5. java poi 从服务器下载模板写入数据再导出

    最近写了一个,Excel 的 写入和导出.   需求是这样的.   在新建合同的时候,会有导出合同的数据,    导出的模板是固定的,,需要在模板里面写入合同的信息. first   :  下载模板 ...

  6. C/C++ char数组存储字符串内存地址

    问题描述: #include <stdio.h> int main(void) { //program 6.3 Arrays of strings ][]; ;i<;++i){ ;j ...

  7. spring init

    DN学院讲师招募     Markdown编辑器轻松写博文     TOP 50 CTO坐镇直招     读文章说感想获好礼 通过Spring @PostConstruct 和 @PreDestroy ...

  8. 使用Visual Studio 2017作为Linux C++开发工具

    Visual Studio 2017 微软的宇宙第一IDE Visual Studio 2017正式版出来了,地址是:https://www.visualstudio.com/vs/whatsnew/ ...

  9. Java面试07|Redis数据库

    1.Redis持久化的几种方式 (1)RDB(Redis DataBase)持久化 (2)AOF(Append Only File)持久化 2.Redis的缓存失效策略 主要涉及到expire对主键过 ...

  10. WeMall微信商城签到插件Sign的主要源码

    WeMall微信商城源码签到插件Sign,用于商城的签到系统,分享了部分比较重要的代码,供技术员学习参考 AdminController.class.php <?php namespace Ad ...