Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >R语言ggplot2做漂亮的抖动散点图(geom_jitter)的一个实例

R语言ggplot2做漂亮的抖动散点图(geom_jitter)的一个实例

作者头像
用户7010445
发布于 2021-12-09 04:40:01
发布于 2021-12-09 04:40:01
10K00
代码可运行
举报
运行总次数:0
代码可运行

在网上偶然间发现的一个R语言ggplot2做数据可视化的实例,提供数据和代码,今天的推文把代码拆解一下

实例数据下载链接

https://www.kaggle.com/berkeleyearth/climate-change-earth-surface-temperature-data?select=GlobalLandTemperaturesByCountry.csv

下载这个数据需要注册kaggle

代码链接

https://github.com/cnicault/30DayChartChallenge/blob/main/day12/day12_strips.Rmd

结果图

image.png

这个图展示的是法国1980年前后的温度差异,数据里提供很多个国家的数据,可以自己更改成其他国家的数据试试

首先是读取数据

这里接触了两个新的R包

  • vroom
  • here
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
climate <- vroom::vroom(here::here("GlobalLandTemperaturesByCountry.csv"))

关于lubridate包中的函数的一些用法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
lubridate::year("1743-11-01")
lubridate::month("1743-11-01")
lubridate::month("1743-11-01",label = T)
lubridate::month("1743-11-01",label = F)
lubridate::day("1743-11-01")

构建作图的数据集

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
library(tidyverse)
monthly <- climate %>%
  filter(Country == "France", !is.na(AverageTemperature)) %>%
  mutate(year = lubridate::year(dt),
         month = lubridate::month(dt, label = TRUE),
         pos = lubridate::month(dt, label = FALSE),
         color = ifelse(year > 1980, "Recent", "Past")) %>%
  filter(year >=1900) 

他这里先做了一个空白的热图

注释里写的是为了得到一个矩形的图例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
library(ggplot2)
ggplot() +
  # empty tile to get a legend with rectangle key
  geom_tile(data = monthly, 
            aes(x = 0, y =0, width =0, 
                height = 0, fill = color))

image.png

接下来是添加线段

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
seg <- tibble(x = c(0, 0, 10, 0, 9, 3, 8, 5, 6),
              xend = c(12.5, 3, 12.5, 5, 12.5, 6, 11, 10, 8),
              y = c(0, 5, 5, 10, 10, 15, 15, 20, 25),
              yend = c(0, 5, 5, 10, 10, 15, 15, 20, 25))

ggplot() +
  # empty tile to get a legend with rectangle key
  geom_tile(data = monthly, 
            aes(x = 0, y =0, 
                width =0, 
                height = 0, 
                fill = color)) +
  # y-axis
  geom_segment(data = seg, 
               aes(x = x, xend = xend,
                   y = y, yend = yend), 
               color = "red", 
               linetype = "12") 

image.png

添加文本注释

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
seg_lab <- tibble(x = c(0, 0, 0, 3, 5, 6),
                  y = seq(0,25, 5))
ggplot() +
  # empty tile to get a legend with rectangle key
  geom_tile(data = monthly, 
            aes(x = 0, y =0, 
                width =0, 
                height = 0, 
                fill = color)) +
  # y-axis
  geom_segment(data = seg, 
               aes(x = x, xend = xend,
                   y = y, yend = yend), 
               color = "black", linetype = "12") +
  geom_text(data = seg_lab, aes(x = x, y = y, 
                                label = glue::glue("{y} °C")), 
            color = "black", nudge_y = 1, 
            family = "serif", hjust = 0) 

image.png

