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

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 多平台发布

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

为什么学生很难真正学好嵌入式?

10几年前&#xff0c;我是读电气工程专业&#xff0c;学了很多东西&#xff0c;结构&#xff0c;电机、绘图&#xff0c;plc等等.. 其实&#xff0c;都没什么鸟用&#xff0c;出来还是像个废物。 后面我自学转了单片机开发&#xff0c;说句难听点&#xff0c;自己买个开发板都比…

数据科学家常用的24个Python库,2024年最新美团架构师深入讲解Python开发

Scikit-learn是构建模型的Python库。事实上&#xff0c;scikit-learn建立在NumPy&#xff0c;SciPy和matplotlib之上。 TensorFlow TensorFlow由Google开发&#xff0c;是一个流行的深度学习库&#xff0c;可帮助您构建和训练不同的模型。 PyTorch PyTorch是一个基于Python…

强化学习MPC——(一)

目录 1.什么是强化学习2.强化学习的发展历史2.1最优控制2.2试错学习2.3时间差分&#xff08;TD&#xff09;学习 3强化学习的分类4强化学习基本概念 1.什么是强化学习 强化学习是机器学习的一种&#xff0c;是一种介于监督学习和非监督学习的机器学习方法。 学习二字就很形象…

在线预约小程序怎么做

在快节奏的现代生活中&#xff0c;无论是预约理发、还是预定餐厅&#xff0c;亦或是挂号就医&#xff0c;我们都希望有一个更加便捷、高效的方式来完成这些任务。而今&#xff0c;随着科技的发展&#xff0c;一款全新的在线预约小程序应运而生&#xff0c;为我们的生活带来了前…

全局锁和表锁 :给表加个字段怎么有这么多阻碍?

全局锁和表锁 &#xff1a;给表加个字段怎么有这么多阻碍&#xff1f; 今天我要跟你聊聊 MySQL 的锁。数据库锁设计的初衷是处理并发问题。作为多用户共享的资源&#xff0c;当出现并发访问的时候&#xff0c;数据库需要合理地控制资源的访问规则。而锁就是用来实现这些访问规则…

微信小程序页面交互综合练习 (重点:解决“setData of undefined”报错问题)

一、写一个注册表单&#xff0c;点击“注册”按钮将用户输入的数据带到服务器&#xff0c;并且能在控制台显示参数。 &#xff08;1&#xff09;首先&#xff0c;我需要在vscode里面创建一个简易的node.js服务器 //第一步:引入http模块 var http require(http); //第二步:创建…

“上帝粒子”之父、诺贝尔奖得主彼得·希格斯逝世

4月10日&#xff0c;提出希格斯玻色子理论的英国物理学家彼得希格斯&#xff08;Peter Higgs&#xff09;逝世&#xff0c;享年94岁。 这位揭示粒子如何构成宇宙基础的研究先锋、诺贝尔奖得主在爱丁堡的家中去世。 希格斯玻色子&#xff0c;又叫作“上帝粒子”。 最初上帝粒子一…

全光谱台灯哪个牌子好,2024全光谱护眼台灯推荐

近年来&#xff0c;全光谱台灯悄然跻身于家庭必备品之列&#xff0c;赢得了众多消费者的好评。它们以减轻眼睛疲劳的功效而受到推崇&#xff0c;尽管也有声音质疑其实际效用&#xff0c;认为所谓的益处不过是一种心理安慰。面对这些相互矛盾的观点&#xff0c;许多消费者感到困…

前端学习<四>JavaScript基础——16-内置对象:Number和Math

内置对象 Number 的常见方法 Number.isInteger() 判断是否为整数 语法&#xff1a; 布尔值 Number.isInteger(数字); toFixed() 小数点后面保留多少位 语法&#xff1a; 字符串 myNum.toFixed(num); 解释&#xff1a;将数字 myNum 的小数点后面保留 num 位小数&#xff…

解决Django中的UnicodeDecodeError问题

