百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

用ggplot2画的第一幅图-R语言ggplot2快速入门7

bigegpt 2024-08-05 11:51 8 浏览

WalterWang认为,运行示例程序并修改参数是学习编程的一种高效方式。这种实践中学习的方法不仅可以帮助理解程序的基本结构和语法,还能加深对程序如何响应不同输入的理解。通过实际操作,编程新手能直观地看到代码更改后的效果,从而深入理解程序的运作原理。因而本书以示例为核心。

使用 ggplot2 的关键组件包括:

1,数据(data), 2,一组美学映射,这组映射定义了数据中的变量与视觉属性之间的关系, 3,至少一个层,描述如何渲染每个观测值。层通常通过几何函数(geom function)来创建。

另外WalterWang提醒大家注意,ggplot2只能绘制二维图形。下面我们来绘制第一幅图。

第一幅图

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

我们可以看到我们有三个组件: 数据:mtcars 美学映射:wt 映射到 x 位置,mpg 映射到 y 位置。 层:点。

这里我们用了mtcars数据集,这是 R 语言中一个经典的数据集,它包含了 1973-1974 年间 32 辆汽车的各种规格和性能指标。这个数据集通常用于统计分析和数据可视化的示例教程中,因为它的结构清晰,而且包含多种类型的数据。

数据集中的变量包括:

  • mpg: 汽车每加仑燃油能行驶的英里数(英里/加仑)
  • cyl: 汽车的气缸数
  • disp: 发动机的排量(立方厘米)
  • hp: 发动机的马力
  • drat: 后桥比率
  • wt: 汽车的重量(千克)
  • qsec: 汽车完成四分之一英里加速的时间(秒)
  • vs: 发动机的形状(V型或直列)
  • am: 变速器类型(自动 = 0,手动 = 1)
  • gear: 前进档数
  • carb: 汽化器的数量

在本书中,我们不对数据进行分析。只是来学习如何做图,所以有的图可能没有意义。所以大家对这个数据集可以不不求甚解。

缺省

ggplot()中第一个未命名参数是数据。传递给 aes() 的两个未命名参数将被映射到 x 和 y。这意味着以下代码与上面的示例是相同的:

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

理解数据集应用的基本逻辑

大家可以运行以下程序去理解应用数据集的逻辑。如果不给geom_point() 指明数据集时,geom_point()用ggplot()中指定的数据集

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

我们可以使用来自两个不同数据集的数据。

temp <- mtcars
ggplot(data = NULL) +  geom_point(aes(x = mtcars$wt, y = mtcars$mpg)) +  geom_point(aes(x = temp$wt/4, y = temp$mpg/4))

WalterWang建议你尝试运行以下代码并进行比较。

ggplot(mtcars, aes(x = wt, y = mpg)) +  geom_point() +  geom_point(aes(x = temp$wt/4, y = temp$mpg/4))

理解 ggplot 是一个对象

p <- ggplot(data = mtcars, aes(x = wt, y = mpg))
p
p_base <- p + geom_point()
p_base
p1 <- p_base + geom_point(aes(x = temp$wt/4, y = temp$mpg/4))
p1

由于 ggplot 是一个对象,你可以打印、保存和总结它。

print(p_base)
ggsave("p_base.png", p_base , width = 6, height = 6)
summary(p_base)
## data: mpg, cyl, disp, hp, drat, wt, qsec, vs, am, gear, carb [32x11]
## mapping:  x = ~wt, y = ~mpg
## faceting: <ggproto object: Class FacetNull, Facet, gg>
##     compute_layout: function
##     draw_back: function
##     draw_front: function
##     draw_labels: function
##     draw_panels: function
##     finish_data: function
##     init_scales: function
##     map_data: function
##     params: list
##     setup_data: function
##     setup_params: function
##     shrink: TRUE
##     train_scales: function
##     vars: function
##     super:  <ggproto object: Class FacetNull, Facet, gg>
## -----------------------------------
## geom_point: na.rm = FALSE
## stat_identity: na.rm = FALSE
## position_identity

在一个图中包括多个小图

我们首先介绍这一点,以便于比较不同的图表。我们需要一个新的包 ggpubr。

library(ggpubr)
p1 <- p_base + geom_point(aes(x = temp$wt/4, y = temp$mpg/4))
ggarrange(p_base, p1, ncol = 2, nrow = 1,  widths = c(1, 1),  heights = 0.5)

