R语言ggplot2绘图学习笔记(基础知识大全)

news2024/11/28 10:55:19

R语言ggplot2绘图入门笔记

今天分享的内容是在R语言中利用ggplot2进行可视化的入门笔记,适用于初学者了解ggplot2绘图系统。干货满满,建议收藏!

首先安装以下R包:

install.packages(c("tidyverse""colorspace""corrr",  "cowplot",
                   "ggdark""ggforce""ggrepel""ggridges""ggsci",
                   "ggtext""ggthemes""grid""gridExtra""patchwork",
                   "rcartocolor""scico""showtext""shiny",
                   "plotly""highcharter""echarts4r","devtools","readxl"))
devtools::install_github("JohnCoene/charter")

数据导入环节

使用readxl包中read_excel()函数将数据导入到R中(该数据为网络下载),也可以使用其他的数据读取函数,或者使用R语言自带的系统示例数据都可以,主要是获得一份数据表格,用于可视化绘图。

chlr <- read_excel("~/ggplot2-绘图数据表.xlsx")
tibble::glimpse(chlr)
head(chlr, 5)

# # A tibble: 5 × 10
#    city date  death                temp dewpoint  pm10 o3      time season ...10
#   <dbl> <chr> <dttm>              <dbl>    <dbl> <dbl> <chr>  <dbl>  <dbl> <chr>
# 1    89 chic  1987-03-29 00:00:00   101     39.5  30.1 30.79…  20.2     88 wint…
# 2    90 chic  1987-03-30 00:00:00   125     29    12.9 20.79…  29.6     89 wint…
# 3    91 chic  1987-03-31 00:00:00   106     30    19   36.79…  23.9     90 wint…
# 4    92 chic  1987-04-01 00:00:00   119     41.5  22.9 29.79…  21.3     91 spri…
# 5    93 chic  1987-04-02 00:00:00    91     29.5  14.6 37.79…  22.1     92 spri…

ggplot语法规则

  • 数据(data):要求是整洁的数据框

  • 映射(mapping):指明变量与图形所见元素之间的联系

  • 几何对象(geometric):数据的几何形状

  • 标度(scale):标度函数控制几何对象中的标度映射

  • 统计变换(stats):构建新的统计量进行绘图

  • 坐标系(coord):数据的转换

  • 位置调整(position adjustments):调用位置调整函数来调整某些图形元素的实际位置

  • 分面(facet):对数据分组再分别绘图

  • 主题(theme):图形的整体视觉默认值

  • 输出(output):用ggsave()函数将图形保存为想要格式的文件

绘图函数使用方法

函数的第一个参数默认为数据源,因此需要将绘图数据框填写在此处,将数据变量(date和temp)添加到aes()内部,表示x轴对应时间,y轴对应温度。

g <- ggplot(chlr, aes(x = date, y = temp))
alt

为什么运行后出来一个灰色的空图片?因为还没有设置画什么类型的图,通过添加geom_point()来创建散点图,类似于geom开头的这些函数可以用于不同的可视化方式。

g + geom_point()
alt

再次运行就能看到散点图的效果,这就是gemo图层实现的效果,除此之外,可以组合几个图层,形成更复杂的图片。(比如下图是在散点图基础上添加折线图)

alt

调整几何图形的属性

将所有的点转换成蓝色钻石,更改图形中子元素的形状和颜色,这个需求在实际分析中经常碰到,其实也很简单。

g + geom_point(color = "blue", shape = "diamond", size = 3)

只需要将color和shape等参数添加具体的值即可,需要注意的是这些参数不能放在aes中,因为aes控制映射关系,也就是数据和图的映射,而我们想更改颜色和形状是人为参数指定的具体值,而不是数据映射而得。 alt

可以使用预设颜色或十六进制颜色代码,也可以使用不同的色盘。

g + geom_point(color = "red", shape = "diamond", size = 2) +
  geom_line(color = "red", linetype = "dotted", size = .5)
