ggplot2包中绘制点图的函数有两个:geom_point和 geom_dotplot,当使用geom_dotplot绘图时,point的形状是dot,不能改变点的形状,因此,geom_dotplot 叫做散点图(Scatter Plot),通过绘制点来呈现数据的分布,对点分箱的方法有两种:点密度(dot-density )和直方点(histodot)。当使用点密度分箱(bin)方式时,分箱的位置是由数据和binwidth决定的,会根据数据进行变化,但不会大于binwidth指定的宽度;当使用直方点分箱方式时,分箱有固定的位置和固定的宽度,就像由点构成的直方图(histogram)。

bin是分箱的意思,在统计学中,数据分箱是一种把多个连续值分割成多个区间的方法,每一个小区间叫做一个bin(bucket),这就意味着每个bin定义一个数值区间,连续值会落到相应的区间中。

对点进行分箱时,点的位置(Position adjustment)有多种调整方式:

  • identity:不调整
  • dodge:垂直方向不调整,只调整水平位置
  • nudge:在一定的范围内调整水平和垂直位置
  • jitter:抖动,当具有离散位置和相对较少的点数时,抖动很有用
  • jitterdodge:同时jitter和 dodge
  • stack:堆叠,
  • fill:填充,用于条形图

每个位置调整都对应一个函数position_xxx()。

当沿着x轴进行分箱,并沿着y轴堆叠时,y轴上的数字没有意义。

当沿x轴进行分箱并沿y轴堆叠时,由于ggplot2的技术限制,y轴上的数字没有意义。 您可以隐藏y轴(如其中一个示例中所示),也可以手动缩放y轴以匹配点数。

使用geom_dotplot()函数来绘制点图:

geom_dotplot(mapping = NULL, data = NULL, position = "identity", ...,
binwidth = NULL, binaxis = "x", method = "dotdensity",
binpositions = "bygroup", stackdir = "up", stackratio = ,
dotsize = , stackgroups = FALSE, origin = NULL, right = TRUE,
width = 0.9, drop = FALSE, na.rm = FALSE, show.legend = NA,
inherit.aes = TRUE)

常用的参数注释:

  • mapping:使用aes()来设置点图美学特征,参数x是因子,参数y是数值
  • data:数据框对象
  • position:位置调整(Position adjustment),默认值是identity,表示不调整位置。
  • method:默认值是dotdensity(点密度分箱),或者histodot(直方点,固定的分箱宽度)
  • binwidth:该参数用于调整分箱的宽度,该参数受到method参数的影响,如果method是dotdensity,那么binwidth指定分箱的最大宽度;如果method是histodot,那么binwidth指定分箱的固定宽度,默认值是数据范围(range of the data)的1/30。
  • binaxis:沿着那个轴进行分箱,默认值是x
  • stackdir:设置堆叠的方向,默认值是up,有效值是down、center、centerwhole和up。
  • stackratio:点堆叠的密集程度,默认值是1,值越小,堆集越密集;
  • dotsize:点的大小,相对于binwidth的直径,默认值是1。

使用ToothGrowth数据来绘制点图:

ToothGrowth$dose <- as.factor(ToothGrowth$dose)

一,绘制点图

绘制基本的点图

library(ggplot2)

p <- ggplot(ToothGrowth, aes(x=dose, y=len)) +
geom_dotplot(binaxis='y', stackdir='center',
stackratio=1.5, dotsize=1.2)

二,添加汇总数据

向点图中添加汇总数据,使用ggplot2包中的函数

stat_summary(mapping = NULL, data = NULL, geom = "pointrange",
position = "identity", ..., fun.data = NULL, fun.y = NULL,
fun.ymax = NULL, fun.ymin = NULL, fun.args = list(), na.rm = FALSE,
show.legend = NA, inherit.aes = TRUE)

常用参数注释:

  • fun.data:指定一个函数(function),返回带有变量ymin,y和ymax的数据框
  • 或者,指定三个单独的函数,分别向每个函数传递一个向量,分别返回一个数字,用于表示ymin、y和ymax:

    • fun.y:
    • fun.ymax:
    • fun.ymin:
  • fun.args=list():可选的参数,用于指定传递给fun.xxx函数的参数

