ggplot2散点图进阶画法
本文主要介绍画散点图的以下几种类型:
目录
点数过多出现重叠现象
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散点图进阶画法相关推荐
- Python数据可视化之散点图(进阶篇---图文并茂详细版!!!)
散点图进阶篇 数据获取 数据展示 数据分析 1.确定横纵坐标的选择 2.准备标签的列表与颜色 4.确定横纵坐标的值 5.绘制基础图像 数据获取 •进阶散点图可视化需要大量的数据,网上有很多获取数据的来 ...
- 20180416-A · Global Mortality · ggplot2 散点图 ggbump 凹凸图 · R 语言数据可视化 案例 源码
所有作品合集传送门: Tidy Tuesday 2018 年合集传送门: 2018 Global Mortality What do people die from? Tidy Tuesday 在 G ...
- Matlab散点图进阶——矩阵气泡图
先上一个效果图 调用代码: BubleMatric(["A" "B" "C" "D"], ["1" ...
- R语言 ggplot2 散点图 多组数据 形状,大小,颜色 调整
主要使用的方法就是 scale_shape_manual,scale_size_manual,scale_color_manual, scale_fill_manual 颜色分为 描变颜色 scale ...
- 数据可视化:Matplotlib vs ggplot2
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 2020年即将结束(终于),数据可视化再重要不过了.呈现一个看起来 ...
- 【python数据分析】用python进行数据探索1(含各种数据基础分析方法以及直方图、条形图、折线图等基本画法)
从这周开始,我将在此记录我对<python数据分析与挖掘实战>(第二版)的跟读情况,将我认为的值得学习的点记录在这里,有时候也会对相关知识进行拓展,保持每周更新3-4次的频率,争取在下次开 ...
- python ggplot为什么不能取代matplotlib_Matplotlib vs ggplot2
作者|Dario Radečić 编译|VK 来源|Towards Datas Science 2020年即将结束(终于),数据可视化再重要不过了.呈现一个看起来像5岁小孩的东西已经不再是一个选择,所 ...
- python画误差棒_给妹子讲python-S02E06matplotlib散点图、频次直方图与误差线图
微信公众号: python数据科学家 [要点抢先看] 1.散点图的画法举例 2.频次直方图的画法举例 3.误差线图的画法举例 [妹子说]今天我们继续学习matplotlib绘图的相关内容嘛~ 对,在这 ...
- Python数据可视化之绘制带有最佳拟合线的散点图(图文并茂版!!!)
绘制带有最佳拟合线的散点图 最佳拟合线 数据准备 数据展示 图例选择 根据图例筛选数据 绘制图像 最佳拟合线 •当我们想要研究数据集中两个变量之间如何相互改变,使用最佳拟合线就是一个不错的方法!! ...
最新文章
- 用它调试线上 bug,真得劲 | webconsole
- Java and Python: a perfect couple - Developer.com
- 按键精灵-Sub和Function
- 设计模式系列-组合模式
- 【工厂模式】设计模式之工厂模式【原创】
- uniapp h5 页面在移动端 遮罩层禁止滚动 --安卓和ios端完美适配(只是测试了部分机型)
- 容器中Java RAM的使用:不会丢失内存的5大技巧
- oracle最大实例数,【ORA-16196】一个实例在其生命周期里最多只能装载和打开一个数据库...
- js 点击闭包_【新年跳槽必备】2020最新(前端原生JS专题)面试题 速领!
- 《勿忘初心,不负梦想》
- 产品管理 OKR:最佳实践和示例
- 朝花夕拾 - 年度整理,2021?2022!
- OA的岗位管理功能模块的实现总结
- 机械螺旋缠绕法管道非开挖修复
- 检查软件下载是否完整 MD5 工具使用 ----- md5sum
- java mail 监听邮件_javamail – IMAP messageChangedListener()没有被触发
- 阿里mPaas中扫一扫功能的接入
- 独立,做新世纪的好少年,无所畏惧
- 用Grid Factory生成TBC所需要的大地水准面模型文件
- 入行3D建模有什么职业可以选择?自学能学会3dsmax吗?
热门文章
- 基于Android+机智云的室内植物墙智能控制系统
- 价廉物美的三维克莱因瓶(Klein Bottle)
- 打印机共享疑难杂症(不断更新...)
- 基于ATmega8的测速计设计
- 视频笔记-吾爱破解ximo脱壳视频1~10
- FreeIPA安装后Named service无法启动 - RHEL6.5
- MSN Messenger 7.0测试版公开推出 已经可以下载
- 大学计算机教程 曾俊,大学计算机基础教程
- 利用Android Studio实现的简单房贷计算器
- 地铁逃生的服务器正在维护吗,LifeKeeper为北京地铁保护维护系统