ggplot2中qplot的用法

简介

本章所用的数据集为ggplot2包中的diamonds数据集,这一章主要涉及qplot的用法,qplot的意思是quick plot,即快速制图。

基本用法

library(ggplot2)
head(diamonds) #
 查看数据集前5

## carat cut color clarity depth table price x y z
## 1 0.23 Ideal E SI2 61.5 55 326 3.95 3.98 2.43
## 2 0.21 Premium E SI1 59.8 61 326 3.89 3.84 2.31
## 3 0.23 Good E VS1 56.9 65 327 4.05 4.07 2.31
## 4 0.29 Premium I VS2 62.4 58 334 4.20 4.23 2.63
## 5 0.31 Good J SI2 63.3 58 335 4.34 4.35 2.75
## 6 0.24 Very Good J VVS2 62.8 57 336 3.94 3.96 2.48

set.seed(1000# 设置随机种子,这个数据不固定,随便设,方便重复
dsmall <- diamonds[sample(nrow(diamonds),100),] # nrow(diamonds)
表示diamonds这个数据集的行数,sample(x,100)表示从x中随机取100个样本
str(dsmall) #
 查看数据结构

## 'data.frame': 100 obs. of 10 variables:
## $ carat : num 1.23 0.3 0.9 0.31 0.31 1.01 0.5 0.34 0.92 1.01 ...
## $ cut : Ord.factor w/ 5 levels "Fair"<"Good"<..: 5 5 2 5 5 5 1 5 5 2 ...
## $ color : Ord.factor w/ 7 levels "D"<"E"<"F"<"G"<..: 5 2 5 4 4 3 2 5 1 2 ...
## $ clarity: Ord.factor w/ 8 levels "I1"<"SI2"<"SI1"<..: 4 3 4 7 4 1 3 5 2 3 ...
## $ depth : num 62.2 61.7 61.9 62.8 61.5 62.2 66.5 62.1 61.9 58.1 ...
## $ table : num 55 58 58 57 56 54 58 57 55 59 ...
## $ price : int 7130 499 3989 977 652 3439 1098 765 5051 5627 ...
## $ x : num 6.81 4.29 6.14 4.33 4.34 6.44 4.87 4.51 6.24 6.57 ...
## $ y : num 6.85 4.3 6.18 4.3 4.36 6.42 4.9 4.48 6.27 6.65 ...
## $ z : num 4.25 2.65 3.81 2.71 2.68 4 3.25 2.79 3.87 3.84 ...

qplot(carat,price,data = diamonds) # 绘制价格(price)与克拉(carat)的散点图

qplot(log(carat),log(price),data = diamonds) # 对价格(price)与克拉(carat)做对数变换后的散点图

qplot(carat, x*y*z, data = diamonds) # 对克拉(carat)与体积(x*y*z)做散点图

分类变量对应的颜色、大小、形状等属性

qplot中有各种表示分类变量的属性,例如颜色,大小等。可以将数据集中的分类变量与之相应匹配。

str(dsmall) # 再查看一下数据结构

## 'data.frame': 100 obs. of 10 variables:
## $ carat : num 1.23 0.3 0.9 0.31 0.31 1.01 0.5 0.34 0.92 1.01 ...
## $ cut : Ord.factor w/ 5 levels "Fair"<"Good"<..: 5 5 2 5 5 5 1 5 5 2 ...
## $ color : Ord.factor w/ 7 levels "D"<"E"<"F"<"G"<..: 5 2 5 4 4 3 2 5 1 2 ...
## $ clarity: Ord.factor w/ 8 levels "I1"<"SI2"<"SI1"<..: 4 3 4 7 4 1 3 5 2 3 ...
## $ depth : num 62.2 61.7 61.9 62.8 61.5 62.2 66.5 62.1 61.9 58.1 ...
## $ table : num 55 58 58 57 56 54 58 57 55 59 ...
## $ price : int 7130 499 3989 977 652 3439 1098 765 5051 5627 ...
## $ x : num 6.81 4.29 6.14 4.33 4.34 6.44 4.87 4.51 6.24 6.57 ...
## $ y : num 6.85 4.3 6.18 4.3 4.36 6.42 4.9 4.48 6.27 6.65 ...
## $ z : num 4.25 2.65 3.81 2.71 2.68 4 3.25 2.79 3.87 3.84 ...

可以发现,color是因子类型的,可以用"颜色"属性将其区别开:

qplot(carat, price, data = dsmall, colour = color)

qplot(carat, price, data = dsmall, colour = color)这条命令就表示用颜色属性将数据集中的颜色分类区别开,再看一个例子,用形状将切工(cut)类型区别开:

qplot(carat, price, data = dsmall, shape = cut)

其实,也可以用颜色将切工(cut)区别开:

qplot(carat, price, data = dsmall, colour = cut)

原理都一样,即一个数据集中的分类变量可以对应qplot中相应的分类属性(例如颜色是可以区分的,形状也可以是区分的,这些都能代表一种分类)。

图形透明度

可以用I()来控制图形的透明度,可以看以下例子:

# install.packages("gridExtra") # 要用到grid.arrange()这个函数,需要安装这个包
library(gridExtra)

## Loading required package: grid

x1 <- qplot(carat, price, data = diamonds, alpha = I(1/10))
#alpha= I(1/10)
用于控制透明度,ggplot2_2_6
x2 <- qplot(carat, price, data = diamonds, alpha = I(1/100))
x3 <- qplot(carat, price, data = diamonds, alpha = I(1/200))
x4 <- qplot(carat, price, data = diamonds, alpha = I(1/400))
grid.arrange(x1, x2, x3,x4)

几何对象

这一部分用前面的dsmall数据集。

qplot(carat, price, data = dsmall) # 简单的散点图 

接着,在简单的散点图上加上平滑曲线:

qplot(carat, price, data = dsmall, geom = c("point""smooth")) # 简单的散点图加上了平滑曲线,geom = c("point", "smooth")表示将pointssmooth连接起来

换成原始数据集diamonds的效果:

qplot(carat, price, data = diamonds, geom = c("point""smooth"))

在取消了误差范围时的平滑曲线:

qplot(carat, price, data = dsmall, se=FALSE,geom = c("point""smooth"))

在添加曲线时,还有其他的参数可以使用,method="loess",当n比较小时是默认选项,用局部回归的方法。曲线的平滑程度由span控制,范围是[0,1],如下所示:

p1 <- qplot(carat, price, data = dsmall, geom = c("point""smooth"), span =0)
p2 <- qplot(carat, price, data = dsmall, geom = c("point""smooth"), span =0.2)
p3 <- qplot(carat, price, data = dsmall, geom = c("point""smooth"), span =0.6)
p4 <- qplot(carat, price, data = dsmall, geom = c("point""smooth"), span =1)
grid.arrange(p1,p2,p3,p4)

箱线图与扰动点图

扰动点图

j1 <- qplot(color, price/carat, data = diamonds, geom = "jitter"alpha =I(1/5))
# geom
为设定图形类型,jitter为扰动点图,ggplot2_2_18
# jitter
是绘图扰动图的参数,alpha = I(1/5)用于控制透明度
j2 <- qplot(color, price/carat, data = diamonds, geom = "jitter"alpha =I(1/50))
j3 <- qplot(color, price/carat, data = diamonds, geom = "jitter"alpha =I(1/200))
j4 <- qplot(color, price/carat, data = diamonds, geom = "boxplot"alpha =I(1/5))
grid.arrange(j1,j2,j3,j4)

直方图与密度曲线图

h1 <- qplot(carat, data = diamonds, geom = "histogram")+xlab("直方图")
#
直方图

h2 <- qplot(carat, data = diamonds, geom = "density")+xlab("
密度曲线图")
#
密度曲线图 
h3 <- qplot(carat, data = diamonds, geom = "density",adjust = 1)+xlab("
密度曲线图adjust = 1")
#adjust
控制曲线的平滑程度,数值越大,越平滑,默认为1
h4 <- qplot(carat, data = diamonds, geom = "density",adjust = 2)+xlab("
密度曲线图adjust = 2")ust控制曲线的平滑程度,数值越大,越平滑
grid.arrange(h1,h2,h3,h4)

可以通过改变组距的方式来调节图形的平滑度,参数为binwidth:

d1 <- qplot(carat, data = diamonds, geom = "histogram"binwidth = 1xlim =c(0,3))
d2 <- qplot(carat, data = diamonds, geom = "histogram"binwidth = 0.1xlim = c(0,3))
d3 <- qplot(carat, data = diamonds, geom = "histogram"binwidth = 0.01,xlim = c(0,3))
grid.arrange(d1,d2,d3,ncol=3, nrow=1)

分类变量映射到图形属性中的结果:

qplot(carat, data = diamonds, geom = "density"colour = color )

#colour把分类变量映射到颜色属性上
qplot(carat, data = diamonds, geom = "histogram"fill = color)

# color变量映射到填充属性上:

条形图:

qplot(color, data = diamonds, geom = "bar"# 只计算各种颜色的数量,注y轴的标签

以颜色为x轴,以克拉数为y轴绘制图形:

qplot(color, data = diamonds, geom = "bar"weight = carat)+scale_y_continuous("carat")

#weight为加权平均值,scale_y_continuous("carat")表示y轴是连续型变量 

时间序列中的线条图和路径图

economics数据集为例演示,此数据集包含了美国过去1967-2007年间的数据,如下所示:

head(economics)

## date pce pop psavert uempmed unemploy
## 1 1967-06-30 507.8 198712 9.8 4.5 2944
## 2 1967-07-31 510.9 198911 9.8 4.7 2945
## 3 1967-08-31 516.7 199113 9.0 4.6 2958
## 4 1967-09-30 513.3 199311 9.8 4.9 3143
## 5 1967-10-31 518.5 199498 9.7 4.7 3066
## 6 1967-11-30 526.2 199657 9.4 4.8 3018

date是时间,uempmed是失业星期数的中位数,unemploy是失业人数,pop是人数(不清楚单位)

第一张图:失业率随时间的变化:

qplot(date, unemploy/pop, data = economics, geom = "line")

第二张图:失业星期数的中位数随时间的变化:

qplot(date, uempmed, data = economics, geom = "line")

加入时间变量后的图形:

year <- function(x) as.POSIXlt(x)$year + 1900
qplot(unemploy /
 pop, uempmed, data = economics, geom = c("point""path"))

qplot(unemploy / pop, uempmed, data = economics, geom = "path"colour =year(date))

qplot(unemploy / pop, uempmed, data = economics, geom = c("point""path"),colour = year(date))

解释一下:

  1. 在上面的一段命令中,as.POSIXlt()表示的是以1900年为界,将日期类型的数据转化为POSIXlt格式,as.POSIXlt(x)$year是将其中的年份减去1900后剩余的,因此,第一行要加一个1900,其中数据后面带CST,意思是标准时间。第一行构建了一个函数,这个函数的意思是提取日期类型中的年。
  2. 第二行命令,是以失业率为x轴,失业星期数的中位数为y轴绘图,并且将其中的点用路径连接起来,因此用到的参数是geom = c("point", "path")
  3. 第三行命令,区别是加了colour = year(date),意思是把年份变量映射到颜色上。
  4. 第四行命令,与第三行的区别是去掉了点,只要路径。

分面

qplot(carat, data = diamonds, facets = color ~ ., geom = "histogram",binwidth = 0.1xlim = c(0,3))#ggplot2_2_37,facets = color ~ . 以颜色为条件的直方图

上面命令表示,以克拉(carat)x轴,以颜色(color)为分面的参数,即把不同的颜色放到不同的直方图中,用到的参数为facets = color~.,其中的最小组距设置为0.1,即binwidth=0.1x轴的范围为[0,3]

另外的例子:

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

这个例子与第一个不同之处于在用到了..density..(注意前后有两点半角逗号),表示ggplot2把密度(上一个例子是频数)映射到y轴。

分面的其他选项

这一部分涉及到图形的一些外观参数,与plot()函数中的类似,有xlim,ylim,log,main,xlab,ylab 1个例子:基础

qplot(
carat, price, data = dsmall, #
 用到的数据集是dsmall,以pricex轴,以caraty轴绘图
xlab = "Price ($)"ylab = "Weight(carat)",
 # x轴的标签是Price ($),y轴的标签是Weight(carat)
main = "Price-weight relationship"
 # 标题是Price-weight relationship
)

2个例子:用到了数学表达式

qplot(
carat, price/carat, data = dsmall,
ylab = expression(frac(price, carat)),
 # 用到了数学表达式ylab = expression_r(frac(price, carat))表示y轴的标签是个分数,分母是carat,分子是price
xlab = "Weight(carats)",
main = "Small diamonds",
xlim = c(0.21)
)

## Warning in loop_apply(n, do.ply): Removed 27 rows containing missing
## values (geom_point).

3个例子:取对数

qplot(carat, price, data = dsmall,log="xy") #log="x"表示对x轴取对数,log="xy"表示对x轴和y轴都取对数

#log = "xy"表示对xy轴都取对数

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值