本文主要介绍画散点图的以下几种类型:

目录

点数过多出现重叠现象

case 1

case 2

离散数据的回归拟合及置信区间问题

添加回归曲线

修改置信区间的置信度

隐藏置信区间

给数据按类别分别拟合

从已知模型中添加回归曲线

利用annotate()加注释

绘制边缘地毯图 marginal rugs plot

给散点图的点加上标签

为所有数据加上标签

选择性保留标签

气球图,更直观地看到数值的变化


首先导入必要的包

library (ggplot2)
library(cowplot)#将图片组合在一起
library(gcookbook)#数据集
library(plyr)#后面用到ddply函数

点数过多出现重叠现象

case 1

#着重解决overplot
#基础绘图
p1 <- ggplot(diamonds,aes(x=carat,y=price))+geom_point(alpha=0.01)
p1

可以看到这个数据集的散点图有很多的重叠的现象,这对我们进行数据分析并不利,因为我们并不知道这里究竟有多少数据重叠

我们可以尝试二维密度图

二维密度图与散点图相似,但是当点过多,重叠程度较大,就需要用二维密度图反映其密集程度。

二维密度图显示了两个数值变量之间的关系,一个在x轴上表示,另一个在Y轴上表示,与散点图类似,然后计算二维空间中特定区域内的观测数,并用颜色梯度表示

#上面画的较慢,且表示并不清晰,我们可以尝试bin2d
p2.1 <- ggplot(diamonds,aes(x=carat,y=price))+stat_bin2d()
p2.2 <- ggplot(diamonds,aes(x=carat,y=price))+stat_bin2d(bins=50)
p2.3 <- ggplot(diamonds,aes(x=carat,y=price))+stat_bin2d(bins=50)+scale_fill_gradient(low = "skyblue",high = "red")
cowplot::plot_grid(p2.1,p2.2,p2.3,nrow = 1)  

stat_bin2d()内置参数bins=50表示这个图由50x50个格子构成

scale_fill_gradient()内置参数low和high表示颜色随数量增加由浅蓝色逐步过渡到红色

otherwise,将方格子换成正六边形

p3 <- ggplot(diamonds,aes(x=carat,y=price))+stat_binhex()+scale_fill_gradient(low = "skyblue",high = "red",breaks=c(0,500,1000,2000,4000,6000))
p3

case 2

#另一种情况的重叠
head(ChickWeight)
p4 <- ggplot(ChickWeight,aes(x=Time,y=weight))+geom_point()+scale_x_continuous(breaks = seq(0,21,1))#设置x轴范围从0到21,每一个单位显示一个刻度
p4

点聚集在一条线上不能直观的感受,我们可以利用jitter函数随机抖动一下

p5 <- ggplot(ChickWeight,aes(x=Time,y=weight))+geom_point(position = "jitter")+scale_x_continuous(breaks = seq(0,21,1))#设置x轴范围从0到21,每一个单位显示一个刻度
p5

 如果我们想要控制抖动的幅度

p6 <- ggplot(ChickWeight,aes(x=Time,y=weight))+geom_point(position = position_jitter(width = 0.5,height = 0))+scale_x_continuous(breaks=seq(0,22,1))#设置x轴范围从0到21,每一个单位显示一个刻度
p6

或者我们用箱图来描绘这类数据

p7 <- ggplot(ChickWeight,aes(x=Time,y=weight))+geom_boxplot(aes(group=Time))#告诉ggplot怎么分类,不然会直接弄成一个箱图
p7

离散数据的回归拟合及置信区间问题

添加回归曲线

p8 <- ggplot(heightweight,aes(x=ageYear,y=heightIn))+geom_point()+geom_smooth(method = lm)#默认置信区间为95%,方法为线性拟合
p8

修改置信区间的置信度

#添加99%的置信区间
p9 <- ggplot(heightweight,aes(x=ageYear,y=heightIn))+geom_point()+geom_smooth(method = lm,level=0.99)
p9

隐藏置信区间

#不要置信区间
p10 <- ggplot(heightweight,aes(x=ageYear,y=heightIn))+geom_point()+geom_smooth(method = lm,se=F)#se=F隐藏置信区间
p10

 使用局部加权多项式拟合

#使用局部加权多项式拟合
p11 <- ggplot(heightweight,aes(x=ageYear,y=heightIn))+geom_point()+geom_smooth(method = loess)
p11

给数据按类别分别拟合

p12 <- ggplot(heightweight,aes(x=ageYear,y=heightIn,colour = sex))+geom_point()+geom_smooth(method = loess)
p12

 从已知模型中添加回归曲线