1,向点图中增加均值和中位数 

# dot plot with mean points
p + stat_summary(fun.y=mean, geom="point", shape=,
size=, color="red")
# dot plot with median points
p + stat_summary(fun.y=median, geom="point", shape=,
size=, color="red")

2,向点图中增加点范围

fun.low.mean <- function(x){mean(x)-sd(x)}
fun.up.mean <- function(x){mean(x)+sd(x)} ggplot(ToothGrowth, aes(x=dose, y=len)) +
geom_dotplot(binaxis='y', stackdir='center', stackratio=1.5, dotsize=1.2)+
stat_summary(fun.y = mean, fun.ymin = fun.low.mean, fun.ymax = fun.up.mean, colour = "red", size = 0.7)

3,使用fun.data向点图中增加点范围

data_summary <- function(x) {
m <- mean(x)
ymin <- m-sd(x)
ymax <- m+sd(x)
return(c(y=m,ymin=ymin,ymax=ymax))
} ggplot(ToothGrowth, aes(x=dose, y=len)) +
geom_dotplot(binaxis='y', stackdir='center', stackratio=1.5, dotsize=1.2)+
stat_summary(fun.data = data_summary, colour = "red", size = 0.7)

三,按照分组改变点图的颜色

首先要对点图分组,这通过aes(fill=dose)来实现,然后,使用scale_fill_manual()来设置每个分组的颜色:

ggplot(ToothGrowth, aes(x=dose, y=len, fill=dose)) +
geom_dotplot(binaxis='y', stackdir='center')+
scale_fill_manual(values=c("#999999", "#E69F00", "#56B4E9"))

四,添加点图的说明

通过theme函数向点图中增加说明,通过legend.position来控制说明的位置

ggplot(ToothGrowth, aes(x=dose, y=len, fill=dose)) +
geom_dotplot(binaxis='y', stackdir='center')+
scale_fill_manual(values=c("#999999", "#E69F00", "#56B4E9"))+
theme(legend.position="top")

五,向点图中增加标题和轴的标签

通过labs()来添加标题和坐标轴的标签

ggplot(ToothGrowth, aes(x=dose, y=len, fill=dose)) +
geom_dotplot(binaxis='y', stackdir='center')+
scale_fill_manual(values=c("#999999", "#E69F00", "#56B4E9"))+
labs(title="Plot of length by dose",x="Dose (mg)", y = "Length")+
theme_classic()

参考文档:

ggplot2高效实用指南

ggplot2入门与进阶(上)

Dot plot

ggplot2 dot plot : Quick start guide - R software and data visualization