alt

设置一个内置主题,通过theme图层可以控制图片的主题,个人认为bw主题比较美观、简洁大方。

theme_set(theme_bw())
g + geom_point(color = "red")
alt

调整坐标轴相关信息

控制横纵坐标轴的信息可以通过xlab、ylab来实现,比如下面将修改坐标轴的标签,效果如下:

ggplot(chlr, aes(x = date, y = temp)) +
  geom_point(color = "red") +
  xlab("time") +
  ylab("Temperature (°F)")
alt

改变轴标题格式

通过labs图层可以同时修改横纵坐标轴标签等属性,另外还可以在theme属性中设置标签字体的颜色和大小。

ggplot(chlr, aes(x = date, y = temp)) +
  geom_point(color = "red") +
  labs(x = "time", y = "Temperature (°F)") +
  theme(axis.title = element_text(size = 13, color = "red", face = "italic"))
alt

使用axis更改坐标轴文本的外观,快速自由定制好看的图片。

ggplot(chlr, aes(x = date, y = temp)) +
  geom_point(color = "red") +
  labs(x = "time", y = "Temperature (°F)") +
  theme(axis.text = element_text(color = "blue", size = 10),
        axis.text.x = element_text(face = "italic"))
alt

旋转坐标轴文本: 使用hjust和vjust可以在水平(0 =左,1 =右)和垂直(0 =上,1 =下)调整文本的位置,angle参数可以设置旋转的角度。(该功能也非常有用,尤其是在你的标签长度很长时,轻轻地旋转就能容纳更多信息)

ggplot(chlr, aes(x = date, y = temp)) +
  geom_point(color = "red") +
  labs(x = "time", y = "Temperature (°F)") +
  theme(axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1, size = 13))
alt

删除坐标轴标题:使用NULL删除

ggplot(chlr, aes(x = date, y = temp)) +
  geom_point(color = "red") +
  labs(x = NULL, y = "")
alt

限制坐标轴范围:使用limits属性控制

ggplot(chlr, aes(x = date, y = temp)) +
  geom_point(color = "red") +
  labs(x = "time", y = "Temperature (°F)") +
  scale_y_continuous(limits = c(0,70))+
  coord_cartesian(ylim = c(0,70))
alt

scale_y_continuous去除范围外的所有数据点,coord_cartesian调整可见区域。

图表坐标原点设置

通过expand_limits参数可以控制图片中坐标轴的起始位置,规定图片的布局。

chlr_middle <- dplyr::filter(chlr, temp>25, o3>5)
ggplot(chlr_middle, aes(x = temp, y = o3)) +
  geom_point(color = "#E080E8") +
  labs(x = "Temperature",
       y = "Ozone") +
  expand_limits(x = 0, y = 0)
alt

设置相同比例的坐标轴

coord_fixed(ratio = 1)参数能够将横纵坐标轴的比例设置为1:1,该功能在绘制某些相关性图时可能有用,另外还可以在ggsave图片保存时指定长和宽。

ggplot(chlr_middle, aes(x = temp, y = o3)) +
  geom_point(color = "#E080E8") +
  labs(x = "Temperature",
       y = "Ozone") +
  xlim(c(0, 100)) + ylim(c(0, 80)) +
  coord_fixed(ratio = 1)
alt

使用函数调整标签

可以在label参数中传入函数,用于生成一系列的刻度标签,这个功能也挺使用,比如你想展示某些带单位的信息,可以通过这个函数添加统一单位。

ggplot(chlr, aes(x = date, y = temp)) +
  geom_point(color = "#E080E8") +
  labs(x = "time", y = NULL) +
  scale_y_continuous(label = function(x) {return(paste(x, "Degrees"))})
alt

添加标题:使用ggtitle添加左上角标题

