R语言ggplot2绘图安装与调试

 更新时间:2023年06月13日 08:20:05   作者:ytcboy  
ggplot2是R语言中最常用的绘图包之一,它提供了一种基于图层的绘图语法,使得用户可以轻松地创建高质量的数据可视化图表。在使用ggplot2之前,需要先安装该包并进行调试。安装ggplot2可以通过CRAN或GitHub进行,调试则需要注意数据格式、语法错误等问题。

0x01 安装与R基础

一直听说数据分析里R语言是比较‘正统’,况且久闻ggplot2这些R语言的数据分析库大名,想到今后数据分析和整理的需要,这里开一个简单的系列学习一些R语言和ggplot2的绘图基础。本人学习的书籍是Winston Chang大佬的《R Graphics Cookbook》,且稍有一点Python里的Plotnine绘图基础。但我算是R语言小白,所以整个系列也可以记录自己学习遇到的坑,供大家参考。

库安装

我使用的R版本为3.6.3,需要下载的库包括ggplot2,gcookbook和dplyr库。可以使用如下的安装指令:

install.packages("ggplo2")
install.packages("dplyr")
install.packages("gcookbook")

如果遇到了installation of package ‘ggplot2’ had non-zero exit status类似的问题,可以指定安装程序强制安装二进制文件[1],如

install.packages("ggplo2", type = "binary") 

R语言数据处理基础

首先简单介绍数据输入常用的两种方法,一种是CSV数据,我们可以采用函数read.csv(file, args)输入;另一种常用数据EXCEL数据可以使用read_excel(file)函数输入数据。

dplyr包(magrittr包)提供了一种运算符%>%,可以在R中实现类似连续函数调用的编程方法,以嵌套函数f,g,h为例:

h(g(f(x)))
# 等价于
x %>% 
  f() %>% 
  g() %>% 
  h()

这样的函数调用相比嵌套函数更加直观,尤其是在多个连续的数据集处理场合。

基础绘图以及概念

散点图和完整流程

绘制图片使用的数据集为mtcars:

mtcars %>% head() 
                   mpg cyl disp  hp drat    wt  qsec vs am gear carb
Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2
Valiant           18.1   6  225 105 2.76 3.460 20.22  1  0    3    1

在开始绘图之前,有一点基本的R语言基础设施需要准备。R语言画图需要有基础的画布,可以用dev.new()函数来开启一个新的画布(如果是windows系统需要使用windows()函数)。

dev.new()
# windows() # windows系统使用

下面直接展示最简单的散点图绘制代码:

p <- ggplot(mtcars, aes(x = wt, y = mpg)) +
  geom_point()

上面的代码就是一个使用ggplot2绘图的最基本结构,ggplot函数是保存数据集和映射信息(aes)等基本信息的绘图主函数,也可以理解为存储所有信息的画布底层。第一个参数放入数据集,后续的映射都在此数据集上进行,本例中就是使用了mtcars中的wt列作为x,mpg列作为y值。ggplot2中的函数基本均是加法进行组合,所以这里加上了geom_point函数组合进绘图。此时geom_point函数通过ggplot函数可以得知其绘图需要用到的键信息(x, y)分别对应的数据值。代码运行结果如下:

绘制完图后,可以选择print(p)来查看图片并保存,或者使用ggplot2自带的函数ggsave来保存图片,基本的格式例如png,pdf等都有[2]。

ggsave(p, "p.png") 

如果想要绘图的数据不属于同一个data frame,那么可以不指定ggplot函数的数据项,在aes映射中直接定义,如下所示:

ggplot(data=null, aes(x = mtcars$wt, y = mtcars$mpg)) 

其他基本绘图与基础

下面的代码展示了R语言绘制线形图的基本函数geom_line,同时展示了ggplot2通过组合函数geom_line和geom_point来绘图的基本逻辑:

p <- ggplot(pressure, aes(x = temperature, y = pressure)) +
  geom_line() +
  geom_point()

对于柱形图,ggplot2的相关支持比较多,这里展示最基础的两种,一个是geom_bar函数:

p <- ggplot(mtcars, aes(x = factor(cyl))) +
  geom_bar()

这里有一个新的函数factor,这个函数是将数据列变化为因子,体现在图上类似于将连续变量转化为了离散的变量。可以看到,上述的映射信息中不包括y值。这是因为geom_bar函数默认的运作方式count,也就是统计x的出现次数并绘图,相当于geom_bar(stat="count"),其中stat选项是统计函数的意思。如果需要绘制具体数值类似y值的柱形图就需要用到下一个函数了。
第二个柱形图的函数是geom_col函数:

p <- ggplot(BOD, aes(x = factor(Time), y = demand)) +
  geom_col()

其实geom_col的效果与geom_bar(stat="identity")是一致的,这样就能随心所欲的绘制柱形图了。

