《ggplot2:数据分析与图形艺术》--学习笔记10

减少重复性工作

主要介绍三种减少重复性工作的方法。

迭代

ggplot2会将你最后一次绘制或者修改的图形储存下来,输入last_plot()即可获取该图形。

将感兴趣的图形区域逐步放大

qplot(x,y,data = diamonds,na.rm = T)
last_plot() + xlim(3,11) + ylim(3,11)
last_plot() + xlim(4,10) + ylim(4,10)
last_plot() + xlim(4,5)  + ylim(4,5)
last_plot() + xlim(4,4.5)  + ylim(4,4.5)
last_plot() + geom_abline(colour = "red")

在这里插入图片描述

当不断放大图形时,交互地使用last_plot()可以快速有效地找到最佳视图。最后一张图上添加了一条截距为0斜率为1的直线。

绘图模板

ggplot2 图形的每一个组件都是一个对象:可以被创建、存储并独立应用于某个图形中。鉴于此,我们可以创建可重用的组件来自动执行某些常用的任务,从而不用多次重复输入冗长的函数。

gradient_rb <- scale_colour_gradient(low = "red",high = "blue")
p1 <- qplot(cty,hwy,data = mpg,colour=displ) + gradient_rb
p2 <- qplot(bodywt,brainwt,data = msleep,colour=awake,log="xy") +
  gradient_rb

在这里插入图片描述将标度存储于某一变量中可供很多图形便捷地调用。对图层和分面也可进行类似地操作。

同存储单个对象一样,也可以将ggplot2中的组件存储为list。

xquiet <- scale_x_continuous("",breaks = NULL)
yquiet <- scale_y_continuous("",breaks = NULL)
quiet <- list(xquiet,yquiet)
p1 <- qplot(mpg,wt,data = mtcars) + quiet
p2 <- qplot(displ,cty,data = mpg) + quiet

在这里插入图片描述类似地,创建一个改变图层默认设置的函数也很简单。例如,想要创建一个在图形中添加线性模型的函数。

geom_lm <- function(formula= y~x){
  geom_smooth(formula = formula,se=F,method = "lm")
}
p1 <- qplot(mpg,wt,data = mtcars) + geom_lm()
library(splines)
p2 <- qplot(mpg,wt,data = mtcars) + geom_lm(y~ns(x,3))

在这里插入图片描述

绘图函数

需要考虑的问题

  • 由于是在函数的环境中创建图形,因此以数据框的格式向ggplot()传递参数时需要格外小心。还需确保没有在图形属性映射中误用了任何函数的局部变量。
  • 若允许用户向图形属性映射中提供自定义变量,建议使用aes_string()。aes_string(“cty”,colour = “hwy”)与aes(cty,colour= hwy)的功能是一样的。
  • 因该把绘图代码切分为两个函数,一个做数据变换和处理,另一个绘图。
library(reshape2)
library(plyr)

range01 <- function(x){
  rng = range(x,na.rm = T)
  (x - rng[1])/diff(rng)
 }
range01(c(1,2,3,4))

pcp_data <- function(df){
  numeric <- laply(df,is.numeric)
  ## 每一列的数值调整到相同的范围
  df[numeric] <- colwise(range01)(df[numeric])
  ## 行名作为识别信息
  df$.row <- rownames(df)
  ## Melt 将非数值变量作为id.vars
  dfm <- melt(df,id=c((names(df)[!numeric])))
  ## 给数据框添加pcp类
  class(dfm) <- c("pcp",class(dfm))
  dfm
}

pcp <- function(df,...){
  df <- pcp_data(df)
  ggplot(df,aes(variable,value)) + geom_line(aes(group = .row))
}

pcp(mpg) ## 绘制平行坐标图

在这里插入图片描述
绘制平行坐标图并以不同颜色来区分类别(以drv划分)。

pcp(mpg) + aes(colour = drv)

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Zh_X_Z

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值