在使用Django进行Web开发时&#xff0c;有时会遇到一些由于编码不一致引起的问题&#xff0c;特别是在处理文件读写操作时。一个常见的错误是UnicodeDecodeError&#xff0c;其表现为gbk codec cant decode byte 0xa6 in position 9737: illegal multibyte sequence。这个问题通…

2024最新最简单的安卓底部菜单栏教程

2024最新最简单的安卓底部菜单栏教程 大界面跳转 public class MainActivity extends AppCompatActivity {Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);BottomNavigationView b…

【吊打面试官系列】Java高并发篇 - 什么是Java Executors 框架?

大家好&#xff0c;我是锋哥。今天分享关于 【什么是Java Executors 框架&#xff1f;】面试题&#xff0c;希望对大家有帮助&#xff1b; 什么是Java Executors 框架&#xff1f; Executor 框架是一个根据一组执行策略调用&#xff0c;调度&#xff0c;执行和控制的异步任务的…

DVWA -File Upload-通关教程-完结

DVWA -File Upload-通关教程-完结 文章目录 DVWA -File Upload-通关教程-完结页面功能LowMediumHighImpossible 页面功能 此页面的功能为选择某个图片文件点击Upload按钮上传&#xff0c;上传成功后得知文件上传路径为DVWA\hackable\uploads。 Low 源码审计 这段 PHP 代码…

web自动化测试系列-selenium xpath定位方法详解(六)

1.xpath介绍 XPath 是一门在 XML 文档中查找信息的语言。XPath 用于在 XML 文档中通过元素和属性进行导航。而html中也应用了这种语言 &#xff0c;所以 &#xff0c;我们定位html页面元素时也会用到xpath这种方法 。 2.xpath定位方式 xpath主要通过以下四种方法定位 &#…

Redis第12讲——缓存的三种设计模式

缓存的使用在项目中是极其常见的&#xff0c;如果使用得当&#xff0c;缓存可谓时提升系统性能的最简单方法之一&#xff0c;反之则会出现一些莫名其妙的问题&#xff0c;在不同场景下&#xff0c;所使用的缓存策略也是有所变化的&#xff0c;下面我们就介绍一下三种常见的缓存…

appium driver install uiautomator2 安装失败

报错 Installing ‘uiautomator2’ using NPM install spec ‘appium-uiautomator2-driver’ Error: Encountered an error when installing package: npm command ‘install --save-dev --no-progress --no-audit --omitpeer --save-exact --global-style --no-package-lock…

为什么每个人都需要了解这些数据加密技术?

在数字时代&#xff0c;数据加密技术不仅对保护企业的商业秘密至关重要&#xff0c;也是个人隐私安全的重要屏障。随着技术的进步和网络犯罪的增加&#xff0c;数据加密已经成为了信息安全领域的一个热点议题。以下是探讨为什么每个人都需要了解这些数据加密技术的几个主要原因…

Web 前端性能优化之七:数据存储与缓存技术

7、数据存储 在开发Web应用的过程中&#xff0c;会涉及一些数据的存储需求&#xff0c;常见的存储方式可能有&#xff1a; 保存登录态的Cookie&#xff1b; 使用浏览器本地存储进行保存的Local Storage和Session Storage&#xff1b; 客户端数据持久化存储方案涉及的Web SQ…

AI智能调色解决方案,节省了企业的时间和人力成本

如何确保图片、视频的色彩准确、生动&#xff0c;成为企业提升品牌形象和传播效果的重要课题。美摄科技凭借领先的AI技术&#xff0c;推出全新的AI智能调色解决方案&#xff0c;以智能化、精细化的调色方式&#xff0c;帮助企业轻松驾驭色彩&#xff0c;展现视觉魅力。 美摄科…

知乎专业分析二手车

二手车经销商-一个神奇的经济存在体 - 知乎 二手车经销商-一个神奇的经济存在体 - 知乎 1. 本文文字内容较多&#xff0c;近5000字&#xff0c;如果没有兴趣可以看看导图&#xff0c;找到自己感兴趣的环节。 本篇无意为二手车经销商或新车经销商进行判断说谁更高端&#xf…