添加抖动的散点

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ggplot() +
  # empty tile to get a legend with rectangle key
  geom_tile(data = monthly, 
            aes(x = 0, y =0, 
                width =0, 
                height = 0, 
                fill = color)) +
  # y-axis
  geom_segment(data = seg, 
               aes(x = x, xend = xend, 
                   y = y, yend = yend), 
               color = "white", 
               linetype = "12") +
  geom_text(data = seg_lab, 
            aes(x = x, y = y, 
                label = glue::glue("{y} °C")), 
            color = "white", nudge_y = 1, 
            family = "serif", hjust = 0) +
  # show.legend = FALSE to remove the shape of the point in the legend
  geom_jitter(data = filter(monthly, color == "Recent"), 
              aes(x = pos+0.2, y = AverageTemperature, 
                  fill = color), width = 0.15,
              height =0, size = 3, shape = 21, 
              stroke = 0.3, color = "#FFDADC", 
              show.legend = FALSE) +
  geom_jitter(data = filter(monthly, color == "Past"), 
              aes(x = pos-0.2, y = AverageTemperature, 
                  fill = color), width = 0.15,
              height =0, size = 2.5, shape = 21, 
              stroke = 0.3, color = "#93E2F5", 
              show.legend = FALSE) 

image.png

接下来就是对细节的调整了

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
axis_labels <- tibble(month = lubridate::month(seq(1,12,1), 
                                               label = TRUE),
                      pos = seq(1,12,1))



txt_clr <- "white"
pal1 <- c("#105182", "#1a7bc5", "#42a2f1", "#E9F1F2", "#ff9193", "#f1434a", "#c91022", "#8d0613", "#4D030A")



monthly_plt <- ggplot() +
  # empty tile to get a legend with rectangle key
  geom_tile(data = monthly, 
            aes(x = 0, y =0, 
                width =0, height = 0, 
                fill = color)) +
  # y-axis
  geom_segment(data = seg, 
               aes(x = x, xend = xend, 
                   y = y, yend = yend), 
               color = "white", linetype = "12") +
  geom_text(data = seg_lab, 
            aes(x = x, y = y, label = glue::glue("{y} °C")), 
            color = "white", nudge_y = 1, 
            family = "serif", hjust = 0) +
  # show.legend = FALSE to remove the shape of the point in the legend
  geom_jitter(data = filter(monthly, color == "Recent"), 
              aes(x = pos+0.2, y = AverageTemperature, fill = color), 
              width = 0.15, height =0, size = 3, 
              shape = 21, stroke = 0.3, color = "#FFDADC", show.legend = FALSE) +
  geom_jitter(data = filter(monthly, color == "Past"), 
              aes(x = pos-0.2, y = AverageTemperature, fill = color), 
              width = 0.15, height =0, size = 2.5, 
              shape = 21, stroke = 0.3, color = "#93E2F5", 
              show.legend = FALSE) +
  # x-axis labels
  geom_text(data = axis_labels, 
            aes(x = pos, y = -2, label = month), 
            color = "white", vjust = 0, 
            angle = 90, size = 5, family = "serif")+
  # scales
  scale_fill_manual(values = c("Recent" = "#f1434a", "Past" = "#1a7bc5"), 
                    labels = c("Recent" = "> 1980", "Past" = "<= 1980")) +
  scale_y_continuous(limits = c(-4,26), 
                     breaks = seq(0,25,5)) +
  labs(fill = "Observations") +
  theme_void() +
  guides(fill = guide_legend(label.position = "top",
                             title.hjust = 0.5,
                             keyheight = unit(1, "line"),
                             keywidth = unit(4, "line"),
                             nrow = 1),
         color = FALSE) +
  theme(plot.background = element_rect(fill = "grey40", color = NA),
        legend.position = c(0.13, 0.85),
        legend.text = element_text(face = "bold", 
                                   size = 12, color = txt_clr),
        legend.title = element_text(face = "bold", size = 14, color = txt_clr))

monthly_plt

image.png

