1.前言

散点图(scatter graph、point graph、X-Y plot、scatter chart )是科研绘图中最常见的图表类型之一,通常用于显示和比较数值。散点图是使用一系列的散点在直角坐标系中展示变量的数值分布。在二维散点图中,可以通过观察两个变量的数据变化,发现两者的关系与相关性。

散点图可以提供三类关键信息:

(1)变量之间是否存在数量关联趋势;

(2)如果存在关联趋势,那么其是线性还是非线性的;

(3)观察是否有存在离群值,从而分析这些离群值对建模分析的影响。


本文可以看作是《R语言数据可视化之美》的学习笔记。该书第四章——数据关系型图表中展示的散点图系列包括以下四个方面:

  1. 趋势显示的二维散点图

  2. 分布显示的二维散点图

  3. 气泡图

  4. 三维散点图

本文主要对第二部分进行介绍,并加上小编自己的理解。下面几个部分也会在最近陆续推出,敬请关注。

2.本文框架

3.单数据系列

3.1数据格式

这里我们使用正态分布随机产生250个数据(这个就是实际我们采集的一维数据)。step是指按照多少的区间进行划分类别。我们通过hist()将直方图内部数据进行存储(我也是第一次见这种操作,以后学起来)。输出hg,内部包含参数如下所示:

其中breaks表示边界点,counts表示每个区间内的个数,density表示密度函数值。mids表示区间的中间点,并利用这些参数来构建后续绘图所需要的数据。通过循环语句,计算出x,y坐标数据。前6项数据如下所示:

完整代码如下:

#加载包
library(ggplot2)
library(RColorBrewer) #颜色
library(scales)x <- rnorm(250 , mean=10 , sd=1)
step<-0.2
breaks<- seq(min(x)-step,max(x)+step,step)hg <- hist(x, breaks = breaks , plot = FALSE)#使用直方图数据,但不绘图bins <- length(hg$counts) # bin类别数
yvals <- numeric(0)
xvals <- numeric(0)
for(i in 1:bins) {       yvals <- c(yvals, hg$counts[i]:0)  xvals <- c(xvals, rep(hg$mids[i], hg$counts[i]+1))
}    dat <- data.frame(xvals, yvals)  # 变成dataframe格式
dat <- dat[yvals > 0, ]          # 去除小于0的数colormap <- colorRampPalette(rev(brewer.pal(11,'Spectral')))(32) #颜色选择

3.2原始数据绘制

接下来我们使用该数据(单数据)进行绘制:

  • 柱状图(正态分布)
ggplot(dat, aes(x=xvals,y=yvals,fill=yvals))+geom_tile(colour="black")+scale_fill_gradientn(colours=colormap)+ylim (0, max(yvals)*1.3)+theme(text=element_text(size=15,color="black"),plot.title=element_text(size=15,family="myfont",face="bold.italic",hjust=.5,color="black"),legend.background = element_blank(),legend.position=c(0.9,0.75))

geom_tile(colour="black")改为geom_point(colour="black",shape=21,size=4)会得到以下图片

ggplot(dat, aes(x=xvals,y=yvals,fill=yvals))+geom_point(colour="black",shape=21,size=4)+scale_fill_gradientn(colours=colormap)+ylim (0, max(yvals)*1.3)+theme(text=element_text(size=15,color="black"),plot.title=element_text(size=15,family="myfont",face="bold.italic",hjust=.5,color="black"),legend.background = element_blank(),legend.position=c(0.9,0.75))

3.3 Q-Q图的绘制

在R中可以使用CircStats包的pp.plot()函数绘制P-P图;ggplot2 包的geom_qq()函数和geom_qq_line()函数结合可以绘制Q-Q 图;另外,ggplot2包结合ggpubr包也可以绘制,当然改包还有其他好用的功能。

下面对第三种方式进行实现:
ggpubr包中的ggqqplot相应参数如下,包括了非常多的参数,前两个参数分别表示:数据,要绘制的变量。当然其他数据包括设置主题(ggtheme);添加qqline(add = c("qqline"))等。

ggqqplot(data,  x,  combine = FALSE,  merge = FALSE,  color = "black",  palette = NULL,  size = NULL,  shape = NULL,  add = c("qqline", "none"),  add.params = list(linetype = "solid"),  conf.int = TRUE,  conf.int.level = 0.95,title = NULL,  xlab = NULL,  ylab = NULL,  facet.by = NULL,  panel.labs = NULL,  short.panel.labs = TRUE,  ggtheme = theme_pubr(),  ...
)

为了更好解释这个函数,我们重新模拟一个数据集。

