【R语言学习系列2】-提高篇

R语言的一大优势就是特别适合统计分析,然后作图忒别好看而且灵活,所以本提高篇主要介绍利用ggplot这个包来进行数据的展示

一 ggplot环境安装与导入

  1. 下载安装ggplot2包
install.packages("ggplot2")

然后选择一个镜像就可以开始下载并安装了
2.导入包,然后就可以调用ggplot包中的数据

library(ggplot2)

二. 快速开始qplot

  1. 数据集
diamonds # 在引入ggplot2这个库之后就可以直接用
head(diamonds)
summary(diamonds)

set.seed(1410) ##让样本可重复
dsmall <- diamonds[sample(nrow(diamonds),100),] # 获得100条随机样本
  1. qplot简单绘图
# 第一个参数是x,第二个参数是y,
qplot(carat,price,data = diamonds)
qplot(carat,x*y*z,data = diamonds)
qplot(log(carat),log(carat),data = diamonds)

# 用dsmall做为数据集
qplot(carat,price,data = dsmall)
qplot(carat,price,data = dsmall,color = color)
qplot(carat,price,data = dsmall,shape = cut)

# 半透明属性,分母表示经过多少次重叠之后颜色将变得不再透明,可以查看数据主要在哪一部分进行重叠
qplot(carat,price,data = diamonds,alpha=I(1/10))
qplot(carat,price,data = diamonds,alpha=I(1/100))

# 不同类型的变量有不同适应的图形类型,比如说颜色和形状就适合于分类变量,而大小就适合于连续变量
  1. qplot中级绘图
    通过设置参数几何对象(geom)可以画出不同类型的各种图形。对于二维变量可以查看以下选项
    1. geom = "point" 绘制散点图,默认参数
    2. geom = "smooth" 将拟合一条平滑曲线,并将曲线和标准误差展示在图中
    3. geom = "boxplot" 可以绘制箱线胡须图,用以概括一系列点的分布情况
    4. geom = "path"和geom = "line"可以在数据之间绘制连线
      对于一维分布
    5. 对于连续变量,geom=“histogram”绘制直方图,geom=“freqpoly”绘制频率多边形,geom = "density"绘制密度曲线。
    6. 对于离散变量,geom = "bar"绘制条形图
# 可以利用c()函数将多个几何对象组成一个向量传给geom,几何对象会按照指定的顺序进行堆叠
qplot(carat,price,data = dsmall,geom=c("point","smooth"))
qplot(carat,price,data = diamonds,geom=c("point","smooth"))

# 当数据量较小拟合的时候采用的方法是loess,span决定曲线的平滑程度0(很不平滑) 1(很平滑)
qplot(carat,price,data = dsmall,geom=c("point","smooth"),method='loess',span=0.2)
qplot(carat,price,data = dsmall,geom=c("point","smooth"),method='loess',span=1)

# 当数据量比较大的时候,使用method = "gam",formula = y ~s(x,bs="cs")来调用mgcv包拟合一个广义可加模型
library(mgcv)

# 说实话,我感觉好像变化不大,可能需要进一步了解。
qplot(carat,price,data=diamonds,geom =c("point","smooth"),method ="gam",formula = y~s(x))

qplot(carat,price,data=diamonds,geom =c("point","smooth"),method ="gam",formula = y~s(x,bs="cs"))

# 扰动点图
qplot(color,price/carat,data=diamonds,geom="jitter",alpha=I(1/5))
qplot(color,price/carat,data=diamonds,geom="jitter",alpha=I(1/10))

# 箱线图
 qplot(color,price/carat,data=diamonds,geom="boxplot",alpha=I(1/5))

#直方图
qplot(carat,data = diamonds,geom="histogram")
qplot(carat,data = diamonds,geom="histogram",binwidth =0.01,xlim = c(0,3)) #设置宽度以及x的限制
qplot(carat,data = diamonds,geom="histogram",fill = color) # 形成对比

# 密度曲线图
qplot(carat,data = diamonds,geom="density")
qplot(carat,data = diamonds,geom="density",colour = color) # 形成对比

#条形图
qplot(color,data = diamonds,geom="bar") #默认是y值是计数
qplot(color,data = diamonds,geom="bar",weight = carat) #自己设置y值对应的权重


#线条图和路径图通常用于可视化时间序列数据,
#线条图将点从左到右进行连接,而路径图则按照数据集中的顺序对其排序
# 使用economics数据集进行学习分析
economics
qplot(date,unemploy/pop,data = economics,geom ="line") #失业率
qplot(date,unemploy,data = economics,geom ="line") #失业人数