ggplot(chlr, aes(x = date, y = temp)) +
  geom_point(color = "#E080E8") +
  labs(x = "time", y = "Temperature (°F)") +
  ggtitle("Temperature correlation curves")
alt

可以使用labs()函数添加元素,支持多种标注类型,比如主标题、副标题等。

ggplot(chlr, aes(x = date, y = temp)) +
  geom_point(color = "firebrick") +
  labs(x = "time", y = "Temperature (°F)",
       title = "Temperature correlation curves",
       subtitle = "Scatter plot of daily temperature changes",
       caption = "Data:XXX",
       tag = "Fig. 1")
alt

加粗标题:可以在theme主题中设置标题的显示格式,比如字体大小、颜色、粗细、形状等等。

ggplot(chlr, aes(x = date, y = temp)) +
  geom_point(color = "firebrick") +
  labs(x = "time", y = "Temperature (°F)",
       title = "Temperature correlation curves") +
  theme(plot.title = element_text(face = "bold",
                                  margin = margin(10, 5, 10, 5),
                                  size = 13))
alt

调整标题位置:通过hjust和face等参数可以自主调整标题,使用

ggplot(chlr, aes(x = date, y = temp)) +
  geom_point(color = "firebrick") +
  labs(x = "time", y = NULL,
       title = "Temperature correlation curves",
       caption = "Data:XXX") +
  theme(plot.title = element_text(hjust = 0.5, size = 15, face = "bold.italic"),
  plot.caption = element_text(hjust = 0))
alt

更改多行文本的间距

ggplot(chlr, aes(x = date, y = temp)) +
  geom_point(color = "#35CBC0") +
  labs(x = "time", y = "Temperature (°F)") +
  ggtitle("Scatter plot of daily temperature changes") +
  theme(plot.title = element_text(lineheight = .4, size = 17))
alt

图例设置

当把color参数放在aes映射中时,R语言会自动根据数据的分组进行不同颜色的绘制,并生成图例(下图右侧所示)

ggplot(chlr,aes(x = date, y = temp, color = season)) +
  geom_point() +
  labs(x = "time", y = "Temperature (°F)")
alt

移除图例:使用position参数控制

ggplot(chlr,aes(x = date, y = temp, color = season)) +
  geom_point() +
  labs(x = "time", y = "Temperature (°F)") +
  theme(legend.position = "none")
alt

保留形状的图例,放弃颜色的图例,使用guides图层进行控制,可以指定图例的展示方式。

ggplot(chlr,aes(x = date, y = temp,
           color = season, shape = season)) +
  geom_point() +
  labs(x = "time", y = "Temperature (°F)") +
  guides(color = "none")
alt

移除图例标题

默认状态下图例的顶部会添加标题,也就是数据框中对应的变量名称,可以通过下面的方法进行删除。

ggplot(chlr, aes(x = date, y = temp, color = season)) +
  geom_point() +
  labs(x = "time", y = "Temperature (°F)") +
  theme(legend.title = element_blank())
alt

改变图例的位置

使用主题图层的legend.position参数可以控制图例的摆放位置,支持上下左右或者是自定义的位置,方便后期调整。

ggplot(chlr, aes(x = date, y = temp, color = season)) +
  geom_point() +
  labs(x = "Year", y = "Temperature (°F)") +
  theme(legend.position = "top")
alt

改变图例的方向: 默认情况下图例是横向排列,可以根据需要调整为纵向排列,看起来更加美观。

ggplot(chlr, aes(x = date, y = temp, color = season)) +
  geom_point() +
  labs(x = "time", y = "Temperature (°F)") +
  theme(legend.position = c(.9, .8),
        legend.background = element_rect(fill = "transparent")) +
  guides(color = guide_legend(direction = "vertical"))
alt

改变图例的标题:可以通过legend.title参数控制图例的标题,支持设置颜色、大小、字体等属性。