library(ggpubr)
# 创建一个数据集
set.seed(1234)
wdata = data.frame(sex = factor(rep(c("F", "M"), each=200)),weight = c(rnorm(200, 55), rnorm(200, 58)))
head(wdata, 4)

# 基本的Q-Q图
ggqqplot(wdata, x = "weight")

# 按性别改变颜色和形状
ggqqplot(wdata, x = "weight",color = "sex",ggtheme = ggplot2::theme_grey())#更改主题(灰色)当然可以用其他主题

3.4 带透明度设置的散点图

  • 数据设定

这个数据是张杰老师书中的数据,是经过一定处理得到的,结果图可以看下面。

library(ggplot2)
library(RColorBrewer)  mydata<-read.csv("HighDensity_Scatter_Data.csv",stringsAsFactors=FALSE)
head(mydata)

我们利用ggplot()简单绘制二维数据的散点图,之后在对该数据进行聚类。

ggplot(data = mydata, aes(x,y)) +geom_point( colour="black",alpha=0.1)+labs(x = "Axis X",y="Axis Y")+theme(text=element_text(size=15,color="black"),plot.title=element_text(size=15,family="myfont",face="bold.italic",hjust=.5,color="black"),legend.position="none")

3.5 kmeans聚类的散点图

对上面数据进行kmeans聚类,这里使用base中的 kmeans()进行分类(两类),然后将分类情况(cluster)进行存储,并转化成因子类型。绘图时,cluster来设置颜色,这样就可以很明显看出分类结果。

kmeansResult<- kmeans(mydata, 2, nstart = 20)
mydata$cluster <- as.factor(kmeansResult$cluster)
ggplot(data = mydata, aes(x,y,color=cluster)) +geom_point( alpha=0.2)+scale_color_manual(values=c("#00AFBB",  "#FC4E07"))+labs(x = "Axis X",y="Axis Y")+theme(text=element_text(size=15,color="black"),plot.title=element_text(size=15,family="myfont",face="bold.italic",color="black"),legend.background=element_blank(),legend.position=c(0.85,0.15))

3.6 带椭圆标定的聚类散点图

有时候我们想突出聚类结果会在结果上画上椭圆,那么可以使用stat_ellipse()

ggplot(data = mydata, aes(x,y,color=cluster)) +geom_point (alpha=0.2)+  # 绘制透明度为0.2 的散点图stat_ellipse(aes(x=x,y=y,fill= cluster), geom="polygon", level=0.95, alpha=0.2)+#绘制椭圆标定不同类别scale_color_manual(values=c("#00AFBB","#FC4E07"))+#使用不同颜色标定不同数据类别scale_fill_manual(values=c("#00AFBB","#FC4E07"))+#使用不同颜色标定不同椭类别labs(x = "Axis X",y="Axis Y")+theme(text=element_text(size=15,color="black"),plot.title=element_text(size=15,family="myfont",face="bold.italic",color="black"),legend.background=element_blank(),legend.position=c(0.85,0.15))

3.7 多数据系列

多数据系列,其实在聚类散点图就已经涉及到。这里对较少数据进行绘制,这样看起来结果更加美观。

mydata<-mydata[round(runif(300,0,10000)),]
kmeansResult<- kmeans(mydata, 2, nstart = 20)
mydata$cluster <- as.factor(kmeansResult$cluster)
ggplot(data = mydata, aes(x,y,fill=cluster,shape=cluster)) +geom_point(size=4,colour="black",alpha=0.7)+scale_shape_manual(values=c(21,23))+scale_fill_manual(values=c("#00AFBB",  "#FC4E07"))+labs(x = "Axis X",y="Axis Y")+scale_y_continuous(limits = c(-5, 10))+scale_x_continuous(limits = c(-5, 10))+theme(text=element_text(size=15,color="black"),plot.title=element_text(size=15,family="myfont",face="bold.italic",color="black"),legend.background=element_blank(),legend.position=c(0.85,0.15))


欢迎关注【庄闪闪的成长手册】,包含R可视化,数据分析,数据科学等前沿信息。

参考资料

  • 《R语言数据可视化之美》: https://github.com/EasyChart/Beautiful-Visualization-with-R

  • ggpubr简介: https://rpkgs.datanovia.com/ggpubr/index.html

