【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 ?
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,752评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,100评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,244评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,099评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,210评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,307评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,346评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,133评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,546评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,849评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,019评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,702评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,331评论 3 319
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,030评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,260评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,871评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,898评论 2 351

推荐阅读更多精彩内容