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中cookie的使用详细分析

    cookie机制将信息存储于用户硬盘,因此可以作为全局变量,这是它最大的一个优点.它可以用于以下几种场合. (1)保存用户登录状态.例如将用户id存储于一个cookie内,这样当用户下次访问该页面时就 ...

  2. 用GDB调试程序

    转自:http://blog.csdn.net/haoel/article/details/2879 是一篇从基础讲gdb的博文 用GDB调试程序 GDB概述---- GDB是GNU开源组织发布的一个 ...

  3. 或许是介绍Android Studio使用Git最详细的文章

    欢迎访问我的个人博客转发请注明出处:http://www.wensibo.top/2017/03/12/GitOnAS/ 前言 本文较长,图片很多很多,流量党慎入 使用Git已经有一段时间了,但是之前 ...

  4. HttpServletResponse对象介绍

    一.HttpServletResponse对象介绍

  5. 关于Maven的安装及初步使用

    关于Maven的初步使用 1.  下载: 进入http://maven.apache.org/download.cgi下载  Maven 3.3.1 2.  将压缩包解压到自己的硬盘中,最好放在某个盘 ...

  6. git remote log error

    使用git pull的时候收到以下信息: error: there are still refs under 'refs/remotes/origin/xxxx'From 10.1.25.57:yyy ...

  7. entity framework core 支持批量插入,值得期待

    entity framework6.x之前搞了这么多版本,构架这么牛B,居然没有批量插入更新的功能,但有很多替换的解决方案,例如Entity Framework Extended Library(ht ...

  8. Mac本地编辑服务器代码

    windows上映射网络驱动器可以直接在本地编辑远程服务器的代码,那么在mac上怎么配置呢? 1.打开finder——前往——连接服务器——输入:smb://********(你的机器名) 2.输入服 ...

  9. noip2008(最优贸易)

    C 国有 n 个大城市和 m 条道路,每条道路连接这 n 个城市中的某两个城市.任意两个城市之间最多只有一条道路直接相连.这 m 条道路中有一部分为单向通行的道路,一部分为双向通行的道路,双向通行的道 ...

  10. 检测Windows程序的内存和资源泄漏之原生语言环境

    最近接连收到大客户的反馈,我们开发的一个软件,姑且称之为App-E吧,在项目规模特别大的情况下,长时间使用会逐渐耗尽内存,运行越来越缓慢,软件最终崩溃.由于App-E是使用混合语言开发的,主界面使用C ...