R可视乎 | 散点图系列(2)相关推荐

  1. qt根据散点图拟合曲线_R可视化 | 散点图系列(1)

    作者:庄闪闪 1.前言 散点图(scatter graph.point graph.X-Y plot.scatter chart )是科研绘图中最常见的图表类型之一,通常用于显示和比较数值.散点图是使 ...

  2. R语言数据挖掘实战系列(4)

    R语言数据挖掘实战系列(4)--数据预处理 数据预处理一方面是要提高数据的质量,另一方面是要让数据更好地适应特定的挖掘技术或工具.数据预处理的主要内容包括数据清洗.数据集成.数据变换和数据规约. 一. ...

  3. R语言可视化散点图、气泡图、动态气泡图、数据点重合的散点图、数据点计数图、抖动数据点图、基于lm方法或者loess方法拟合数据点之间的趋势关系曲线、自定义数据点的大小、色彩、添加主标题、副标题、题注

    R语言可视化散点图.气泡图.动态气泡图.数据点重合的散点图.数据点计数图.抖动数据点图.基于

  4. R语言可视化散点图(scatter plot)图、为图中的部分数据点添加标签、ggrepel包来帮忙

    R语言可视化散点图(scatter plot)图.为图中的部分数据点添加标签.ggrepel包来帮忙 目录

  5. R语言可视化散点图(scatter plot)、并在散点图中叠加回归曲线、叠加lowess拟合曲线(linear and lowess fit lines)、使用plot、line、abline函数

    R语言可视化散点图(scatter plot).并在散点图中叠加回归曲线.叠加lowess拟合曲线(linear and lowess fit lines).使用plot函数.line函数和ablin ...

  6. R语言为散点图添加凸包(convex hull):数据预处理(创建一个包含每组数据凸包边界的数据集)、ggplot2使用geom_polygon函数为可视化图像添加凸包(convex hull)

    R语言为散点图添加凸包(convex hull):数据预处理(创建一个包含每组数据凸包边界的数据集).ggplot2使用geom_polygon函数为可视化图像添加凸包(convex hull) 目录

  7. R语言可视化散点图(scatter plot)图中的标签和数据点互相堆叠丑死了,ggrepel包来帮忙:文本标签(label)相互排斥,远离数据点,远离绘图区域的边缘。

    R语言可视化散点图(scatter plot)图中的标签和数据点互相堆叠丑死了,ggrepel包来帮忙:文本标签(label)相互排斥,远离数据点,远离绘图区域的边缘. 目录

  8. R可视乎|创建乐高版马赛克图

    创建乐高版本的马赛克图像 简介 今日内容比较"无用",觉得比较好玩,所以就做一期"异类"可视化啦!主要介绍下 brickr 包,它将乐高(LEGO) 带入 R ...

  9. R语言在散点图中添加lm线性回归公式

    R语言在散点图中添加lm线性回归公式 1. 简单的线性回归 2. 使用ggplot2展示 3. 提取线性回归p值 1. 简单的线性回归 函数自带的例子(R 中键入?lm),lm(y ~ x)回归y=k ...

最新文章

  1. 用深度神经网络搭建马赛克神器,高清无码效果感人
  2. 编译内核指定模块,筛选当前模块依赖的组件
  3. 如何高效获取无线充电电能-无线节能组
  4. python包管理器修改镜像地址
  5. ubuntu 升级nodejs 和 npm
  6. 钉钉小程序----使用阿里的F2图表
  7. SQL语句中 as 的作用
  8. Vue 教程第九篇—— 动画和过度效果
  9. spring service加上@autowired 空指针_Spring整合activeMQ和JsonP
  10. 数学分析原理 定理 6.10
  11. 如何一键重装Win7系统 便捷重装Win7系统教程
  12. 爱快路由器接水星交换机-划分vlan
  13. vector_back
  14. 使用QImage生成纯透明png图片
  15. 单集群10万节点 走进腾讯云分布式调度系统VStation
  16. leetcode 179 最大数
  17. ChatGPT 账号被封?推荐 5 款国外网站,完美替代!
  18. 2020年全国大学生数学建模竞赛B题穿越沙漠问题——建立整数线性规划模型(ILP)——通过LINGO求解
  19. python利用近似公式计算π_python如何利用公式计算π
  20. 如何使用3D MAX建造出DNA双螺旋结构

热门文章

  1. 韩国AI团队抄袭震动学界!1个导师带51个学生,还是抄袭惯犯
  2. 【UE4】导入FBX格式文件后呈现人物躺着情况的解决方法
  3. 大一考初级会计早不早啊?
  4. 国外LEAD流量基础
  5. channel十点技巧
  6. java.lang.NoSuchMethodError:scala.collection.immutable.HashSet$.empty()Lscala/collection/
  7. JAVA大学实用教程(第四版)课后习题三、四章答案(自整理)
  8. Win7 架设git服务器
  9. 将 Flutter 应用程序连接到 BLE 设备并监听数据
  10. 高级驱动——(驱动所有按键)