推文用到的示例数据和代码可以自己到推文开头提到的两个链接去下载

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-12-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 小明的数据分析笔记本 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
跟着Nature Communications学作图:R语言ggplot2散点加误差线展示响应比(Response ratio)
https://www.nature.com/articles/s41467-020-16881-7#Sec15
用户7010445
2023/01/06
7880
跟着Nature Communications学作图:R语言ggplot2散点加误差线展示响应比(Response ratio)
🤑 ggplot2 | 世界杯赛程的可视化就交给我吧!~
1写在前面 昨天卡塔尔🇶🇦输了比赛真是让人大跌眼镜啊😱,打破了世界杯东道主必胜的神律,也不知道王子们是怎么想的。🤣 今天是英格兰🏴󠁧󠁢󠁥󠁮󠁧󠁿Vs伊朗🇮🇷,🐷各位好运!~😘 后面的赛事我们就用ggplot画一个赛程图吧😁, 效果图如下:👇 2用到的包 rm(list = ls()) library(tidyverse) library(tmcn) library(lubridate) library(RColorBrewer) 3示例数据 这里我事先在网上爬了赛程下来,这里就直接读入了。 dat <-
生信漫卷
2023/02/24
2930
🤑 ggplot2 | 世界杯赛程的可视化就交给我吧!~
ggplot2优雅的自定义轴文本颜色
❝今天来主要介绍如何在不引入外部几何对象的前提下在图形的原有的基础上「自定义修改轴文本颜色」,也许恰好您正好有此特殊需求,希望对各位观众老爷有所帮助;下面来看具体案例; ❞ 加载R包 library(tidyverse) 数据清洗 data1 <- mtcars %>% head(6) %>% mutate_if(is.numeric, function(x) x+10) %>% log10() %>% as.data.frame() %>% rownames_to_column("ty
R语言数据分析指南
2022/09/21
1.5K0
ggplot2优雅的自定义轴文本颜色
跟着Nature学作图:R语言ggplot2环形堆积柱形图完整示例
https://www.nature.com/articles/s41586-022-04664-7#Sec33
用户7010445
2023/01/06
3.1K0
跟着Nature学作图:R语言ggplot2环形堆积柱形图完整示例
R语言ggplot2每周一图活动:第四周~簇状柱形图和堆积柱形图
https://github.com/kaustavSen/tidytuesday/blob/master/2021/week_11.R
用户7010445
2022/05/23
6140
R语言ggplot2每周一图活动:第四周~簇状柱形图和堆积柱形图
跟着PNAS学作图:R语言ggplot2作图展示多序列比对结果
https://www.pnas.org/doi/10.1073/pnas.2214427119
用户7010445
2023/01/06
7950
跟着PNAS学作图:R语言ggplot2作图展示多序列比对结果
R语言ggplot2画漂亮的环形柱形图的一个实例
代码来源的链接是 https://github.com/NearAndDistant/data_science_with_r
用户7010445
2022/02/21
1.3K0
R语言ggplot2画漂亮的环形柱形图的一个实例
R语言ggplot2复现一下CELL论文中的基因共线性图
https://www.sciencedirect.com/science/article/pii/S0092867424004732
用户7010445
2024/06/18
2410
R语言ggplot2复现一下CELL论文中的基因共线性图
ggplot2优雅的给图形添加渐变背景
❝本节来介绍如何给图形添加渐变色背景,通过两个案例来进行展示; 加载R包 library(tidyverse) library(grid) library(RColorBrewer) library(ggh4x) library(scales) library(aplot) 导入数据 sports <- read_tsv("sports.xls") 数据清洗 plot_data <- sports %>% select(exp_men, exp_women, sports) %>% drop
R语言数据分析指南
2022/09/21
1.1K0
ggplot2优雅的给图形添加渐变背景
ggplot2优雅的绘制箭头表格图
R语言数据分析指南
2023/09/11
4650
ggplot2优雅的绘制箭头表格图
全网最全的R语言基础图形合集
直方图是一种对数据分布情况进行可视化的图形,它是二维统计图表,对应两个坐标分别是统计样本以及该样本对应的某个属性如频率等度量。
生信学习者
2024/06/12
1060
全网最全的R语言基础图形合集
R语言ggplot2做双Y轴的一个简单小例子
这部分代码大家可以自己试着运行一下,我用R4.0.3版本遇到的报错,没有找到解决办法,换成R4.1.0之后运行成功了
用户7010445
2021/11/23
4.5K0
R语言ggplot2做双Y轴的一个简单小例子
[会员专享] ggplot2绘制环状正负堆砌条形图
❝「今天VIP群里有观众老爷询问如何绘制环状堆砌条形图」例图如下所示,既然观众老爷们有需求,那小编就来简单写篇文档进行介绍;下面来看具体案例「数据代码已经上传VIP群,请自行下载」 ❞ 例图 图形解读 ❝可以看到就是一张普通的堆砌条形图只不过改为了圆形展示,通过图形我们可以看到数据分为两组,并且每一个样本数值有正负之分,因此与常见的条形图绘制方法无二,只是在于构建极坐标并合理的添加文本;由于小编手里没有合适的数据因此使用R内置数据集来进行展示,下面来看具体细节 ❞ 加载R包 library(tidyv
R语言数据分析指南
2022/09/23
6380
[会员专享] ggplot2绘制环状正负堆砌条形图
跟着Nature Communications学作图:R语言ggplot2气泡图组合水平柱形图完整示例
https://www.nature.com/articles/s41467-022-31724-3
用户7010445
2023/01/06
6650
跟着Nature Communications学作图:R语言ggplot2气泡图组合水平柱形图完整示例
跟着Nature microbiology学作图:R语言ggplot2热图展示离散数据
https://www.nature.com/articles/s41564-022-01270-1
用户7010445
2023/08/23
4840
跟着Nature microbiology学作图:R语言ggplot2热图展示离散数据
ggplot2优雅的绘制圆点柱状图
❝本节来介绍如何灵活使用「geom_segment」与「geom_point」这两个几何对象来构建圆柱形条行图,下面通过1个案例来进行展示; 加载R包 library(tidyverse) 加载数据 data <- read_tsv("data.xls") 数据可视化 ggplot(data,aes(y = reorder(country, diff), x = diff, color=balance))+ geom_segment(aes(yend = country), xend=
R语言数据分析指南
2022/09/21
5330
ggplot2优雅的绘制圆点柱状图
跟着Nature学作图:R语言ggplot2频率分布直方图和散点图添加误差线
https://www.nature.com/articles/s41586-022-05275-y
用户7010445
2023/01/06
7030
跟着Nature学作图:R语言ggplot2频率分布直方图和散点图添加误差线
跟着Cell学作图:R语言ggplot2作图展示差异表达的基因
一组对照加处理这种实验的差异表达分析结果通常是用火山图来展示,如果是很多组实验的话如何展示,这种情况我之前还没有遇到过。公众号后台有读者留言问到了如下的图
用户7010445
2022/02/17
1.3K0
跟着Cell学作图:R语言ggplot2作图展示差异表达的基因
ggplot2基础绘图之哑铃图
❝本节来分享一个绘制哑铃图的小教程,里面细节满满;各位观众老爷细细品味,下面来看具体案例 ❞ 导入数据 read_tsv("data.xls") %>% distinct(country_name,.keep_all = T) 数据可视化 ggplot(aes(reorder(country_name, duration))) + geom_point(aes(y = start_year, col = continent), size = 5, show.legend = FALSE)
R语言数据分析指南
2022/09/21
3820
ggplot2基础绘图之哑铃图
R语言聚类树图小例子
将层级聚类的结果转化为ggdendro作图需要的格式,用到的函数是dendro_data(hc,type="rectangle") type有两个参数可选
用户7010445
2020/03/03
1.1K0
推荐阅读
相关推荐
跟着Nature Communications学作图:R语言ggplot2散点加误差线展示响应比(Response ratio)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验