R实战:【绘图】ggplot2[多维度分析神器]
来源:互联网 发布:nginx转发不同ip和域名 编辑:程序博客网 时间:2024/06/06 16:33
R实战系列专栏
介绍
ggplot2是我见过最human friendly的画图软件,这得益于Leland Wilkinson在他的著作《The Grammar of Graphics》中提出了一套图形语法,把图形元素抽象成可以自由组合的成分,Hadley Wickham把这套想法在R中实现。
ggplot2基本要素
- 数据(Data)和映射(Mapping)
- 几何对象(Geometric)
- 标尺(Scale)
- 统计变换(Statistics)
- 坐标系统(Coordinante)
- 图层(Layer)
- 分面(Facet)
- 主题(Theme)
绘图
下面以一份钻石的数据为例,这份数据非常大,随机取一个子集来画图。
require(ggplot2)data(diamonds)set.seed(42)small <- diamonds[sample(nrow(diamonds), 1000), ]head(small)
> head(small) carat cut color clarity depth table price x y z49345 0.71 Very Good H SI1 62.5 60 2096 5.68 5.75 3.5750545 0.79 Premium H SI1 61.8 59 2275 5.97 5.91 3.6715434 1.03 Ideal F SI1 62.4 57 6178 6.48 6.44 4.0344792 0.50 Ideal E VS2 62.2 54 1624 5.08 5.11 3.1734614 0.27 Ideal E VS1 61.6 56 470 4.14 4.17 2.5627998 0.30 Premium E VS2 61.7 58 658 4.32 4.34 2.67画图实际上是把数据中的变量映射到图形属性上。以克拉(carat)数为X轴变量,价格(price)为Y轴变量。
require(ggplot2)data(diamonds)set.seed(42)small <- diamonds[sample(nrow(diamonds), 1000), ]#随机抽取1000个作为样本head(small)#画图实际上是把数据中的变量映射到图形属性上。#以克拉(carat)数为X轴变量,价格(price)为Y轴变量。p <- ggplot(data = small, mapping = aes(x = carat, y = price))#上面这行代码把数据映射XY坐标轴上,需要告诉ggplot2,这些数据要映射成什么样的几何对象,#下面以散点为例:p + geom_point()#如果想将切工(cut)映射到形状属性。只需要:p <- ggplot(data=small, mapping=aes(x=carat, y=price, shape=cut)) p + geom_point()#再比如我想将钻石的颜色(color)映射颜色属性:p <- ggplot(data=small, mapping=aes(x=carat, y=price, shape=cut, colour=color))p+geom_point()
更直观的绘图语法
最后一幅图也可以用下面的写法来完成
#再比如我想将钻石的颜色(color)映射颜色属性:ggplot(data=small) + geom_point(aes(x=carat, y=price, shape=cut, colour=color))
分面(将一个维度拆分成多图)
p <- ggplot(mpg, aes(displ, cty)) + geom_point()head(mpg)tail(mpg)p + facet_grid(. ~ cyl)#将cyl维度拆分成:左右多图p + facet_grid(cyl~.)#将cyl维度拆分成:上下多图p + facet_grid(drv ~ .)#将drv维度拆分成:上下多图p + facet_grid(drv ~ cyl)#将drv和cyl拆分成二维多图
> head(mpg) manufacturer model displ year cyl trans drv cty hwy fl class1 audi a4 1.8 1999 4 auto(l5) f 18 29 p compact2 audi a4 1.8 1999 4 manual(m5) f 21 29 p compact3 audi a4 2.0 2008 4 manual(m6) f 20 31 p compact4 audi a4 2.0 2008 4 auto(av) f 21 30 p compact5 audi a4 2.8 1999 6 auto(l5) f 16 26 p compact6 audi a4 2.8 1999 6 manual(m5) f 18 26 p compact> tail(mpg) manufacturer model displ year cyl trans drv cty hwy fl class229 volkswagen passat 1.8 1999 4 auto(l5) f 18 29 p midsize230 volkswagen passat 2.0 2008 4 auto(s6) f 19 28 p midsize231 volkswagen passat 2.0 2008 4 manual(m6) f 21 29 p midsize232 volkswagen passat 2.8 1999 6 auto(l5) f 16 26 p midsize233 volkswagen passat 2.8 1999 6 manual(m5) f 18 26 p midsize234 volkswagen passat 3.6 2008 6 auto(s6) f 17 26 p midsize
p + facet_grid(. ~ cyl)#将cyl维度拆分成:左右多图
p + facet_grid(cyl~.)#将cyl维度拆分成:上下多图
p + facet_grid(drv ~ .)#将drv维度拆分成:上下多图
p + facet_grid(drv ~ cyl)#将drv和cyl拆分成二维多图
一个维度的多角度对比分析
dts <- as.Date("20050101", '%Y%m%d') + seq(0,1000,15)A <- data.frame( Dates = dts, Gas = 4000 + cumsum(abs( rnorm(length(dts), 100, 30))))head(A)A <- transform( A, Year = format(Dates, '%Y'), DayOfYear = as.numeric( format(Dates, '%j')), GasDiff = c(diff( Gas ),NA))head(A)require(ggplot2)ggplot(A, aes(Dates, GasDiff)) + geom_line( aes(colour = Year))#不同的年份不同的颜色ggplot(A, aes(DayOfYear, GasDiff)) + geom_line( ) + facet_grid(Year ~ .)#不同的年份不同的图框(上下放置)ggplot(A, aes(DayOfYear, GasDiff)) + geom_line( aes(colour = Year) )#不同的年份不同颜色(不拆分图框)ggplot(A, aes(DayOfYear, GasDiff)) + geom_line( aes(colour = Year) ) + geom_point( aes(shape = Year))#不同的年份不同颜色(不拆分图框)
> head(A) Dates Gas1 2005-01-01 4149.1302 2005-01-16 4285.9293 2005-01-31 4371.8984 2005-02-15 4451.5515 2005-03-02 4602.4436 2005-03-17 4748.729> A <- transform( A, + Year = format(Dates, '%Y'),+ DayOfYear = as.numeric( format(Dates, '%j')),+ .... [TRUNCATED] > head(A) Dates Gas Year DayOfYear GasDiff1 2005-01-01 4149.130 2005 1 136.799452 2005-01-16 4285.929 2005 16 85.968833 2005-01-31 4371.898 2005 31 79.653074 2005-02-15 4451.551 2005 46 150.892075 2005-03-02 4602.443 2005 61 146.285416 2005-03-17 4748.729 2005 76 106.43583ggplot(A, aes(Dates, GasDiff)) + geom_line( aes(colour = Year))#不同的年份不同的颜色
ggplot(A, aes(DayOfYear, GasDiff)) + geom_line( ) + facet_grid(Year ~ .)#不同的年份不同的图框(上下放置)
ggplot(A, aes(DayOfYear, GasDiff)) + geom_line( aes(colour = Year) )#不同的年份不同颜色(不拆分图框)
ggplot(A, aes(DayOfYear, GasDiff)) + geom_line( aes(colour = Year) ) + geom_point( aes(shape = Year))#不同的年份不同颜色(不拆分图框)
参考:https://www.plob.org/article/7264.html
阅读全文
0 0
- R实战:【绘图】ggplot2[多维度分析神器]
- R实战:【绘图】ggplot2多维度分析(分面)
- R-ggplot2绘图学习
- R可视化绘图二-ggplot2
- R语言 绘图 (ggplot2)
- R语言绘图实战:RDA冗余分析
- R语言之ggplot2绘图序列一
- R可视化绘图一ggplot2之qplot
- R语言ggplot2绘图——柱状图
- R语言绘图之ggplot2包
- R语言ggplot2绘图教程——Pathway富集分析气泡图
- R语言实战 ggplot2包的应用
- R ggplot2
- R实战:【绘图】基础部分
- ggplot2--绘图基础
- R实战:【绘图】R中的颜色Chart of R Colors
- 慕课—R语言之数据可视化—学习笔记 3.6ggplot2绘图系统
- 慕课—R语言之数据可视化—学习笔记 3.6ggplot2绘图系统(中)
- 面向对象的第一个特征:封装III
- 我与CSDN的第一次
- sources code does not match the bytecode
- HTML鼠标移到导航上面时当前的LI变色
- 折半查找法
- R实战:【绘图】ggplot2[多维度分析神器]
- Java 中的双重检查(Double-Check)
- matlab 绘制分类面
- 【计划】游戏试玩和分析栏目的计划
- 输入输出流的问题
- AngularJS如何与后台服务器进行交互
- 国家信息化体系六要素
- chrome ajax请求报错403解决
- openstack-neutron-ML2