#从已知模型中添加回归曲线
model <- lm(heightIn~ageYear+I(ageYear^2),heightweight)
model
predicted <- data.frame(ageYear=heightweight$ageYear)
predicted$heightIn <- predict(model,predicted)
predicted
p13 <- ggplot(heightweight,aes(x=ageYear,y=heightIn))+geom_point(colour = "grey")+geom_line(data=predicted,aes(x=ageYear,y=heightIn),size=1)
p13

利用annotate()加注释

#annotate详细用法 8个例子
#annotate()通过第一个参数指定标注类型:
#"text","rect","segment","pointrange","curve"
p <- ggplot(mtcars, aes(x = wt, y = mpg)) + geom_point()
#在(4,25)处添加标签some text
an1 <- p + annotate("text", x = 4, y = 25, label = "Some text")+ggtitle("an1")
#在y=25直线上x从2到5每间隔一个单位添加标签some text
an2 <- p + annotate("text", x = 2:5, y = 25, label = "Some text")+ggtitle("an2")
#在这片区域作阴影,透明度为0.2
an3 <- p + annotate("rect", xmin = 3, xmax = 4.2,#x范围ymin = 12, ymax = 21,#y范围alpha = .2)+ggtitle("an3")
#以(2.5,15)为起点,(4,25)为终点作直线
an4 <- p + annotate("segment", x = 2.5, xend = 4, y = 15, yend = 25,colour = "blue")+ggtitle("an4")
an5 <- p + annotate("pointrange", x = 3.5, y = 20,#中心坐标ymin = 12, ymax = 28,colour = "red", size = .5)+ggtitle("an5")an6 <- p + annotate("text", x = 2:3, y = 20:21, label = c("my label", "label 2"))+ggtitle("an6")
#数学公式
an7 <- p + annotate("text", x = 4, y = 25, label = "italic(R) ^ 2 == 0.75",parse = TRUE)+ggtitle("an7")
#添加有向箭头
an8 <- p + annotate("curve",x = 4, y = 22.5,xend = 3, yend = 15,#起始点curvature = .5,#弧度arrow = arrow(length = unit(3, "mm")))+#箭头3mm  ggtitle("an8")
cowplot::plot_grid(an1,an2,an3,an4,nrow = 2)
cowplot::plot_grid(an5,an6,an7,an8,nrow = 2)

数学公式的写法参考这篇博文R语言作图:数学公式

绘制边缘地毯图 marginal rugs plot

边缘地毯图本质上是一种一维散点图,可以用来可视化数据在各个坐标轴上的分布。

下面以faithful数据集为例展示其画法

p15.1 <- ggplot(faithful,aes(x=eruptions,y=waiting))+geom_point()
p15.2 <- p15.1 + geom_rug()
cowplot::plot_grid(p15.1,p15.2,nrow = 1)

给散点图的点加上标签

为所有数据加上标签

以countries数据集为例,为数据加上标签

df <- subset(countries,Year==2009&healthexp>2000)
p16.1 <- ggplot(df,aes(x=healthexp,y=infmortality))+geom_point()
p16.2 <- p16.1 + geom_text(aes(label=Name),vjust = 0,#竖直方向位置参数hjust = -.1,#水平方向位置参数size = 3)#字体大小
p16.2

选择性保留标签

#如果想要选择性保留
df
df$Name1 <- df$Name
idx <- df$Name1 %in% c("Canada","Switzerland","New Zealand","Slovenia")
#在利用逻辑向量索引时,R将查找逻辑值为TRUE元素的下标,并索引该下标元素的值,而不包括FALSE的值
df$Name1[!idx] <- NA
p17 <- ggplot(df,aes(x=healthexp,y=infmortality))+geom_point()+geom_text(aes(label=Name1),vjust=1 )
p17

对于利用逻辑向量为索引筛选数据理解困难的小伙伴,参考R语言中的数据筛选索引

气球图,更直观地看到数值的变化

气球图,气球面积与数值成正比

df <- subset(countries,Year==2009&healthexp>2000)
p18 <- ggplot(df,aes(x=healthexp,y=infmortality,size=GDP))+geom_point(shape=21,colour="black",fill="cornsilk")+scale_size_area(max_size = 15)
p18

ggplot2散点图进阶画法相关推荐

  1. Python数据可视化之散点图(进阶篇---图文并茂详细版!!!)

    散点图进阶篇 数据获取 数据展示 数据分析 1.确定横纵坐标的选择 2.准备标签的列表与颜色 4.确定横纵坐标的值 5.绘制基础图像 数据获取 •进阶散点图可视化需要大量的数据,网上有很多获取数据的来 ...

  2. 20180416-A · Global Mortality · ggplot2 散点图 ggbump 凹凸图 · R 语言数据可视化 案例 源码

    所有作品合集传送门: Tidy Tuesday 2018 年合集传送门: 2018 Global Mortality What do people die from? Tidy Tuesday 在 G ...

  3. Matlab散点图进阶——矩阵气泡图

    先上一个效果图 调用代码: BubleMatric(["A" "B" "C" "D"], ["1" ...

  4. R语言 ggplot2 散点图 多组数据 形状,大小,颜色 调整

    主要使用的方法就是 scale_shape_manual,scale_size_manual,scale_color_manual, scale_fill_manual 颜色分为 描变颜色 scale ...

  5. 数据可视化:Matplotlib vs ggplot2

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 2020年即将结束(终于),数据可视化再重要不过了.呈现一个看起来 ...

  6. 【python数据分析】用python进行数据探索1(含各种数据基础分析方法以及直方图、条形图、折线图等基本画法)

    从这周开始,我将在此记录我对<python数据分析与挖掘实战>(第二版)的跟读情况,将我认为的值得学习的点记录在这里,有时候也会对相关知识进行拓展,保持每周更新3-4次的频率,争取在下次开 ...

  7. python ggplot为什么不能取代matplotlib_Matplotlib vs ggplot2

    作者|Dario Radečić 编译|VK 来源|Towards Datas Science 2020年即将结束(终于),数据可视化再重要不过了.呈现一个看起来像5岁小孩的东西已经不再是一个选择,所 ...

  8. python画误差棒_给妹子讲python-S02E06matplotlib散点图、频次直方图与误差线图

    微信公众号: python数据科学家 [要点抢先看] 1.散点图的画法举例 2.频次直方图的画法举例 3.误差线图的画法举例 [妹子说]今天我们继续学习matplotlib绘图的相关内容嘛~ 对,在这 ...

  9. Python数据可视化之绘制带有最佳拟合线的散点图(图文并茂版!!!)

    绘制带有最佳拟合线的散点图 最佳拟合线 数据准备 数据展示 图例选择 根据图例筛选数据 绘制图像 最佳拟合线 •当我们想要研究数据集中两个变量之间如何相互改变,使用最佳拟合线就是一个不错的方法!!   ...

最新文章

  1. 用它调试线上 bug,真得劲 | webconsole
  2. Java and Python: a perfect couple - Developer.com
  3. 按键精灵-Sub和Function
  4. 设计模式系列-组合模式
  5. 【工厂模式】设计模式之工厂模式【原创】
  6. uniapp h5 页面在移动端 遮罩层禁止滚动 --安卓和ios端完美适配(只是测试了部分机型)
  7. 容器中Java RAM的使用:不会丢失内存的5大技巧
  8. oracle最大实例数,【ORA-16196】一个实例在其生命周期里最多只能装载和打开一个数据库...
  9. js 点击闭包_【新年跳槽必备】2020最新(前端原生JS专题)面试题 速领!
  10. 《勿忘初心,不负梦想》
  11. 产品管理 OKR:最佳实践和示例
  12. 朝花夕拾 - 年度整理,2021?2022!
  13. OA的岗位管理功能模块的实现总结
  14. 机械螺旋缠绕法管道非开挖修复
  15. 检查软件下载是否完整 MD5 工具使用 ----- md5sum
  16. java mail 监听邮件_javamail – IMAP messageChangedListener()没有被触发
  17. 阿里mPaas中扫一扫功能的接入
  18. 独立,做新世纪的好少年,无所畏惧
  19. 用Grid Factory生成TBC所需要的大地水准面模型文件
  20. 入行3D建模有什么职业可以选择?自学能学会3dsmax吗?

热门文章

  1. 基于Android+机智云的室内植物墙智能控制系统
  2. 价廉物美的三维克莱因瓶(Klein Bottle)
  3. 打印机共享疑难杂症(不断更新...)
  4. 基于ATmega8的测速计设计
  5. 视频笔记-吾爱破解ximo脱壳视频1~10
  6. FreeIPA安装后Named service无法启动 - RHEL6.5
  7. MSN Messenger 7.0测试版公开推出 已经可以下载
  8. 大学计算机教程 曾俊,大学计算机基础教程
  9. 利用Android Studio实现的简单房贷计算器
  10. 地铁逃生的服务器正在维护吗,LifeKeeper为北京地铁保护维护系统