ggplot(chlr, aes(x = date, y = temp, color = season)) +
  geom_point() +
  labs(x = "time", y = "Temperature (°F)",
       color = "About the change of seasons") +
  theme(legend.title = element_text(color = "#61376D",
                                    size = 10, face = "bold"))
alt

改变图例元素的顺序:在R语言中字符串类型的数据在映射时容易出现顺序错误,为了能够人为设置固定的顺序,可以将数据中字符串类型的变量转换为因子类型(factor),然后设置因子的水平,这样就可以在绘图时以指定顺序展示了。

chlr$season <-
  factor(chlr$season,
         levels = c("spring""summer""autumn"))
ggplot(chlr, aes(x = date, y = temp, color = season)) +
  geom_point() +
  labs(x = "time", y = "Temperature (°F)")
alt

改变图例的标签:有时候默认的图例标签不符合我们的预期,这时候可以使用scale_color_discrete函数来控制图例的显示内容,自定义文字进行展示。

ggplot(chlr, aes(x = date, y = temp, color = season)) +
  geom_point() +
  labs(x = "time", y = "Temperature (°F)") +
  scale_color_discrete(
    name = "Seasons:"
    labels = c("Mar—May""Jun—Aug""Sep—Nov")
  ) +
  theme(legend.title = element_text(
   color = "chocolate", size = 13
  ))
alt

改变图例符号的大小:假如想更改图例中元素的尺寸大小,可以通过函数 guide_legend(override.aes = list(size = 5))实现这个操作。

ggplot(chlr, aes(x = date, y = temp, color = season)) +
  geom_point() +
  labs(x = "time", y = "Temperature (°F)") +
  theme(legend.key = element_rect(fill = NA),
        legend.title = element_text(color = "#2135C8",
                                    size = 12, face = 2)) +
  scale_color_discrete("Seasons:") +
  guides(color = guide_legend(override.aes = list(size = 5)))
alt

手动添加图例项:通过添加不同的图层可以将折线图、散点图组合到一起,此时图例将根据具体的情况进行调整。

ggplot(chlr, aes(x = date, y = o3)) +
  geom_line(aes(color = "line")) +
  geom_point(aes(color = "points")) +
  labs(x = "time", y = "Ozone") +
  scale_color_discrete("Type:")
alt

改变面板背景颜色:默认图片背景是灰色或者白色,可以通过panel.background参数进行针对性的设置,变成自己喜欢的颜色,修改特定主题。

ggplot(chlr, aes(x = date, y = temp)) +
  geom_point(color = "#7F31DF", size = 2) +
  labs(x = "time", y = "Temperature (°F)") +
  theme(panel.background = element_rect(
    fill = "#90E2F0", color = "#90E2F0", size = 2)
  )
alt

更改图表背景颜色:图表的背景颜色是使用plot.background参数进行控制,也就是图片中横纵坐标轴区域。

ggplot(chlr, aes(x = date, y = temp)) +
  geom_point(color = "firebrick") +
  labs(x = "time", y = "Temperature (°F)") +
  theme(plot.background = element_rect(fill = "#DFD9D5",
                                       color = "#8C8987", size = 2))
alt

提示:panel图层表示图片中主题部分,例如散点折现等,而plot图层表示图片的控制部分,比如横纵坐标轴,这些元素都在图层中组合存在。

删除所有网格线:有时候需要一个纯净的背景,可以通过移除panel部分的网格线来实现,看起来干净了很多。

ggplot(chlr, aes(x = date, y = temp)) +
  geom_point(color = "#E46724") +
  labs(x = "time", y = "Temperature (°F)") +
  theme(panel.grid.major = element_blank(),  # 移除主要网格线
        panel.grid.minor = element_blank())  # 移除次要网格线
alt

今天分享的R语言ggplot2绘图入门教程就到这里,感谢你的阅读,如果有所收获欢迎点赞转发,你的支持是作者更新的最大动力。

本文由 mdnice 多平台发布

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1586996.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

机器学习-09-图像处理01-理论

