How To Use ggplot2
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的更多相关文章
- 跟我一起ggplot2(1)
ggplot2 R的作图工具包,可以使用非常简单的语句实现非常复杂漂亮的效果. qplot 加载qplot library(ggplot2) # 测试数据集,ggplot2内置的钻石数据 qplot( ...
- R语言:ggplot2精细化绘图——以实用商业化图表绘图为例
本文版权归http://www.cnblogs.com/weibaar 本文旨在介绍R语言中ggplot2包的一些精细化操作,主要适用于对R画图有一定了解,需要更精细化作图的人,尤其是那些刚从exce ...
- ggplot2 多图排版
和R自带的绘图系统不同,ggplot2不能直接通过par(mfrow) 或者 layout()来排版多张图片.终于发现,其实可以通过一个『gridExtra』包来搞定: require(gridExt ...
- ggplot2 上篇
title: "ggplot2 上篇" author: "li_volleyball" date: "2016年4月16日" output: ...
- ggplot2包--R可视化
1.ggplot2发展历程 ggplot2是Hadley在爱荷华州立大学博士期间的作品,也是他博士论文的主题之一,实际上ggplot2还有个前身ggplot,但后来废弃了,某种程度上这也是Hadley ...
- ggplot2.multiplot:将多个图形使用GGPLOT2在同一页上
一页多图 介绍 ggplot2.multiplot是一个易于使用的功能,将多个图形在同一页面上使用R统计软件和GGPLOT2绘图方法.这个功能是从easyGgplot2包. 安装并加载easyGgpl ...
- ggplot2 legend图例的修改
ggplot2中的legend包括四个部分: legend.tittle, legend.text, legend.key, legend.backgroud.针对每一部分有四种处理方式: eleme ...
- Plotting means and error bars (ggplot2)
library(ggplot2) ############################################# # summarySE ######################### ...
- ggplot2 学习笔记 (持续更新.....)
1. 目前有四种主题 theme_gray(), theme_bw() , theme_minimal(),theme_classic() 2. X轴设置刻度 scale_x_continuous(l ...
- ggplot2 demo
title <- rep("A Really Rather Long Text Label", 25)value <- runif(25, 1,10)spacing & ...
随机推荐
- JS事件绑定深入
W3C很好地解决了覆盖问题.相同函数屏蔽的问题.this传递问题.添加额外方法不被覆盖等问题. 但是IE8之前的版本并不支持,IE9已完全支持了. IE和W3C在事件绑定上存在很多差异,我们以冒泡和捕 ...
- map,set,list等集合解析以及HashMap,LinkedHashMap,TreeMap等该选谁的的区别
前言: 今天在整理一些资料时,想起了map,set,list等集合,于是就做些笔记,提供给大家学习参考以及自己日后回顾. Map主要用于存储健值对,根据键得到值,因此不允许键重复(重复了覆盖了),但允 ...
- JSP-表单元素示例
<%@ page language="java" pageEncoding="UTF-8"%><%@ page import="ja ...
- 日常:css样式、选择器、个别知识点、数组array
优先加入css引入文件定义,个别的在下面用style改变.(从左往右,从上往下)CSS样式表1.内联样式表(优先级最高)(改个别的)<div style="width:100px; h ...
- 【《Effective C#》提炼总结】提高Unity中C#代码质量的21条准则
作者:Williammao, 腾讯移动客户端开发工程师 商业转载请联系腾讯WeTest获得授权,非商业转载请注明出处. 原文链接:http://wetest.qq.com/lab/view/290.h ...
- 第34篇 再谈http协议
从打开一个网址说起 当在浏览器中输入一个网址的时候,浏览器会渲染出对应的网页的内容.作为web开发人员来说,应该知道这个过程: 当输入的一个网址为域名的时候,浏览器则根据本机的网关和DNS服务器来解析 ...
- 裸机(Bare Metal)安装CoreOS
本文以 1235.9.0-stable 为例,在WMWare中进行安装. 1.获取安装资源 https://coreos.com/releases/ 通过"Browse Images&quo ...
- gps数据转百度地图坐标
昨天大叔问我一个关于gps的问题,一开始我是懵逼的,因为之前我从来没有接触过这玩意儿.稍微查了一下,gps协议包含了$开头和<>结尾,但这并不是重点.大叔告诉我说他们采集了一些位置的经纬度 ...
- 算法模板——Dinic网络最大流 1
实现功能:同sap网络最大流 今天第一次学Dinic,感觉最大的特点就是——相当的白话,相当的容易懂,而且丝毫不影响复杂度,顶多也就是代码长个几行 主要原理就是每次用spfa以O(n)的时间复杂度预处 ...
- canvas作图
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...