#其他选项,x轴标签,y轴标签,题目,x轴限制范围,y轴限制范围
qplot(carat,price,data=dsmall,xlab="x",ylab="y",main="head",xlim=c(.2,1))

# 更多用途方法,查看如下命令
?qplot

三. 精髓所在ggplot

3.1 理论基础

有几个概念首先要说清楚,

  1. ggplot:创建一个绘图对象
  2. aes:映射关系,对于x,y轴对应的属性以及其他的关系匹配
  3. layer:层,不同层之间的叠加用+可以实现
# 使用mpg数据
# displ 发动机排量
# hwy 高速公路耗油量
qplot(displ,hwy,data = mpg,colour = factor(cyl))

ggplot2入门指南

其实简单来说,精髓就是类似于ps里面的图层,每次都在原来的画图的基础上添加新的一层,然后最终就可以定制我们自己想要的所有的样式。

3.2 动手实践

-ggplot2高效实用指南

  1. 获得ggplot对象,并设置对应映射
x<-ggplot(diamonds,aes(carat,price))
  1. 在ggplot对象上画点
x+geom_point()   # 默认的点图
x+geom_point(aes(colour = color,alpha=1/20)) #设置特殊映射
  1. 在ggplot对象上画线
#竖线
x+geom_point(aes(alpha=1/20,colour=clarity))+geom_vline(xintercept = 3)
# 横线
x+geom_point(aes(alpha=1/20,colour=clarity))+geom_hline(yintercept = 15000)
x+geom_point(aes(alpha=1/20,colour=clarity))+geom_hline(yintercept = seq.int(0,15000,5000))
  1. 条状图
g<-ggplot(data=diamonds,aes(carat))
g+geom_bar()
g+geom_bar(aes(colour=cut)
  1. 二维热力图
d <- ggplot(diamonds, aes(x, y)) + xlim(4, 10) + ylim(4, 10)
d+geom_bin2d()
d+geom_bin2d(bins=c(10,10)) # 设置格子的大小
  1. 箱状图
p<-ggplot(diamonds,aes(color,price))
p+geom_boxplot()
p + geom_boxplot(fill = "white", colour = "#3366FF") # 设置箱状图的特殊之处
  1. 轮廓图
v <- ggplot(faithfuld, aes(waiting, eruptions, z = density))
v + geom_contour()
  1. 计数图:其实是点图的一个变体
c<-ggplot(diamonds,aes(carat,price))
c+geom_count()

9.概率密度图

ggplot(diamonds, aes(carat)) + geom_density()
ggplot(diamonds, aes(carat)) + geom_density(aes(color=cut))
  1. 散点图
ggplot(mtcars, aes(x = mpg)) + geom_dotplot()
  1. 六角形热图计数
d <- ggplot(diamonds, aes(carat, price))
d + geom_hex()
  1. 直方图
ggplot(diamonds, aes(carat)) + geom_histogram()
  1. 抖动点图
p <- ggplot(diamonds, aes(carat, price))
> p + geom_jitter()
> p + geom_jitter(aes(colour = cut) )
  1. 小提琴图
p <- ggplot(mtcars, aes(factor(cyl), mpg))
p + geom_violin()
p + geom_violin() + geom_jitter(height = 0, width = 0.1)
p + geom_violin(scale = "count")
p + geom_violin(scale = "width")
  1. 数据拟合
ggplot(diamonds, aes(carat, price)) +
+     geom_point() +
+     geom_smooth(method="gam",formula = y~s(x,bs="cs"))
  1. 数据标签
p <- ggplot(mtcars, aes(wt, mpg, label = rownames(mtcars)))

p + geom_text()
  1. 时间序列连线图
ggplot(economics, aes(date, unemploy)) +  geom_line(colour = "red")
ggplot(economics_long, aes(date, value01, colour = variable)) + geom_line()
ggplot(economics, aes(x = date, y = unemploy))+geom_smooth()+geom_point()
  1. 图标签,表头,坐标名称等
p <- ggplot(mtcars, aes(mpg, wt, colour = cyl)) + geom_point()
p + labs(colour = "Cylinders",title = "New plot title", subtitle = "A subtitle",caption = "(based on data from ...)",tag = "A")
# 如果仅仅需要修改x轴和y轴的标签
p+ylab("y-yname")
p+xlab("x-xname")

三 参考资源

  1. 官方Reference
  2. R 常见问题解答
  3. R语言系列
  4. 如何使用 ggplot2 ?

你可能感兴趣的:(【R语言学习系列2】-提高篇)