在以后的章节中,我们都先运行以下这几行程序。

library(ggplot2) 
library(ggpubr) 
library(ggtext) #用于个性化图表 
library(dplyr) #用于数据处理
p_base <- ggplot(data = mtcars, aes(x = wt, y = mpg)) + geom_point()

相关推荐

Go语言泛型-泛型约束与实践(go1.7泛型)

来源:械说在Go语言中,Go泛型-泛型约束与实践部分主要探讨如何定义和使用泛型约束(Constraints),以及如何在实际开发中利用泛型进行更灵活的编程。以下是详细内容:一、什么是泛型约束?**泛型...

golang总结(golang实战教程)

基础部分Go语言有哪些优势?1简单易学:语法简洁,减少了代码的冗余。高效并发:内置强大的goroutine和channel,使并发编程更加高效且易于管理。内存管理:拥有自动垃圾回收机制,减少内...

Go 官宣:新版 Protobuf API(go pro版本)

原文作者:JoeTsai,DamienNeil和HerbieOng原文链接:https://blog.golang.org/a-new-go-api-for-protocol-buffer...

Golang开发的一些注意事项(一)(golang入门项目)

1.channel关闭后读的问题当channel关闭之后再去读取它,虽然不会引发panic,但会直接得到零值,而且ok的值为false。packagemainimport"...

golang 托盘菜单应用及打开系统默认浏览器

之前看到一个应用,用go语言编写,说是某某程序的windows图形化客户端,体验一下发现只是一个托盘,然后托盘菜单的控制面板功能直接打开本地浏览器访问程序启动的webserver网页完成gui相关功...

golang标准库每日一库之 io/ioutil

一、核心函数概览函数作用描述替代方案(Go1.16+)ioutil.ReadFile(filename)一次性读取整个文件内容(返回[]byte)os.ReadFileioutil.WriteFi...

文件类型更改器——GoLang 中的 CLI 工具

我是如何为一项琐碎的工作任务创建一个简单的工具的,你也可以上周我开始玩GoLang,它是一种由Google制作的类C编译语言,非常轻量和快速,事实上它经常在Techempower的基准测...

Go (Golang) 中的 Channels 简介(golang channel长度和容量)

这篇文章重点介绍Channels(通道)在Go中的工作方式,以及如何在代码中使用它们。在Go中,Channels是一种编程结构,它允许我们在代码的不同部分之间移动数据,通常来自不同的goro...

Golang引入泛型:Go将Interface「」替换为“Any”

现在Go将拥有泛型:Go将Interface{}替换为“Any”,这是一个类型别名:typeany=interface{}这会引入了泛型作好准备,实际上,带有泛型的Go1.18Beta...

一文带你看懂Golang最新特性(golang2.0特性)

作者:腾讯PCG代码委员会经过十余年的迭代,Go语言逐渐成为云计算时代主流的编程语言。下到云计算基础设施,上到微服务,越来越多的流行产品使用Go语言编写。可见其影响力已经非常强大。一、Go语言发展历史...

Go 每日一库之 java 转 go 遇到 Apollo?让 agollo 来平滑迁移

以下文章来源于GoOfficialBlog,作者GoOfficialBlogIntroductionagollo是Apollo的Golang客户端Apollo(阿波罗)是携程框架部门研...

Golang使用grpc详解(golang gcc)

gRPC是Google开源的一种高性能、跨语言的远程过程调用(RPC)框架,它使用ProtocolBuffers作为序列化工具,支持多种编程语言,如C++,Java,Python,Go等。gR...

Etcd服务注册与发现封装实现--golang

服务注册register.gopackageregisterimport("fmt""time"etcd3"github.com/cor...

Golang:将日志以Json格式输出到Kafka

在上一篇文章中我实现了一个支持Debug、Info、Error等多个级别的日志库,并将日志写到了磁盘文件中,代码比较简单,适合练手。有兴趣的可以通过这个链接前往:https://github.com/...

如何从 PHP 过渡到 Golang?(php转golang)

我是PHP开发者,转Go两个月了吧,记录一下使用Golang怎么一步步开发新项目。本着有坑填坑,有错改错的宗旨,从零开始,开始学习。因为我司没有专门的Golang大牛,所以我也只能一步步自己去...