总结 本系列是机器学习课程的系列课程&#xff0c;主要介绍机器学习中图像处理技术。 参考 02图像知识 色彩基础知识整理-色相、饱和度、明度、色调 图像特征提取&#xff08;VGG和Resnet特征提取卷积过程详解&#xff09; Python图像处理入门 【人工智能】PythonOpenCV…

PostgreSQL强势崛起,选择它还是MySQL

大家好&#xff0c;关系型数据库&#xff08;RDBMS&#xff09;作为数据管理的基石&#xff0c;自数据仓库兴起之初便扮演着核心角色&#xff0c;并在数据科学的发展浪潮中持续发挥着价值。即便在人工智能和大型语言模型&#xff08;LLM&#xff09;日益成熟的今天&#xff0c;…

【方法】PDF密码如何取消?

对于重要的PDF文件&#xff0c;很多人会设置密码保护&#xff0c;那后续不需要保护了&#xff0c;如何取消密码呢&#xff1f; 今天我们来看看&#xff0c;PDF的两种密码&#xff0c;即“限制密码”和“打开密码”&#xff0c;是如何取消的&#xff0c;以及忘记密码的情况要怎…

2024考研调剂须知

----------------------------------------------------------------------------------------------------- 考研复试科研背景提升班 教你快速深入了解掌握考研复试面试中的常见问题以及注意事项&#xff0c;系统的教你如何在短期内快速提升自己的专业知识水平和编程以及英语…

ArcGIS Desktop使用入门(三)图层右键工具——缩放至图层、缩放至可见

系列文章目录 ArcGIS Desktop使用入门&#xff08;一&#xff09;软件初认识 ArcGIS Desktop使用入门&#xff08;二&#xff09;常用工具条——标准工具 ArcGIS Desktop使用入门&#xff08;二&#xff09;常用工具条——编辑器 ArcGIS Desktop使用入门&#xff08;二&#x…

php-redis windows ,pecl 已经不维护了,解决方案:php 8.2 | 8.3+ redis extension windows

从论坛上pecl 已经不维护了&#xff0c;直接让大家到ci 去下载 https://stackoverflow.com/questions/76496488/redis-dll-not-found-for-php8-2/76496489#76496489 让我们找最新的一次commit &#xff0c;然后又action 构建&#xff0c;再下载&#xff0c;这样的话也好&#…

【STM32嵌入式系统设计与开发】——17ADC(ADC按键应用)

这里写目录标题 STM32资料包&#xff1a; 百度网盘下载链接&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1mWx9Asaipk-2z9HY17wYXQ?pwd8888 提取码&#xff1a;8888 一、任务描述二、任务实施1、工程文件夹创建2、函数编辑&#xff08;1&#xff09;主函数编辑&#…

DTC 子故障类型说明

在配置cdd的时候&#xff0c;需要知道子故障类型&#xff0c;例如一个DTC &#xff1a;0xC128187, 这个0x87就是子故障类型&#xff0c;是一种常见的故障类型&#xff0c;对手件timeout

微商商城源码小程序好用么?

商城APP作为电子商务行业的重要组成部分&#xff0c;已经成为了人们购物的主要方式之一。为了在竞争激烈的市场中脱颖而出&#xff0c;开发一款专业且思考深度的商城APP方案显得尤为关键。本文将从专业性和思考深度两个方面&#xff0c;探讨商城APP的开发方案。 一、专业性的重…

计算机网络常见面试总结

文章目录 1. 计算机网络基础1.1 网络分层模型1. OSI 七层模型是什么&#xff1f;每一层的作用是什么&#xff1f;2.TCP/IP 四层模型是什么&#xff1f;每一层的作用是什么&#xff1f;3. 为什么网络要分层&#xff1f; 1.2 常见网络协议1. 应用层有哪些常见的协议&#xff1f;2…

jetbrains全家桶历史版本下载(IDEA/PyCharm...)

