ggplot2作图详解3:映射(mapping)

作图前的数据准备工作不仅仅指原始数据的收集,还包括数据外观的整理,这些工作对后续的作图无疑十分重要。和其他作图方法相比,ggplot2的优点之一就是把数据整理融合到了作图过程中,替用户分担了数据整型的部分工作。ggplot2数据层面的操作包括映射和分面。先说映射。

1 映射的类型

前面我们已经了解到ggplot对象的data项存储了整个数据框的内容,而“映射”则确定如何使用这些数据。

ggplot2按照图形属性提供了以下可用映射类型:

  • 颜色类型映射:包括 color(颜色或边框颜色)、fill(填充颜色)和 alpha(透明度)
  • 形状类型映射:包括 linetype(线型)、size(点的大小或线的宽度)和 shape(形状)
  • 位置类型映射:包括 x, y, xmin, xmax, ymin, ymax, xend, yend
  • 特殊类型:包括两类,一类是指定数据分组和顺序的映射group和order,另一类是字符串映射。

前两种类型是经典的美学属性映射,第三类的x和y映射也常规,第四类很特别,尤其是字符串映射,很另类,其他类型的映射都可以用aes函数指定,但H.W.为字符串映射专门造了个函数:aes_string。不知道他对字符串特别关照还是实在想不出其他解决方案。

2 颜色和形状类型映射

规律性的东西简单轻松,大家都喜欢;而到处暗藏潜规则、充斥着特例的东西(比如plotrix、perl和中国社会)很杂碎很累人,当然也很让人烦躁和讨厌。ggplot2中颜色和形状这两类映射最符合台面规则的,即:把数据框的变量和图形的美学属性对应起来。

2.1 映射的过程

先看下面ggplot2的数据diamonds:

library(ggplot2)
set.seed(100)
d.sub <- diamonds[sample(nrow(diamonds), 500), ]
head(d.sub, 4)
##       carat       cut color clarity depth table price    x    y    z
## 16601  1.01 Very Good     D     SI1  62.1    59  6630 6.37 6.41 3.97
## 13899  0.90     Ideal     D     SI1  62.4    55  5656 6.15 6.19 3.85
## 29792  0.30     Ideal     D     SI1  61.6    56   709 4.34 4.30 2.66
## 3042   0.30 Very Good     G     VS1  62.0    60   565 4.27 4.31 2.66

作图首先要指定x和y数据,即建立数据框变量和x/y之间的映射:

p  <- ggplot(data=d.sub, aes(x=carat, y=price))

作出散点图:

theme_set(theme_bw())
p  + geom_point()

如果还要建立其他映射,比如用钻石颜色(color)分类数据确定点的颜色,图形外观就会发生变化(为方便说明,先去掉图例):

p  + geom_point() + aes(color=color) + theme(legend.position=c(2,2))

ggplot2映射的过程可以用plot函数作图步骤进行分解,它包含三方面的操作(不包括图形页面设置):

  • 数据分组
  • 设定颜色标尺
  • 按颜色标尺指定每组数据的颜色

# 设定颜色标尺
levs  <- levels(d.sub$color)
cl  <-  rainbow(length(levs))
# 页面设置
par(mar=c(3,3,0.5,0.5), mgp=c(1.5, 0.5, 0), bg="white")
plot(d.sub$carat, d.sub$price, type='n', xlab="carat", ylab="price")
i  <- 1
for(lev in levs){
        
  # 数据分组
  datax  <- d.sub[d.sub$color==lev, ]
  # 作图并指定数据点颜色
  points(datax$carat, datax$price, pch
  • 3
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值