跟我一起ggplot2(1)
ggplot2
R的作图工具包,可以使用非常简单的语句实现非常复杂漂亮的效果。
qplot
加载qplot
library(ggplot2) # 测试数据集,ggplot2内置的钻石数据
qplot(carat, price, data = diamonds)
dsmall <- diamonds[sample(nrow(diamonds), 100), ] #对diamonds数据集进行抽样
#1. 按color,size,shape的基本分类可视化
#1.1 简单的散点图(利用color分类,不同颜色的钻石由不同颜色的点代表)

#1.2. 简单的散点图(利用shape分类,不同的切割方式由不同形状的点代表)

#2. 绘制不同类型的图表:geom参数
qplot(x,y,data=data,geom="")中的geom=""用来控制输出的图形类型
I. 两变量图
(1) geom="points",默认参数,绘制散点图(x,y)
(2) geom="smooth" 绘制平滑曲线(基于loess, gam, lm ,rlm,glm)
(3) geom="boxplot" 绘制箱线图 ,当x为属性变量(factor),y为数值变量时
II.单变量图
(4) geom="histogram",直方图
(5) geom="density",核密度估计图
(6) geom="bar",条形图barchart
III.时间序列
(7) geom="line",折线图,可用于时间序列(当x=date)
(8) geom="path",路径图(参见后文)
# 2.1 同时绘制散点图+平滑直线
qplot(carat, price, data = dsmall, geom=c("point","smooth"))

#参数调整:method=""等
#(a). method = "loess", 默认平滑算法, 通过span=调整窗宽, span=0(波动) 到 span=1(光滑)
qplot(carat, price, data = dsmall, geom = c("point", "smooth"),
method = "loess",span=0.2)

# (b). method = "gam": GAM 在大数据时比loess高效,需要载入 mgcv 包
library(mgcv)
qplot(carat, price, data = dsmall, geom = c("point", "smooth"),
method="gam", formula = y ~ s(x))

# (c). method="lm", 线性平滑
qplot(carat, price, data = dsmall, geom = c("point", "smooth"),
method = "lm")

# method="lm",formula = y ~ ns(x, 3),三次自然样条,需要载入splines包
library(splines)
qplot(carat, price, data = dsmall, geom = c("point", "smooth"),
method = "lm", formula = y ~ ns(x, 3))

# method = "rlm", robust linear model, 受异常值影响小,需要载入MASS包
library(MASS)
qplot(carat, price, data = dsmall, geom = c("point", "smooth"),
method = "rlm")

# 2.2:x为属性变量,y为连续变量,绘制boxplot
qplot(color, price/carat, data=diamonds,geom="boxplot")

# 2.3:单变量,直方图
qplot(carat, data = diamonds, geom = "histogram")

#2.4: 单变量,核密度估计图
qplot(carat, data = diamonds, geom = "density")

# 按不同颜色绘制的density图
qplot(carat, data = diamonds, geom = "density",colour=color)

# 2.5 条形图(柱状图)
#计数,求count(color)
qplot(color, data = diamonds, geom = "bar")

#加权,对每个求sum(carat),类似于excel里的数据透视图,按不同的color计算carat的总和
qplot(color, data = diamonds, geom = "bar", weight = carat)

#2.6. Time-series
qplot(date, unemploy / pop, data = economics, geom = "line")

#2.7. Path plot
#如果要查看失业率(unemploy / pop)与平均失业时间(uempmed)之间的关系,一个方法是利用散点图,但是这样做就会导致无法观察到随时间变化的趋势了,path plot利用颜色深浅来代表年份,随着颜色从浅蓝变成深蓝,可以观察到失业率与失业时间的关系的变化趋势。
#具体实现:先自定义函数year(),将字符串格式的时间转化为年
year <- function(x) as.POSIXlt(x)$year + 1900 #画出path plot,颜色按年份由浅到深
qplot(unemploy / pop, uempmed, data = economics,
geom = "path", colour = year(date))

我们已经讨论了如何利用外观参数在同一图中比较不同分类的差异。而分面可以将不同的亚类放在不同的图中进行比较:
qplot(carat, data = diamonds, facets = color ~ .,geom = "histogram", binwidth = 0.1, xlim = c(0, 3))

qplot(carat, data = diamonds, facets = color ~ .,geom = "histogram", binwidth = 0.1, xlim = c(0, 3))

下面的图形在一开始的基础上添加了新的元素:分面,多个图层以及统计数据。分面和图层扩展了上面提到的数据结构:每一个分面的每一个图层都有属于自己的数据集。你可以将它想象成是一个三维的数组:分面构成了二维平面,然后图层给予其在新的维度上的扩展。在这个例子中,不同图层上的数据是一样的,但是从理论上来讲,不同的图层中可以有不同的数据。
qplot(displ, hwy, data=mpg, facets = . ~ year) + geom_smooth()

ggplot
基本绘图类型:
这些几何元素是ggplot的基础。他们彼此结合可以构成复杂的图像。他们中的绝大多数对应特定的绘图类型。
geom_area()
geom_bar()
geom_line()
geom_point()
geom_polygon()
geom_text()
geom_tile()
> library("ggplot2")
> head(mpg)
manufacturer model displ year cyl trans drv cty
1 audi a4 1.8 1999 4 auto(l5) f 18
2 audi a4 1.8 1999 4 manual(m5) f 21
3 audi a4 2.0 2008 4 manual(m6) f 20
4 audi a4 2.0 2008 4 auto(av) f 21
5 audi a4 2.8 1999 6 auto(l5) f 16
6 audi a4 2.8 1999 6 manual(m5) f 18
hwy fl class
1 29 p compact
2 29 p compact
3 31 p compact
4 30 p compact
5 26 p compact
6 26 p compact
> p <- ggplot(mpg, aes(x = cty, y = hwy, colour = factor(year)))
> summary(p)
data: manufacturer, model, displ, year, cyl,
trans, drv, cty, hwy, fl, class [234x11]
mapping: x = cty, y = hwy, colour = factor(year)
faceting: facet_null()
然后就是几何对象和统计,简单的理解就是通过统计变换把前面的元素表现出来,因为统计变换的函数stat开头的默认有包含自己的几何图形,而几何图形函数geom又带有自己的统计变换,通常都能达到目的。
p + geom_point() #散点图

