ggplot2包学习笔记
一、qplot函数使用
qplot(x=…,y=…,data=…,shape=…,colour=…,size=…,alpha=…,geom=…,facets=…,xlim=c(),ylim=c(),log=””,main=””,xlab=””,ylab=””)
参数介绍:
shape:为数据集data中的分类变量,即为因子
colour:为数据集data中的分类变量,即为因子
size:使用I(num)形式调用,比如I(2)即可改变散点大小
alpha图形属性:其取值从0(完全透明)到1(完全不透明),透明度通常用分数表示,如:1/19,1/50,分母上的数字表示经过多少次重叠之后颜色将变得不透明。
geom几何对象:
二维变量关系:
geom=”point” 绘制散点图,这是当你指定了x,y,data参数时,qplot函数的默认设置
gemo=”smooth” 拟合一条平滑曲线,并在图中展示曲线和标准误
geom=”boxplot” 绘制箱线胡须图
geom=”path” 和geom=”line ”:可以在散点之间绘制连线,
一维变量:
连续性变量:
geom=”histogram” 绘制直方图,在画直方图时,使用bins参数可以调整组数,
binwidth可以调整组距,使用fill=参数可以显示在条线图每组中不同分组中的数量
情况
geom=”freqpoly”绘制频率多边形
geom=”density” 绘制密度曲线,使用colour=…参数可以画出多条由colour为分组依据的密度图
离散型变量:
geom=”bar” 绘制条形图,使用weight=…参数
分面操作:facets=var1~var2,或者facets=var1~. ,
如果想要纵坐标显示密度而不是数量 ,可以添加参数..density.. ,
二、ggplot2语法
图像属性:坐标,颜色,形状,大小
标度变换:把数值的数据单位转换为电脑可以识别的物理单位(如像素和颜色)
图层:
数据,映射,统计变换,几何形状和位置调整共同组成了一个图层
一个图形可以包括很多图层。
一个由图层语法所定义的图由以下几部分组成:
--一个数据集和一组变量到图形属性的映射
--一个或者多个图层
每个图层都是由几何对象,统计变换,位置调整组成
--标度,每个图形属性都对应一个标度
--分面设定
option组件:
p<-qplot(displ,hwy,data=mpg,colour=factor(cyl))
summary(p)
save(p,file=”plot.rdata”)
load(“plot.rdata”)
ggsave(“plot.rdata”,width=5,height=5)
三、使用图层构建图像
#创建绘图对象
p<-ggplot(diamonds,aes(x=carat))
##使用+添加图层
p<-p+layer(
geom="bar",
stat="bin",
params = list(fill="steelblue",bins=30),
position = "identity")
##查看图形
p
使用快捷函数添加图层
由上述图层构建图像的案例可以知道:在创建绘图对象之后,我们想要看到图像就要添加图层。在图层中,我们要设定stat和geom参数。每一个几何对象都对应着一个默认的统计变换和位置参数。每一个统计变换都对应着一个默认的几何对象参数。所以对于图层我们只需要设定stat或geom参数即可。
p <- p + geom_histogram(binwidth = 2, fill = “steelblue)
这类快捷函数的格式为:
geom_XXX(mapping, data, …, stat, position)
stat_XXX(mapping, data, …, geom, position)
mapping:可选,一组图形属性映射,通过aes()函数设定
data:可选,它会修改默认的数据集。大部分情况下该参数被省略,默认数据集将被调用。
… : geom或stat的参数。
geom或者stat:可选,可以修改geom默认的为stat值,或者stat所默认的geom值。
position:可选,调整对象重合的方式。
图层可以被添加到ggplot()或qplot()创建的图像之上。
图形属性映射:
aes()函数用来将数据变量映射到图形中,从而使变量成为可以被感知的图形属性。
aes(x = , y = , color = ,)
如果要删除图形属性映射,只需要将属性复制为NULL
设定和映射:
除了可以将一个图形属性映射到一个变量,你也可以在图层参数中将其设定为一个单一的值,比如geom_point(color = “red”),也可以用geom_point(color = I(“red”))
分组:
在ggplot2里面,几何对象大致可以分为个体几何对象和群组几何对象两大类。个体几何对象对数据框的每一条数据可以绘制一个可以区别其他个体的图形对象。比如点集合对象 。而群组几何对象用来表示多条观测,他可以是某个统计摘要的一个结果,或者是几何对象的基础展示。例如多边形。线条和路径介于这两者之间:每条线都由许多线段组成,而每条线段有代表两个点。
单图形属性分组
可以通过讲变量赋值给group属性即可
p <- ggplot(Oxboys, aes(age, height, group = Subject)) + geom_line()
不同图层上的不同分组
我们想要使用所有的数据基于lm方法绘制一条平滑曲线
p <- p + geom_smooth(aes(group = 1), method = "lm",size = 2, se = F)
修改默认分组:
绘制各个时期身高的箱线图
boysbox <- ggplot(Oxboys, aes(Occasion, height)) + geom_boxplot()
在此基础上添加个体轨迹:
boysbox <- boysbox + geom_line(aes(group = Subject), color = “red”)
匹配图形属性和图形对象
集合对象:
统计变换:
一个统计变换必须是位置尺度不变量,即f(x+a)=f(x) +a,f(bx)=bf(x)。
ggplot(diamonds, aes(x = carat)) + geom_histogram(aes(y = ..density..), binwidth = 0.1)
生成的变量必须用..围起来。
位置调整:
所谓位置调整,即对该层中的元素位置进行微调。
堆叠、填充和并列
ggplot(diamonds, aes(clarity)) + geom_bar(aes(colour =cut),position = "dodge")
ggplot(diamonds, aes(clarity)) + geom_bar(aes(colour =cut),position = "stack")
ggplot(diamonds, aes(clarity)) + geom_bar(aes(colour =cut),position = "fill")
ggplot(diamonds, aes(clarity,fill = color)) + geom_bar(position = "fill")
整合:
结合几何对象和统计变换
改变图形和数据集:
工具箱
基本的图形类型
这些几何对象都是二维的,故x和y两种图形属性是不可或缺的。同时,他们还可以接受colour和size两种属性。另外,填充型几何对象(条形、瓦片和多边形)还可接受fill图形属性。点可以接受shape属性。线和路径可以接受linetype属性。
geom_area()
geom_bar(stat = “identity”)
geom_line()/geom_path()
geom_point()
geom_ploygon()
geom_text()
geom_tile()
df <- data.frame(
x = c(3,1,5),
y = c(2,4,6),
label = c("a", "b", "c"))
p <- ggplot(df, aes(x,y)) + xlab(NULL) +ylab(NULL)
p + geom_point() + labs(title = "geom_point")
p+geom_bar(stat = "identity")+labs(title = "geom_bar")
p+geom_line()+labs(title = "geom_bar")
p+geom_area()+labs(title = "geom_area")
p+geom_path()+labs(title = "geom_path")
p+geom_text(aes(label = label))+labs(title = "geom_text")
p+geom_tile() +labs(title = "geom_tile")
p+geom_polygon() +labs(title = "geom_polygon")
展示数据分布:
一维连续型分布:
depth_dist + geom_histogram(aes(y = ..density..), binwidth = 0.1) + facet_grid(cut ~ .)
depth_dist + geom_histogram(aes(fill = cut), binwidth = 0.1, position = "fill")
depth_dist + geom_freqpoly(aes(y = ..density.., color = cut), binwidth = 0.1)
qplot(cut, depth, data = diamonds, geom = "boxplot") | |
|
library(plyr)
qplot(carat, depth, data = diamonds, geom = "boxplot", group = round_any(carat, 0.1, floor), xlim = c(0, 3)
二维连续型分布
qplot(depth, data = diamonds, geom = "density", fill = cut, alpha = I(0.2))
处理遮盖问题
小规模的遮盖绘制问题可以通过绘制更小的点或使用中空符号来解决。
df <- data.frame(x = rnorm(2000), y = rnorm(2000))
nrom <- ggplot2::ggplot(df, aes(x, y))
nrom + geom_point()
nrom + geom_point(shape = 1)
nrom + geom_point(shape = ".") ##点的大小为像素级
对于更大数据集产生的遮盖绘制问题,我们可以使用alpha混合(调整透明度)让点呈现透明效果
nrom + geom_point(colour = "black", alpha = 1/3)
若数据存在一定的离散型:
曲面图:
绘制地图:
library(maps)
library(ggplot2)
data(us.cities)
big_cities <- subset(us.cities, pop > 500000)
qplot(long, lat, data = big_cities) + borders("state", size = 0.5)
tx_cities <- subset(us.cities, country.etc == "TX")
ggplot(tx_cities, aes(long, lat)) + borders("county", "texas", colour = "grey70") +
geom_point(colour = "black", alpha = 0.5)
等值线图:
揭示不确定性:
统计摘要:
添加图形注解:
unemp <- qplot(date, unemploy, data = economics, geom = "line", xlab = "", ylab = "No. unemployed (1000s)")
添加参考线:
unemp + geom_vline(xintercept = as.numeric(presidential$start),data = presidential)
xintercept 指定垂直参考线的位置
划分区间并填充颜色:
> library(scales)
> unemp + geom_rect(aes(NULL, NULL, xmin = presidential$start, xmax = presidential$end, fill = party), ymin = yrng[1], ymax = yrng[2], data = presidential, alpha = 0.2) + scale_fill_manual(values = c("blue", "red"))
在映射中mapping = aes()必须指定x,y,xmin,xmax,ymin,ymax,fill和alpha。xmin和xmax将x轴划分为区间间隔,同理ymin和ymax也是将y轴划分为区间间隔。fill将间隔填充为相应的颜色。alpha必须设置,否则我们只能看到不同颜色的带状图,而qplot创建的图像将被geom_rect掩盖。
在指定位置添加文字注释:
last_plot() + geom_text(mapping = aes(x = presidential$start, y = yrng[1], label = name), data = presidential, size = 3,hjust = 0, vjust = 0)
aes中x,y指定了文字注释的位置,label指定了注释的内容。hjust和vjust参数可以调整文字注释的位置。
添加指定的点:
> highest <- subset(economics, unemploy == max(unemploy)) > unemp + geom_point(data = highest, size = 3, colour = "red", alpha = 0.5) | |
|
含权数据:
qplot(percwhite, percbelowpoverty, data = midwest)
qplot(percwhite, percbelowpoverty, data = midwest, size = poptotal / 1e6) +scale_size_area("Population\n(millions)", breaks = c(0.5, 1, 2, 4))
lm_smooth <- geom_smooth(method = lm, size = 1)
qplot(percwhite, percbelowpoverty, data = midwest) + lm_smooth
qplot(percwhite, percbelowpoverty, data = midwest, weight = popdensity, size = popdensity) + lm_smooth
qplot(percbelowpoverty, data = midwest, binwidth = 1)
qplot(percbelowpoverty, data = midwest,weight = poptotal, binwidth = 1) + ylab("Population")