IDEA&#xff1a; 其他版本 - IntelliJ IDEA (jetbrains.com)https://www.jetbrains.com/zh-cn/idea/download/other.html PyCharm: 其他版本 - PyCharm (jetbrains.com)https://www.jetbrains.com/zh-cn/pycharm/download/other.html Goland: 其他版本 - GoLand (jetbrain…

TQ15EG开发板教程:在MPSOC上运行ADRV9371

首先需要在github上下载两个文件&#xff0c;本例程用到的文件以及最终文件我都会放在网盘里面&#xff0c; 地址放在本文最后。首先在github搜索hdl选择第一个&#xff0c;如下图所示 GitHub网址&#xff1a;https://github.com/analogdevicesinc/hdl/releases 点击releases…

python+django电子资源类学习资料分享网站flask

本设计是电子资源类的网站设计与实现&#xff0c;。系统前台实现了首页&#xff0c;分享资源&#xff0c;交流论坛&#xff0c;公告信息&#xff0c;个人中心&#xff0c;后台管理等功能。系统的后台实现了首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;分享资源管…

Android零基础入门(一)配置环境和安装Android Studio

闲来无事学一下Android&#xff0c;本人目前java为主&#xff0c;jdk的环境就不赘述了 配置环境 Java JDK5 或 以后版本 Android SDK Java运行时环境&#xff08;JRE&#xff09; Android Studio 你可以从 Oracle 的 Java 网站&#xff1a;JDKJava SE下载下载最新版本的 Jav…

基于PyAutoGUI图片定位的自动化截图工具--jmeter部分

1、计划 压测完成后需要编写性能测试报告&#xff0c;报告中所需数据截图较多&#xff0c;使用自动化操作方便快捷&#xff0c;就编写一个界面工具以便后续复用。之前编写过loadrunner报告的自动化截图脚本&#xff0c;现在用jmeter也比较多&#xff0c;就编写jmeter部分&#…

使用Android Studio制作一个蓝牙软件 ---(一)

一、创建项目&#xff08;项目名称---BluetoothActivity&#xff09; 二、创建HomeActivity页面 1.点击一个文件夹 --- 鼠标右击 --- 新建 --- Acyivity --- Empty Views Activity 三、创建styles.xml 点击 values文件夹 --- 鼠标右击 --- 新建 --- Values Resource File sty…

SLA——让你的信息更安全

在单一的静态密码登录验证机制下&#xff0c;非法入侵者若窃听到Windows桌面登录账号的用户名和密码&#xff0c;便可通过合法权限访问内部系统&#xff0c;此时企业信息安全将面临严峻挑战。 企业为了防止账号信息泄露&#xff0c;通常会强制要求员工定期更换登录密码&#x…

机器学习 -- 端到端的机器学习项目

场景 我们将一个端到端的项目&#xff08;一个从开始到结束包含了所有必要步骤和组件的完整项目&#xff09;案例&#xff0c;步骤大概有&#xff1a; 1.观察大局。 2.获得数据。 3.从数据探索和可视化中获得洞见。 4.机器学习算法的数据准备。 5.选择和训练模型。 6.微调模型…

集合系列(十九) -List与数组互转操作介绍

一、数组转List 方式一 通过 Arrays.asList(strArray) 方式&#xff0c;将数组转换List&#xff0c;但不能对List增删&#xff0c;只能查改&#xff0c;否则抛异常&#xff0c;例子如下&#xff1a; public static void main(String[] args) {//创建一个字符串数组String[] …

Redis(三) String字符串

文章目录 前言常见命令SETGETMSETMGETINCRINCRBYDECRDECRBYINCRBYFLOATAPPENDGETRANGESETRANGESTRLEN命令小结 前言 Redis 的数据有很多种数据类型&#xff0c;包括字符串类型、列表类型、哈希类型、集合类型、有序集合类型等。这几种数据类型是针对于 value 来说的&#xff0…