下面的代码示例展示了绘制和柱形图很像的直方图的案例:

p <- ggplot(mtcars, aes(x = mpg)) +
  geom_histogram(binwidth = 3)

直方图也是默认的频率统计,这里略微调整了参数binwidth来放大每个直方的宽度。

下面的代码展示了如何绘制箱型图的例子:

p <- ggplot(ToothGrowth, aes(x = interaction(supp, dose), y = len)) +
  geom_boxplot()

上面除了基本代码还用到了interaction函数,用于组合变量,类似cross join的结果。

除开这些基本绘图,数学函数的绘制也比较容易:

# 自定义函数
myfun <- function(xvar) {
  1 / (1 + exp(-xvar + 10))
}

p <- ggplot(data.frame(xdata = c(0, 20)), aes(x = xdata)) +
stat_function(fun = myfun, geom = "line")

上面的代码首先定义了一个简单的函数,然后将函数作为自定义统计函数stat_function的fun参数输入,并选择绘图方式为line,这样就可以得到一条函数曲线。 总结

本节主旨在于R语言ggplot2绘图的初探,熟悉基本的绘图模式。后续将会一一展开学习库中的绘图细节,完善绘图质量。

ggplot2是R语言中最常用的绘图包之一,使用前需要进行安装和调试。初学者可以通过学习ggplot2教程来更好地理解其绘图语法和使用方法。掌握ggplot2可以帮助用户轻松地创建高质量的数据可视化图表。

参考资料:

[1] 解决R包“had non-zero exit status”安装报错。
[2] ggplot2图片保存

到此这篇关于R语言ggplot2绘图安装与调试的文章就介绍到这了,更多相关R语言ggplot2绘图安装内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Rust 智能指针实现方法

    Rust 智能指针实现方法

    这篇文章主要介绍了Rust 智能指针的实现方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2024-01-01
  • rust 包模块组织结构详解

    rust 包模块组织结构详解

    RUST提供了一系列的功能来帮助我们管理代码,包括决定哪些细节是暴露的、哪些细节是私有的,以及不同的作用域的命名管理,这篇文章主要介绍了rust 包模块组织结构的相关知识,需要的朋友可以参考下
    2023-12-12
  • Rust如何进行模块化开发技巧分享

    Rust如何进行模块化开发技巧分享

    Rust模块化,模块化有助于代码的管理和层次逻辑的清晰,本文主要介绍了Rust如何进行模块化开发,结合实例代码给大家讲解的非常详细,需要的朋友可以参考下
    2023-01-01
  • Rust重载运算符之复数四则运算的实现

    Rust重载运算符之复数四则运算的实现

    这篇文章主要为大家详细介绍了Rust如何实现复数以及复数的四则运算,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-08-08
  • Rust中箱、包和模块的学习笔记

    Rust中箱、包和模块的学习笔记

    Rust中有三个重要的组织概念:箱、包、模块,本文主要介绍了Rust中箱、包和模块的学习笔记,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧
    2024-03-03
  • 详解Rust中三种循环(loop,while,for)的使用

    详解Rust中三种循环(loop,while,for)的使用

    我们常常需要重复执行同一段代码,针对这种场景,Rust 提供了多种循环(loop)工具。一个循环会执行循环体中的代码直到结尾,并紧接着回到开头继续执行。而 Rust 提供了 3 种循环:loop、while 和 for,下面逐一讲解
    2022-09-09
  • Rust中引用和指针的区别详解

    Rust中引用和指针的区别详解

    在 Rust 中,指针和引用都可以用来指向内存中的某个值,它们之间的主要区别在于它们的安全性和生命周期保证,本文将通过一个简单的示例给大家介绍一下Rust中引用和指针的区别,需要的朋友可以参考下
    2023-08-08
  • 如何使用Rust写个猜数字游戏

    如何使用Rust写个猜数字游戏

    这篇文章主要介绍了Rust写个猜数字游戏,本项目通过动手实践,介绍了Rust新概念:let、match、函数、使用外部 crate 等,接下来的文章,你会继续深入学习这些概念,并且介绍大部分编程语言都有的概念,如变量、数据类型和函数,以及如何在 Rust 中使用它们,需要的朋友可以参考下
    2023-12-12
  • 利用Rust编写一个简单的字符串时钟

    利用Rust编写一个简单的字符串时钟

    这篇文章主要为大家详细介绍了一个用rust写的一个简单的练手的demo,一个字符串时钟,在终端用字符串方式显示当前时间,感兴趣的小伙伴可以了解一下
    2022-12-12
  • Rust中FFI编程知识点整理总结(推荐)

    Rust中FFI编程知识点整理总结(推荐)

    这篇文章主要介绍了Rust中FFI编程知识点整理总结,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-09-09

最新评论