ggplot(mpg, aes(x = displ)) + geom_histogram(aes(y = (..count..)), fill = "steelblue", colour = "#808080", bin = 0.1) #直方图

ggplot(mpg, aes(y = displ, x = factor(cyl), fill = factor(cyl))) + geom_boxplot() #盒图

ggplot(diamonds, aes(carat, price)) + stat_bin2d() #二维密度图

p + geom_point() + stat_smooth(method = "lm", se = F)

ggplot(mpg, aes(x = cty, y = hwy)) + geom_point(aes(colour = factor(year))) + stat_smooth(method = "lm", se = F) #请注意两种方式的区别

ggplot(mpg, aes(y = hwy, x = class, colour = class)) + geom_boxplot() + geom_jitter(alpha = 0.3) +
theme(panel.grid = element_blank(), panel.background = element_rect(fill = NA, colour = "black"))

ggplot(mpg, aes(x = displ)) + stat_bin(aes(y = ..density.., fill = factor(year)),
colour = "#909090") + stat_density(aes(ymax = "density", colour = factor(year)),
geom = "line", size = 1.2) + facet_wrap(~year, ncol = 1)

ggplot2中的基本概念
将数据中变量映射到图形属性。映射控制了二者之间的关系。

标度:标度负责控制映射后图形属性的显示方式。具体形式上来看是图例和坐标刻度。scale和mapping是紧密相关的概念。

几何对象(Geometric):几何对象代表我们图中看到的图形元素,如点、线、多边形等。

统计变换(Statistics):对原始数据进行某种计算,例如二元散点上加上一条回归线。

坐标系统(Coordinate):坐标系统控制坐标轴并影响所有图形元素,坐标轴可以进行变换以满足不同的需要。

图层(Layer):数据、映射、几何对象、统计变换等构成一个图层。图层可以允许用户一步步的构建图形,方便单独对图层进行修改。

分面(Facet):条件绘图,将数据按某种方式分组,然后分别绘图。分面就是控制分组绘图的方法和排列形式。

总结
关于ggplot2的绘图功能还有待进一步挖掘。
跟我一起ggplot2(1)的更多相关文章
- 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 & ...
随机推荐
- [原创]mybatis中整合ehcache缓存框架的使用
mybatis整合ehcache缓存框架的使用 mybaits的二级缓存是mapper范围级别,除了在SqlMapConfig.xml设置二级缓存的总开关,还要在具体的mapper.xml中开启二级缓 ...
- 关于Raid0,Raid1,Raid5,Raid10的总结
RAID0 定义: RAID 0又称为Stripe或Striping,它代表了所有RAID级别中最高的存储性能.RAID 0提高存储性能的原理是把连续的数据分散到多个磁盘上存取,这样,系统有数据请求就 ...
- 步入angularjs directive(指令)--点击按钮加入loading状态
今天我终于鼓起勇气写自己的博客了,激动与害怕并存,希望大家能多多批评指导,如果能够帮助大家,也希望大家点个赞!! 用angularjs 工作也有段时间了,总体感觉最有挑战性的还是指令,因为没有指令的a ...
- 【深入Java虚拟机】之四:类加载机制
类加载过程 类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载.验证.准备.解析.初始化.使用和卸载七个阶段.它们开始的顺序如下图所示: 其中类加载的过程包括了加载.验 ...
- iOS之ProtocolBuffer搭建和示例demo
这次搭建iOS的ProtocolBuffer编译器和把*.proto源文件编译成*.pbobjc.h 和 *.pbobjc.m文件时,碰到不少问题! 搭建pb编译器到时没有什么问题,只是在把*.pro ...
- [Hadoop in Action] 第7章 细则手册
向任务传递定制参数 获取任务待定的信息 生成多个输出 与关系数据库交互 让输出做全局排序 1.向任务传递作业定制的参数 在编写Mapper和Reducer时,通常会想让一些地方可以配 ...
- 树莓派3B的食用方法-1(装系统 网线ssh连接)
首先要有一个树莓派3B , 在某宝买就行, 这东西基本上找到假货都难,另外国产和英国也没什么差别,差不多哪个便宜买哪个就行. 不要买店家的套餐,一个是配的东西有些不需要,有的质量也不好. 提示:除了G ...
- [转]ThinkPHP中实例化对象M()和D()的区别,select和find的区别
1.ThinkPHP中实例化对象M()和D()的区别 在实例化的过程中,经常使用D方法和M方法,这两个方法的区别在于M方法实例化模型无需用户为每个数据表定义模型类,如果D方法没有找到定义的模型类,则会 ...
- web音乐播放器总结
前言 项目暂时告一段落,胸中有股炽热之气望喷涌而出!忍不住吐槽,为什么程序员要加班啊,为什么产品下达deadline,就得把这生死剑架在程序员的脖子上.卧槽,听说程序员在国外是叫工程师的.最近看了很多 ...
- APP技术演化的路
谈起APP,大家都太熟悉不过了,今天想谈谈这么多年技术演化的路. 早期一些大公司就开始做一些APP了,例如facebook.google等国外的公司就已经开发这个技术路线,那个时候的APP数量很少,基 ...