精华内容
下载资源
问答
  • 散点图可用来描述两个连续型变量间的... 绘制简单散点图2.1 绘制部分散点2.2 绘制全部散点3. 自定义参数3.1 添加网格线3.2 添加回归线4. 商业化散点图4.1 asTheEconomist()函数4.2 scatter.ade()函数5. 增强版散点图...

    47bce6117bcd4144a52e58abf4464d35.png

    散点图可用来描述两个连续型变量间的关系,是我们最常用的图形工具之一。此外,许多其他图形类型只是基本散点图的变体。

    今天来学习散点图的绘制。


    目  录

    • 1. 加载数据集

    • 2. 绘制简单散点图

      • 2.1 绘制部分散点

      • 2.2 绘制全部散点

    • 3. 自定义参数

      • 3.1 添加网格线

      • 3.2 添加回归线

    • 4. 商业化散点图

      • 4.1 asTheEconomist()函数

      • 4.2 scatter.ade()函数

    • 5. 增强版散点图

      • 5.1 xyplot()函数

      • 5.2 scatterplot()函数

    • 6. ggpubr包绘制散点图

    • 7. scatterplot()函数解释

    • 8. ggscatter()函数解释


    1. 加载数据集

    本推文使用基础包自带的trees数据集进行演示。通过?trees代码查看数据集的帮助文件。

    trees数据集记录了黑樱桃树的直径、高度和体积的测量数值,数据集包括31个观测对象,3个变量。

    data(trees) # 加载数据集
    head(trees) # 预览数据集
    8768509043146ea4010aec33188ff36c.png

    数据集中的这三个变量之间可能存在很强的关系,我们可以使用散点图来显示这种关系。

    2. 绘制简单散点图

    2.1 绘制部分散点

    使用plot()函数来生成散点图。可以通过限定x轴、y轴范围来显示部分散点图。

    attach(trees) # 绑定数据集
    trees2 = trees[1:2,] # 筛选子集
    plot(trees2$Height, trees2$Girth, # 绘图的x、y数据
         xlim = c(63,80), ylim = c(7.8,10), # 限制x轴y轴范围
         xlab = "Height", ylab = "Girth"# 指定x轴y轴标签
         main = "图上显示两个点")
    7af2849d426e55e7177ce241dd2afc73.png

    可以在图上给两个散点添加标签。

    text(728.1, labels = "(Height = 70, Girth = 8.3)")
    text(658.8, labels = "(65, 8.6)")
    5e6f4a9f8bf1779867dfbcc2bd9417dc.png

    2.2 绘制全部散点

    plot(Height, Girth, 
         main = "显示所有的散点")
    ec7c07e78519358499e4248f131f9cf3.png

    如上图所示,在散点图上绘制了所有的点,可以看到,直径和高度没有很明显的线形关系,但是也和随机分布有所不同。

    3. 自定义参数

    我们可以修改或者添加不同的参数来调整显示图形。

    3.1 添加网格线

    plot(Height, Girth, # 绘制散点图的数据
         main = "改变散点符号,添加网格",
         pch = 20# 设置绘图符号
         col = "deepskyblue"# 设置散点图符号的颜色
    grid(col = "gray70"# 添加网格线
    bd902850d16ff5fc4cf15ea01fc0d0c2.png

    3.2 添加回归线

    我们可以使用lm()函数拟合线性回归,并使用abline()函数在图形上添加回归线。

    plot(Height, Girth, # 绘制散点图的数据
         main = "增加回归线", pch = 20# 设置图形标题和散点符号
         col = "deepskyblue"# 散点颜色
    abline(lm(Girth ~ Height), # 拟合回归线
           col = "dodgerblue4"# 设置回归线颜色
           lty = 1# 设置回归线线形
           lwd = 2# 设置回归线线宽
    grid(col = "gray70"# 添加网格线
    172e7fb8ff794b9702e67da46b5dfa72.png

    4. 商业化散点图

    R可以绘制更加精细的散点图,通过调整plot()函数中的参数来自定义图表,比如更改背景、标题、颜色等等。

    散点图也可以用于商业化图表中,比如说latticeExtra包可以模仿经济学领域杂志图表样式来绘制散点图。

    4.1 asTheEconomist()函数

    install.packages("latticeExtra", dependencies = T# 安装包
    library(latticeExtra) # 加载包
    attach(trees) # 绑定数据集
    asTheEconomist(xyplot(Girth ~ Height), xlab = "Height",
                   type = "p", with.bg = T# 绘制图形
    detach(trees) # 解绑数据集
    8ea57cc0f120a2187cccf25416422e56.png

    除了asTheEconomist()函数外,epade包的scatter.ade()函数也可以绘制散点图。

    4.2 scatter.ade()函数

    通过修改scatter.ade()函数中的wall参数,可以绘制不同类型风格的散点图。

    install.packages("epade"# 安装包
    library(epade) # 加载包
    attach(trees) # 绑定数据集
    par(mfrow = c(2,3)) # 分割图形设备
    # 绘制不同风格类型的散点图
    scatter.ade(Height, Girth, wall = 1, main = "wall = 1"
    scatter.ade(Height, Girth, wall = 2, main = "wall = 2")
    scatter.ade(Height, Girth, wall = 3, main = "wall = 3")
    scatter.ade(Height, Girth, wall = 4, main = "wall = 4")
    scatter.ade(Height, Girth, wall = 5, main = "wall = 5")
    scatter.ade(Height, Girth, wall = 6, main = "wall = 6")
    detach(trees) # 解绑数据集
    7a690702546d2e629ae0bf5ff9bf32d9.png

    除了上面的功能外,该函数还有一些其他的功能,比如说分组绘制散点图、绘制线性回归线、调整图例等。

    library(epade) # 加载包
    attach(Puromycin) # 绑定数据集
    scatter.ade(conc, rate, group=state, # 绘制图形
                col = c("royalblue3""sienna1"), # 设置颜色
                legendon = "topleft", wall = 6# 调整图例,设置图形风格
                main = "分组绘制散点图"# 添加标题
    detach(Puromycin) # 解绑数据集
    e0a2e218a7b2b8fc9560f1ca54fd1618.png

    5. 增强版散点图

    5.1 xyplot()函数

    除了上面的包和函数可以绘制散点图外,还有一些包也可以绘制复杂性的散点图。

    比如说car包中的scatterplot()函数和lattice包的xyplot()函数。

    library(lattice) # 加载数据集
    attach(Puromycin) # 绑定数据集
    xyplot(rate ~ conc | state) # 绘制图形
    detach(Puromycin) # 解绑数据集
    f90cf314c0464f15d1f0e6b19cf3c5fd.png

    5.2 scatterplot()函数

    car包中的scatterplot()函数增强了散点图的许多功能,它可以很方便地绘制散点图,并能添加拟合曲线、边界箱线图和置信椭圆,还可以按子集绘图和交互式地识别点。

    library(car) # 加载包
    attach(trees) # 绑定数据集
    scatterplot(Height, Girth) # 绘制图形
    detach(trees) # 解绑数据集
    ae48be33034e96aa39d018548f983868.png

    6. ggpubr包绘制散点图

    ggpubr包中的ggscatter()函数也可以绘制散点图。

    library(ggpubr)
    data(mtcars)
    df df$cyl head(df[, c("wt""mpg""cyl")], 3)

    #                  wt  mpg cyl
    # Mazda RX4     2.620 21.0   6
    # Mazda RX4 Wag 2.875 21.0   6
    # Datsun 710    2.320 22.8   4
    ggscatter(df, x = "wt", y = "mpg",
              color = "cyl", shape = "cyl",
              palette = c("#00AFBB""#E7B800""#FC4E07"),
              ellipse = TRUE, mean.point = TRUE,
              star.plot = TRUE)
    8d7881b7ccec3546e1d76de695631f79.png
    df$name ggscatter(df, x = "wt", y = "mpg"# 绘图用的数据
              color = "cyl"# 将分组变量传递给颜色参数
              palette = c("#00AFBB""#E7B800""#FC4E07"), # 调色板
              label = "name"# 给散点添加标签
              repel = TRUE
    3268022e6fb33b52e5c018728ba93b80.png

    7. scatterplot()函数解释

    # 调用函数1:
    scatterplot(formula, data, subset, xlab, ylab, id=FALSE,
        legend=TRUE...)
    # 调用函数2:    
    scatterplot(x, y, boxplots=if (by.groups) "" else "xy",
                regLine=TRUE, legend=TRUE, id=FALSE, ellipse=FALSE, grid=TRUE,
                smooth=TRUE,
                groups, by.groups=!missing(groups),
                xlab=deparse(substitute(x)), ylab=deparse(substitute(y)),
                log="", jitter=list(), cex=par("cex"),
                col=carPalette()[-1], pch=1:n.groups,
                reset.par=TRUE...)

    ## 部分参数解释
    formula # 模型公式;类似y~x,如果按组绘制,则类似y~x|z,其中z为分组变量;
    data # 为模型公式中变量来源的数据集;
    subset # 指定筛选数据子集;
    x, y # 分别表示水平(x轴)和垂直(y轴)坐标的数字向量;
    boxplots # 如为x,则在下方绘制水平x轴的边界箱线图;如为y,则在左边绘制垂直y轴的边界箱线图;
    # 如为xy,则在水平和垂直轴上都绘制边界箱线图;设置""或FALSE则不绘制边界箱线图;
    regLine # 默认添加拟合回归线;如为FALSE,则不添加;
    # 指定lm()函数拟合回归线,默认参数为regLine=list(method=lm, lty=1, lwd=2, col=col)
    legend # 逻辑词,当按组绘制散点图且为TRUE时图上显示图例;为FALSE则不绘制图例;
    grid # 逻辑词,为TRUE则绘制浅灰色背景网格;
    groups # 分组变量或因子;使用不同的颜色、绘图符号等来绘制分组图形;
    by.groups # 为TRUE,则按分组拟合回归线;
    xlab、ylab # x轴和y轴标签;
    log # 绘制对数坐标轴;
    jitter # 包含x、y或两者都有的列表;指定散点图中点的水平和垂直坐标的抖动因子;
    cex # 设置绘图字符的大小,默认为1;
    # 其他参数为cex.axis、cex.lab、cex.main和cex.sub等;
    col # 未分组时,直接指定绘制颜色;分组时,设置参数长度应等于组数的颜色向量;
    pch # 点的绘图符号;分组时默认按顺序使用字符;

    8. ggscatter()函数解释

    ggscatter(data, x, y, combine = FALSE, merge = FALSE, color = "black", fill = "lightgray",
      palette = NULL, shape = 19, size = 2, point = TRUE, rug = FALSE,
      title = NULL, xlab = NULL,  ylab = NULL,  facet.by = NULL,  panel.labs = NULL,  short.panel.labs = TRUE,
      add = c("none""reg.line""loess"),  add.params = list(), conf.int = FALSE, conf.int.level = 0.95,
      fullrange = FALSE, ellipse = FALSE, ellipse.level = 0.95, ellipse.type = "norm", ellipse.alpha = 0.1,
      ellipse.border.remove = FALSE, mean.point = FALSE, mean.point.size = ifelse(is.numeric(size), 2 * size, size),
      star.plot = FALSE, star.plot.lty = 1, star.plot.lwd = NULL,
      label = NULL, font.label = c(12"plain"),
      font.family = "", label.select = NULL, repel = FALSE, label.rectangle = FALSE,  parse = FALSE,
      cor.coef = FALSE, cor.coeff.args = list(), cor.method = "pearson",
      cor.coef.coord = c(NULLNULL), cor.coef.size = 4,  ggp = NULL,
      show.legend.text = NA, ggtheme = theme_pubr(),
      ...)

    ## 部分参数解释
    data, x, y # data指数据框,x、y为数据框中用来绘制图形的变量
    combine # 逻辑词,默认FALSE,仅当y是包含多个变量的向量时使用;如为TRUE,则创建组合面板图
    merge # 逻辑词或字符;默认FALSE,仅当y是包含多个变量的向量时使用;如为TRUE,则在同一绘图区域合并多个y变量;
    # 字符为"asis"或"flip",如为"flip",则y变量翻转为x轴刻度,x变量翻转为分组变量
    color、fill # 设置点的颜色
    palette # 设置线图颜色的调色板;可为灰色调色板"grey";自定义调色板c("blue","red")
    # ggsci包调色板:"npg","aaas","lancet","jco","ucscgb","uchicago","simpsons"和"rickandmorty"。
    shape # 点的形状
    size  # 数值,设置点和轮廓的大小
    point  # 逻辑词,为TRUE,则在图上显示点
    rug # 逻辑词,为TRUE,则显示边缘地毯
    title # 图形标题
    xlab、ylab  # 指定x轴、y轴的标签;当xlab = FALSE时隐藏标签,y轴同
    facet.by  # 长度为1-2的字符向量,指定绘制分面的分组向量,分组向量应在数据框中
    panel.labs  # 修改面板标签的字符向量的列表;用法:
    # 一个分组向量:panel.labs = list(sex = c("Male", "Female")) 
    # 两个分组向量:panel.labs = list(sex = c("Male", "Female"),rx = c("Obs","Lev","Lev2")).
    short.panel.labs # 逻辑词,默认为TRUE,省略变量名称为面板创建简短标签
    add  # 添加另一个绘图元素的字符向量;
    # 如"none", "dotplot", "jitter", "boxplot", "point", 
    # "mean", "mean_se", "mean_sd", "mean_ci", "mean_range", 
    # "median", "median_iqr", "median_hilow", "median_q1q3", 
    # "median_mad", "median_range"
    add.params  # 参数add的参数(color, shape, size, fill, linetype),
    # 用法add.params = list(color = "red").
    conf.int # 逻辑词,为TRUE,则增加置信区间
    conf.int.level # 设置置信区间的置信水平,默认95%
    fullrange # 仅在add!="none"时使用,拟合是跨越图的整个范围还是只跨越数据?
    ellipse # 逻辑词,为TRUE,则在点周围绘制椭圆
    ellipse.level # 点周围椭圆的大小,默认0.95
    ellipse.type # 使用字符来指定框的类型,允许值有"convex", "confidence"、"t"、"norm"、"euclid"等
    ellipse.alpha # 椭圆的透明度,用于指定填充颜色的透明度,无填充颜色,设置为0。
    ellipse.border.remove # 逻辑词,为TRUE,则删除椭圆边框线
    mean.point # 逻辑词,为TRUE,则将分组平均点添加到绘图中
    mean.point.size # 指定平均点大小的数值
    star.plot # 逻辑词,为TRUE,则生成星图
    star.plot.lty、star.plot.lwd # 星图的线型和线宽
    label # 包含点标签的列的名称,也可以是长度=nrow(data)的向量
    font.label # 包含下列元素的列表:大小、类型、颜色等;用法:
    # font.label = list(size = 14, face = "bold", color ="red")
    font.family # 指定标签的字体格式
    label.select # 字符向量,指定要显示的一些标签;
    repel # 逻辑词,是否使用ggrepel避免过度绘制文本标签。
    label.rectangle # 逻辑词,如为TRUE,则在文本下方添加矩形便于阅读
    parse # 为TRUE,标签将被解析为表达式
    cor.coef # 逻辑词,为TRUE,相关系数的p值添加到图上
    cor.coeff.args # 一系列参数传递给stat_cor函数,用来自定义相关系数的显示,用法:
    # cor.coeff.args = list(method = "pearson", label.x.npc = "right", label.y.npc = "top").
    cor.method # 计算相关系数的方法,可用值:"pearson", "kendall"或"spearman".
    cor.coef.coord # 长度为2的数字向量,指定相关系数的x、y坐标,默认值为NULL
    cor.coef.size # 相关系数文字字体的大小
    ggp # 不为NULL,则将点添加到现有绘图中
    show.legend.text # 逻辑词,图例中是否包含文字;
    ggtheme # ggplot2主题名称,默认为theme_pubr();
    # 可用值包括theme_gray(),theme_bw(),theme_minimal(),theme_classic(),theme_void()...

    以上函数解释翻译自帮助文件,如有错误/不懂地方,请自行查阅帮助文件。

    参考资料

    1. Graphing Data with R. John Jay Hilfiger著
    2. [美]Robert I.Kabacoff著.R语言实战(第2版)[M].王小宁等译.北京:人民邮电出出版社.2016.
    3. scatterplot()函数帮助文件
    4. ggscatter()函数帮助文件

    f78540fad1e7ea5b89ede48bf478050d.png

    热烈欢迎小伙伴们转发、点赞、点在看~~~

    展开全文
  • 前两期分别介绍了R-ggplot2 基础散点图R-ggplot2 基础图表绘制-散点图和 Python-seaborn基础散点图Python-seaborn 基础图表绘制-散点图 的绘制方法,较为系统的介绍了绘图的基础语法,也为一些绘图基础不是很好的小...

    前两期分别介绍了R-ggplot2 基础散点图R-ggplot2 基础图表绘制-散点图和 Python-seaborn基础散点图Python-seaborn 基础图表绘制-散点图 的绘制方法,较为系统的介绍了绘图的基础语法,也为一些绘图基础不是很好的小伙伴提供了参考方法,基础的讲过了,接下里我们将示例应用了啊(也是这个系列推文的流程啊:基础+示例演示),只为让你更好的掌握绘图知识点。本期的推文就使用R-ggplot2进行一个较为经典的图表仿制,也是自己一直想制作的图表。主要涉及的知识点如下:

    • geom_smooth()绘制拟合线
    • ggrepel::geom_text_repel()绘制不重叠文本

    ggplot2 + ggrepel 图表再现

    这期的推文绘图示例我们使用的是经济学人经典的一张图表,如下:1a12589cbc7ebf6bb896ac96fd0002c7.png接下来我们就使用ggplot2 + ggrepel 包进行再现,首先,我们预览下本期数据(数据都已经进过处理,也就是简单的数据替换和选择,Python的pandas包和 R的dplyr等包都可以进行处理,这里不做介绍)(部分):b66af60915de72a5ec799726f7fd16f9.png已经整理成符合ggplot2绘图的数据要求,接下俩就是使用ggplot2进行绘制,具体代码如下:

    ggplot(plot_data, aes(x = CPI, y = HDI, color = Region)) + 
        geom_point(size = 2.5, shape = 21, fill = "white", stroke = 1)

    98e844cef08f56579ffe3d0b85f36efb.png这里就得到了大致的效果图,观察参考图表,我们可以发现有些国家的名字是显示出来的,这里我们进行单独列出来:

    country_show "Russia", "Venezuela""Iraq""Myanmar""Sudan",
                       "Afghanistan""Congo""Greece""Argentina""Brazil",
                       "India""Italy""China""South Africa""Spain",
                       "Botswana""Cape Verde""Bhutan""Rwanda""France",
                       "US""Germany""Britain""Barbados""Norway""Japan",
                       "New Zealand""Singapore")

    接下里,我们直接贴出绘图代码,如下:

    ggplot(data = plot_data,aes(x=CPI,y = HDI,colour=Region)) +
      geom_point(shape=21,size=2.5,fill="white",stroke=1.2) +
      geom_smooth(method = "lm",formula = y ~ log(x),se = FALSE,color = "red",size=.8,fullrange = TRUE,
                 aes(fill = "R^2=56%")) +

      geom_text_repel(aes(label = Country), color = "grey20",segment.color = "grey30",
                      data = subset(plot_data,Country %in% country_show),
                      point.padding = unit(0.03, 'npc'),
                      force = 1, 
                      nudge_y = 0.015, 
                      nudge_x = 0.0,
                      )+
      scale_colour_manual(name = NULL,values = c('#01344A','#228DBD','#6DBBD8','#1B6E64','#D24131','#621107'), 
                          labels = c("OECD","Americas","Asia & \nOceania","Central & \nEastern Europe",
                                     "Middle East & \nnorth Africa""Sub-Saharan \nAfrica"))+
      scale_x_continuous(limits = c(1, 10), breaks = c(1:10)) +
      scale_y_continuous(limits = c(0.2,1), breaks = c(0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0)) +
      labs( 
           x = "Corruption Perceptions Index, 2011 (10=least corrupt)"
           y = "Human Development Index, 2011 (1=best)",
           title = "Corruption and human development",
           subtitle = "Base charts: Scatter Exercise",
           caption = "Visualization  by DataCharm") +
      theme_bw() +
      #设置图例
      guides(colour = guide_legend(nrow = 1),
             fill = guide_legend(title = ""))+
      theme(
            legend.position = "top",
            legend.justification = 0,
            panel.grid.major.x = element_blank(),
            panel.grid.minor.x = element_blank(),
            panel.grid.minor.y = element_blank(),
            plot.title = element_text(size = 14,face = "bold",hjust = .5),
            plot.subtitle = element_text(hjust = .5),
            axis.title = element_text(face = 'italic', size = 8),
            plot.caption = element_markdown(size = 8, hjust = 1),
            panel.border = element_blank(),
            axis.line.x = element_line(color = "black"),
            axis.ticks.y = element_blank(),
            axis.ticks.length=unit(-0.1, "cm"),
            axis.text.x = element_text(margin=unit(c(0.5,0.5,0,0), "cm"))
           )

    可视化效果如下:0b3933e9bcc42ac1fc5e74dd5eb5ec53.png

    1. geom_smooth()绘制拟合线
     geom_smooth(method = "lm",formula = y ~ log(x),se = FALSE,color = "red",size=.8,fullrange = TRUE,
                 aes(fill = "R^2=56%"))

    这里se=FALSE 去除拟合范围,fullrange = TRUE 是拟合线包括数据全范围,method = "lm",formula = y ~ log(x) 则表示对数线性拟合

    1. geom_text_repel()添加文本

    由于原图文字与散点之间的链接线设置较为合理,这里我们可以使用geom_segment()单独进行位置设置并连线,这里我们就不使用此方法,直接使用geom_text_repel()进行绘制即可(当然最终效果也不如原图):

     geom_text_repel(aes(label = Country), color = "grey20",segment.color = "grey30",
                      data = subset(plot_data,Country %in% country_show),
                      point.padding = unit(0.03, 'npc'),
                      force = 1, 
                      nudge_y = 0.015, 
                      nudge_x = 0.0,
                      )+
    1. theme(主题)设置 这里的主题则是根据原图进行刻度、网格、背景等元素的添加,详细代码如下:
     theme(
            legend.position = "top",
            legend.justification = 0,
            panel.grid.major.x = element_blank(),
            panel.grid.minor.x = element_blank(),
            panel.grid.minor.y = element_blank(),
            plot.title = element_text(size = 14,face = "bold",hjust = .5),
            plot.subtitle = element_text(hjust = .5),
            axis.title = element_text(face = 'italic', size = 8),
            plot.caption = element_markdown(size = 8, hjust = 1),
            panel.border = element_blank(),
            axis.line.x = element_line(color = "black"),
            axis.ticks.y = element_blank(),
            axis.ticks.length=unit(-0.1, "cm"),
            axis.text.x = element_text(margin=unit(c(0.5,0.5,0,0), "cm"))
           )

    (这里虽然进行了图表一定程度上的再现,但还是存在部分细节之处没有很好的仿制,这里我么只学习绘图技巧啊)

    总结

    本期推文我们进行了散点示例图的绘制,主要目的还是进行图表技巧的练习,希望可以给大家提供些绘图灵感。

    推荐阅读

    • R可视乎|三维散点图

    • gghalves包-你五毛我五毛

    • R可视乎|气泡图

    • 用ggpubr包制图

    • R可视乎|蜂群图

    • R可视乎 | 散点图系列(2)

    • R可视乎 | 散点图系列(1)

    • R 可视乎 | 华夫饼图

    • R可视乎|混合多个图形

    • R可视乎|分面一页多图

    文章来源于DataCharm,作者宁海涛

    好文!必须在看
    展开全文
  • 使用的数据集为R语言自带的mtcars数据集,使用x值向量和y值向量plot()并将其传递给它:plot(mtcars$wt, mtcars$mpg) 使用ggplot2,您可以使用ggplot()函数获得类似的结果:library(ggplot2) attach(mtcars) ggplot...

    使用的数据集为R语言自带的mtcars数据集,使用x值向量和y值向量plot()并将其传递给它:

    plot(mtcars$wt, mtcars$mpg)

    ba8c29ccca9146409d4b4c3621f82ce9.png

    使用ggplot2,您可以使用ggplot()函数获得类似的结果:

    library(ggplot2)
    attach(mtcars)
    ggplot(mtcars,aes(x = wt,y=mpg))+geom_point()

    06daf3c152cdd809848558ef746e0d3f.png

    第一部分,ggplot()告诉它创建一个绘图对象,第二部分geom_point(),告诉它向绘图添加一层点。

    通常的使用方法ggplot()是向其传递一个数据帧(mtcars),然后告诉它用于x和y值的列。如果要将x和y值的两个向量传递给它,可以使用data = NULL,然后将向量传递给它。ggplot2设计用于将数据集作为数据源,而不是单独的矢量,并且以这种方式使用它只会允许您使用其功能的有限部分。

    ggplot(data = NULL, aes(x = mtcars$wt, y = mtcars$mpg)) +
      geom_point()

    e6e55da8668611fb6d289bc8ac028162.png

    使用geom_point(),并将一个变量映射到x,将一个变量映射到y。我们将使用heightweight数据集。此数据集中有许多列,但在此示例中我们仅使用两列:

    library(gcookbook) # 加载重量级数据集的gcookbook
    library(dplyr)
    library(ggplot2)
    # 显示我们将在绘图中使用的两列的标题
    heightweight %>%
      select(ageYear, heightIn)
    ggplot(heightweight, aes(x = ageYear, y = heightIn)) +
      geom_point()

    2320d7404041c1580a279f71de0f73a8.png

    还可以使用shape美学来代替散点图,而不是点。默认实心圆的,常见替代方法是空心实心圆:

    ggplot(heightweight, aes(x = ageYear, y = heightIn)) +
      geom_point(shape = 21)

    df0404d35509524acbbce4d657e350b2.png

    点的大小可以通过size美学来控制。大小的默认值为2(size = 2)。以下代码将设置size = 1.5为创建较小的点:

    ggplot(heightweight, aes(x = ageYear, y = heightIn)) +
      geom_point(size = 1.5)

    f92b7a648a0893b0f966b35f4c788dc2.png

    使用形状或颜色将点分组在一起

    若您想使用不同的形状或颜色按某个变量(分组变量)在视觉上对点进行分组。将分组变量映射到shape或的美感colourheightweight在此示例中,我们将使用数据集中的三列:

    library(gcookbook) # 加载包
    heightweight %>%  #查看数据集
      select(sex, ageYear, heightIn)

    2888e32e3f3db8bf94cfe494038e0e0a.png

    我们可以利用colourshape从视觉上区分属于的不同类别的数据点sex。我们通过映射sex到美学的一个colourshape,您选择的分组变量必须是分类的,换句话说,是因子或特征向量。如果分组变量是数字矢量,则应首先将其转换为因子。可以将变量同时映射到shapecolour,或者,如果您有多个分组变量,则可以将每个分组变量映射到不同的外观。在这里,我们将映射变量sexshapecolour美学。

    您可能要使用与默认设置不同的形状和颜色。您可以使用来为分组变量选择其他形状scale_shape_manual(),并使用scale_colour_brewer()或选择其他颜色scale_colour_manual()。:

     ggplot(heightweight, aes(x = ageYear, y = heightIn, shape = sex, colour = sex)) +
      geom_point()

    cf3d2ae81aa7c6a73552bc9f0555d0fa.png

    0f035e993ef44e3f66c0f7a6ca6f04c3.png

    使用不同的点形

    若您想要更改数据点的默认散点图形状。可以通过在以下位置设置形状来一次设置所有数据点的形状geom_point()

    library(gcookbook) # Load gcookbook for the heightweight data set
    
    ggplot(heightweight, aes(x = ageYear, y = heightIn)) +
      geom_point(shape = 3)

    9e39d26dcddb235c6ca72b5fa09eaf29.png

    如果您已将变量映射到shape,则可以scale_shape_manual()用来手动更改映射到该变量级别的形状:

    # 用稍大点的形状和使用自定义值
    ggplot(heightweight, aes(x = ageYear, y = heightIn, shape = sex)) +
      geom_point(size = 3) +
      scale_shape_manual(values = c(1, 4))

    0dcaf5b059db06780165904bf67f8ae9.png

    R图形中显示了R中已经内置的形状。一些点形状(1–14)仅具有轮廓。有些(15–20)充满固体;有些(21–25)具有轮廓和填充,可以单独控制。您也可以使用字符作为点。对于1–20形状,整个点的颜色(甚至包括具有实心填充的点)的颜色都由colour美观度控制。对于形状21–25,轮廓由来控制,colour填充由来控制fill

    869a07da99fb72323e3d6622786b4014.png

    可以用一个点的形状表示一个变量,用该点的填充(空或填充)表示另一个变量。为此,您需要首先选择同时具有颜色和填充度的点形状,然后在中进行设scale_shape_manual。 然后,您需要选择一个包含NA,另一种颜色(这NA将导致空心形状)的填充调色板,并将其用于中scale_fill_manual()

    # 使用heightweight数据集,创建一个新的列表明如果
    #.孩子< 100 > = 100磅重。我们将保存修改过的数据集作为“hw”
    hw <- heightweight %>%
      mutate(weightgroup = ifelse(weightLb < 100, "< 100", ">= 100"))
    # 填充指定不同的形状,颜色,并指定填充颜色,包括空(NA)的颜色
    ggplot(hw, aes(x = ageYear, y = heightIn, shape = sex, fill = weightgroup)) +
      geom_point(size = 2.5) +
      scale_shape_manual(values = c(21, 24)) +
      scale_fill_manual(
        values = c(NA, "black"),
        guide = guide_legend(override.aes = list(shape = 21))
      )

    8669e04330d0cabd00ff1cad819447b6.png

    将连续变量映射到颜色或大小

    使用颜色或大小表示第三个连续变量。将连续变量映射到sizecolour。heightweight在本示例中,我们将使用数据集。此数据集中有很多列,但是在此示例中,我们将仅使用其中的四个:

    library(gcookbook) 
    heightweight %>%
      select(sex, ageYear, heightIn, weightLb)

    在上文中的基本散点图显示了连续变量ageYear和之间的关系heightInweightLb通过将此变量映射到另一个美学属性,例如colour或,我们可以表示第三个连续变量,size

    ggplot(heightweight, aes(x = ageYear, y = heightIn, colour = weightLb)) +
      geom_point()

    b58e803e8d04d5bc087c3cbfee1af6c4.png
    ggplot(heightweight, aes(x = ageYear, y = heightIn, size = weightLb)) +
      geom_point()

    e8b8326a947500a15ceaf6ce6edef87a.png

    基本散点图显示了两个连续变量之间的关系:一个映射到x轴,另一个映射到y轴。当有两个以上的连续变量时,这些附加变量必须映射到其他美感,例如sizecolor

    人类可以轻松感知空间位置的细微差异,因此我们可以高精度地解释映射到xy坐标的变量。人类是不是擅长在感知小的差异sizecolor了,所以我们将解释映射到低得多的精度这些审美属性变量。因此,当您将变量映射到size或时color,请确保该变量是高精度对正确解释数据不是很重要的变量。

    将变量映射到时size,还有另一个考虑因素,那就是结果在感知上可能会产生误导。虽然上文中最大的点的大小约为最小点的36倍,但它们仅代表最小点的权重的3.5倍。

    大小的这种相对错误表示是因为ggplot2中点直径的默认值范围是1到6mm,而与实际数据值无关。例如,如果数据值的范围是0到10,则在图上以1mm宽的点表示最小值0,而在图上以6mm的点表示最大值10。宽。同样,如果数据值从100到110,则最小值100仍将由1mm宽的点表示,而最大值110将由6mm宽的点表示。因此,无论实际数据值如何,最大点的直径都是最小点直径的6倍,并且是面积的36倍。

    如果对点的大小准确反映数据值的比例差异很重要,则应首先确定是要用点的直径来表示数据值,还是要用点的面积来表示数据值。如上图显示了这些表示形式之间的差异。

    range(heightweight$weightLb)
    size_range <- range(heightweight$weightLb) / max(heightweight$weightLb) *  6
    size_range
    ggplot(heightweight, aes(x = ageYear, y = heightIn, size = weightLb)) +
      geom_point() +
      scale_size_continuous(range = size_range)

    b4f29db75501fa967863a2ea8ae730cd.png

    128bbe95f20c951e7a3e281efd6854c5.png
    ggplot(heightweight, aes(x = ageYear, y = heightIn, size = weightLb)) +   geom_point() +   scale_size_area()

    147d4f6963533c199053da25ae8f49c1.png

    实际上可以使用两种美学属性:colorfill。您将使用color大多数点形状。但是,形状21–25的轮廓在中间具有实心区域,其中颜色由填充控制。当使用如上图所示的浅色色标时,这些轮廓形状可能会很有用,因为轮廓使形状偏离了背景。在此示例中,我们还将填充梯度设置为从黑色到白色,并使点变大,以便更容易看到填充。

    将连续变量映射到美学并不妨碍我们将类别变量映射到其他美学。我们将映射weightLbsize并映射sexcolor。由于存在大量重复绘图(点重叠),因此我们可以通过设置将点透明化50%alpha = .5。我们还将使用scale_size_area()使点的面积与数据值成正比的方法,并手动更改调色板:将变量映射到时size,最好不要将变量映射到shape。这是因为很难比较不同形状的大小。例如,大小为4的三角形可能会大于大小为3.5的圆。此外,某些形状的大小实际上是不同的;形状16和19都是圆形,但是在任何给定的数字大小下,形状19的圆形在视觉上都比形状16的圆形大。

    参考书籍:《R graphics cookbook 2nd》,仅作学习用。

    展开全文
  • R语言绘制散点图

    2021-05-06 14:49:56
    今天小编来分享一下R语言绘制散点图的代码。 1.小编使用的是R自带的数据集,先调用出数据集; #调用R自带数据集 library(gcookbook) head(heightweight) 2.绘制离散型变量的散点图; ##映射离散型型变量 ##基于...

    今天小编来分享一下R语言绘制散点图的代码。

    1.小编使用的是R自带的数据集,先调用出数据集;

    #调用R自带数据集
    library(gcookbook)
    head(heightweight)
    

    在这里插入图片描述
    2.绘制离散型变量的散点图;

    ##映射离散型型变量
    ##基于颜色和点形对数据进行分组可指定colour或者shape两种参数,分别将不同分组以不同颜色/点形表述
    # 基函数:colour设置分组
    library(ggplot2)
    ggplot(heightweight, aes(x = ageYear, y = heightIn, colour = sex)) +
      # 散点图函数
      geom_point()
    

    在这里插入图片描述

    # 基函数:shape设置分组
    ggplot(heightweight, aes(x = ageYear, y = heightIn, shape = sex)) +
      # 散点图函数
      geom_point()
    

    在这里插入图片描述
    3.如果需要映射除横纵轴以外的连续性变量,可以映射到散点图的色深和点大小上;

    ##映射连续型变量
    # 上一个示例中,映射到分组的变量是离散型变量。而对于除了横轴纵轴之外的连续型变量,也可以映射到散点图的色深和点大小上
    # 基函数:colour绑定连续变量
    ggplot(heightweight, aes(x = ageYear, y = heightIn, colour = weightLb)) +
      # 散点图函数
      geom_point()
    

    在这里插入图片描述

    # 基函数:size绑定连续变量
    ggplot(heightweight, aes(x = ageYear, y = heightIn, size = weightLb)) +
      # 散点图函数
      geom_point()
    

    在这里插入图片描述
    4.处理散点重叠问题,调用size、colour分别绑定连续变量;

    ##处理散点重叠
    # 基函数:size、colour分别绑定连续变量
    ggplot(heightweight, aes(x = ageYear, y = heightIn, size = weightLb, colour = sex)) +
      # 散点图函数:alpha设置散点透明度
      geom_point(alpha = .5) +
      # 使散点的面积正比与变量值
      scale_size_area() +
      # 标尺函数:palette设置配色方案
      scale_colour_brewer(palette = "Set1")
    

    在这里插入图片描述
    5.添加回归模型拟合线(此处绘制的是局部线性回归模型);

    ##添加回归模型拟合线
    # 基函数:sex绑定离散变量
    ggplot(heightweight, aes(x = ageYear, y = heightIn, colour = sex)) +
      # 散点图
      geom_point() +
      # 标尺函数:palette设置配色方案
      scale_colour_brewer(palette = "Set1") +
      # 拟合回归线段以及置信域(默认0.95/通过level参数可自定义)
      geom_smooth()
    

    在这里插入图片描述
    6.若想拟合经典线性回归模型,可往geom_smooth()函数中加入"method = lm";

    #线段为曲线是因为参与拟合模型为局部线性回归模型。往geom_smooth()函数中加入"method = lm"即可拟合经典线性回归。结果如下图:
    ggplot(heightweight, aes(x = ageYear, y = heightIn, colour = sex)) +
      # 散点图
      geom_point() +
      # 标尺函数:palette设置配色方案
      scale_colour_brewer(palette = "Set1") +
      # 拟合回归线段以及置信域(默认0.95/通过level参数可自定义)
      geom_smooth(method = lm)
    

    在这里插入图片描述
    7.添加边际地毯;

    ##向散点图添加边际地毯
    # 基函数
    library(gcookbook)
    head(faithful)
    ggplot(faithful, aes(x = eruptions, y = waiting)) +
      # 散点图函数
      geom_point() +
      # 边际地毯函数
      geom_rug()
    

    在这里插入图片描述
    在这里插入图片描述
    8.添加标签(小编这里随意添加了一个标签,仅作展示用);

    ##向散点图添加标签
    # 基函数
    library(gcookbook)
    head(heightweight)
    ggplot(heightweight, aes(x = ageYear, y = heightIn)) +
      # 散点图函数
      geom_point() +
      # 文本函数:aes参数中:y将原有纵轴值向上偏移,label设置绑定文本
      # 将y轴偏移的目的是为了让文本展示在样本点上方而不是中间
      geom_text(aes(y = heightIn + .2, label = sex))
    

    在这里插入图片描述

    展开全文
  • R语言绘图:在地图上绘制散点图

    千次阅读 2019-10-06 02:30:41
    使用ggplot2在地图上绘制散点图 ######*****绘制散点图代码*****####### options(baidumap.key = '**************') #设置密钥 beijing <- getBaiduMap('北京市', width = 600, height = 600, ...
  • 原标题:在R语言中绘制散点图最快的方法欢迎关注本号,本号一直以来坚持更新R语言的内容,到目前基本语法部分已使用20多篇文章介绍完了,现在开始介绍R绘图方面的内容,如果您喜欢本号的文章,请关注或收藏。...
  • 前言考虑到很多同学可能还没有安装matplotlib包,这里给大家提供我常用的安装方法。首先Win键 + R,输入命令cmd...一、简单散点图1.代码import numpy as npimport matplotlib.pyplot as plt#生成散点数据n = 1024X ...
  • 今天我们给大家介绍一个绘制抖动散点图R包ggbeeswarm,但是呢,如果真正多样化绘制还需要ggplot2的协助。那么也就是我们需要两个包来完成我们抖动散点图绘制:ggbeeswarm和ggplo2。具体安装我们不再赘述,ggplot...
  • R语言 绘制散点图

    万次阅读 2018-08-27 11:43:39
    简单地说,把一些R语句(赋值、计算或其他操作步骤)包 装起来并给它一个名称,这就是函数。我们前面接触过的 getClass( ), class( ), head( ), rep( ), cbind( ), rbind( )等都是函数。显示(打印)对象...
  • 散点图可用来描述两个连续型变量间的... 绘制简单散点图2.1 绘制部分散点2.2 绘制全部散点3. 自定义参数3.1 添加网格线3.2 添加回归线4. 商业化散点图4.1 asTheEconomist()函数4.2 scatter.ade()函数5. 增强版散点图...
  • ggplot2 + ggExtra绘制边际散点图
  • 简介上期我们说了气泡图。...有关散点图前几部分系列可见(可跳转):趋势显示的二维散点图分布显示的二维散点图气泡图R 中scatterplot3d包的scatterplot3d()函数、rgl包的plot3d()[2]函数、plot3D包的scatte...
  • 绘制散点图(scatterplots)使用geom_point()函数,气泡图(bubblechart)也是一个散点图,只不过点的大小由一个变量(size)来控制。散点图潜在的最大问题是过度绘图:当一个位置或相邻的位置上出现有多个点,就...
  • Excel绘制散点图并拟合,输出拟合公式结果和R值的方法
  • R语言ggplot2包绘制散点图详解

    千次阅读 2020-03-19 09:44:44
    首先,使用R内置数据attitude绘制complaints和learning的散点图。请注意ggplot2语法和R原生代码的区别。ggplot2采用图层模式,不同图层用“+”叠加。 > head(attitude,3) rating complaints p...
  • 本节书摘来异步社区《R数据可视化手册》一书中...2.1 绘制散点图 问题如何绘制散点图? 方法使用plot()函数可绘制散点图(见图2-1),运行命令时依次传递给plot()函数一个向量x和一个向量y。``plot(mtcars$wt,mtca...
  • R语言绘制散点图结合边际分布图

    千次阅读 2020-08-03 16:39:02
    本博客主要介绍使用R语言利用ggplot绘制散点图,并且在图像的两边绘制边际分布图(包括边际直方图与边际密度函数) 我们这里介绍两种方法进行绘制: 主要使用ggExtra结合ggplot2两个R包进行绘制。(胜在简洁方便) ...
  • 可先阅读文章:R绘图笔记 | R语言绘图系统与常见绘图函数及参数1.利用plot()绘制散点图R语言中plot()函数的基本格式如下:plot(x,y,...) plot函数中,x和y分...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 555
精华内容 222
关键字:

绘制散点图r