R绘图 第五篇:绘制散点图(ggplot2)的更多相关文章

  1. R绘图 第四篇:绘制箱图(ggplot2)

    箱线图通过绘制观测数据的五数总括,即最小值.下四分位数.中位数.上四分位数以及最大值,描述了变量值的分布情况.箱线图能够显示出离群点(outlier),离群点也叫做异常值,通过箱线图能够很容易识别出数 ...

  2. R实战 第五篇:绘图(ggplot2)

    ggplot2包实现了基于语法的.连贯一致的创建图形的系统,由于ggplot2是基于语法创建图形的,这意味着,它由多个小组件构成,通过底层组件可以构造前所未有的图形.ggplot2可以把绘图拆分成多个 ...

  3. R绘图 第七篇:绘制条形图(ggplot2)

    使用geom_bar()函数绘制条形图,条形图的高度通常表示两种情况之一:每组中的数据的个数,或数据框中列的值,高度表示的含义是由geom_bar()函数的参数stat决定的,stat在geom_ba ...

  4. R绘图 第八篇:绘制饼图(ggplot2)

    geom_bar()函数不仅可以绘制条形图,还能绘制饼图,跟绘制条形图的区别是坐标系不同,绘制饼图使用的坐标系polar,并且设置theta="y": coord_polar(th ...

  5. R绘图 第六篇:绘制线图(ggplot2)

    线图是由折线构成的图形,线图是把散点从左向右用直线连接起来而构成的图形,在以时间序列为x轴的线图中,可以看到数据增长的趋势. geom_line(mapping = NULL, data = NULL ...

  6. R绘图 第十篇:绘制文本、注释和主题(ggplot2)

    使用ggplot2包绘制时,为了更直观地向用户显示报表的内容和外观,需要使用geom_text()函数添加文本说明,使用annotate()添加注释,并通过theme()来调整非数据的外观. 一,文本 ...

  7. R绘图 第十一篇:统计转换、位置调整、标度和向导(ggplot2)

    统计转换和位置调整是ggplot2包中的重要概念,统计转换通常使用stat参数来引用,位置调整通常使用position参数来引用. bin是分箱的意思,在统计学中,数据分箱是一种把多个连续值分割成多个 ...

  8. R绘图 第九篇:绘制散点图和气泡图(ggplot2)

    绘制散点图(scatterplots)使用geom_point()函数,气泡图(bubblechart)也是一个散点图,只不过点的大小由一个变量(size)来控制.散点图潜在的最大问题是过度绘图:当一 ...

  9. R绘图 第十二篇:散点图(高级)

    散点图用于描述两个连续性变量间的关系,三个变量之间的关系可以通过3D图形或气泡来展示,多个变量之间的两两关系可以通过散点图矩阵来展示. 一,添加了最佳拟合曲线的散点图 使用基础函数plot(x,y)来 ...

随机推荐

  1. LeetCode题解之Valid Triangle Number

    1.题目描述 2.问题分析 暴力计算 3.代码 int triangleNumber(vector<int>& nums) { ; ) return res; ; i < n ...

  2. mysql 内存统计

    在 mysql 5.5 中实现了类似mysql5.7中performance schema 的内存统计功能. 功能 1 展示mysql层内存总大小. 2 展示mysql层内存使用分布情况. 3 展示每 ...

  3. Android Studio之could not reserve enough space for object heap报错

    在用AndroidStudio时出现这样的错误:  搞了半天终于找到了解决办法,但是很麻烦.就是每次创建工程后,在gradle.properties文件中加入如下代码: org.gradle.jvma ...

  4. c#List数组移除元素

    ; i >= ; i--) //移除已经订阅的患者 { if (AllPatientsEntities[i].姓名 == item.患者姓名) AllPatientsEntities.Remov ...

  5. MSSQL在线文件还原脚本

    在线文件还原:如果比较大的MSSQL数据库的损坏只是集中在其中某一个文件或者文件组上,使用在线文件还原技术,只是把坏掉的数据文件或者文件组重建,能节约很多时间.以下是测试脚本(假设损坏的文件时Trn0 ...

  6. EasyUI tree reload时更改参数的问题。

    [问题]很多时候,我们需要重新加载tree数据,不仅仅是简单地刷新,更多的是重定向了URL,其中就包括参数的调整. moduleTree = $('#tree').tree({ queryParams ...

  7. jQuery插件实例六:jQuery 前端分页

    先来看看效果: 对于前端分页,关键是思路,和分页算法.本想多说两句,可又觉得没什么可说的,看代码吧: 如何使用? $("#pging").zPagination({ 'navEve ...

  8. TiDB数据库 mydumper命令导出数据报错:(mydumper:1908): CRITICAL **: Couldn't acquire global lock, snapshots will not be consistent: Access denied for user 'super'@'%' (using password: YES)

    今天想使用Tidb官方提供的mydumper来备份AWS上的RDS集群中mysql数据库的某个表,发现报错了 [tidb@:xxx /usr/local/tidb-tools]$ -t -F -B x ...

  9. 团队作业——Alpha冲刺 1/12

    团队作业--Alpha冲刺 Alpha 阶段认领的任务 杨光海天:加入随心摘首页和编辑界面的开发中,并完成冲刺博文的撰写 郭剑南.周琪文:图像识别核心算法的实现 赖志平:随心摘首页和编辑界面开发主力, ...

  10. SQL SERVER 2005镜像配置(有无见证服务器都行)

    我用的是没有见证的,但找的文章里有镜像,所以都做一下补充,两个网址做的参考, 之所以在从他们那再补充一次是为了怕有一天他们的文章被删了我这还有个备用的,这两篇写的不错 其他的都不行 特别乱,这是找的最 ...