前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >双坐标分别绘制条形图和折线图

双坐标分别绘制条形图和折线图

作者头像
生信技能树jimmy
发布于 2023-09-26 12:31:20
发布于 2023-09-26 12:31:20
33800
代码可运行
举报
文章被收录于专栏:单细胞天地单细胞天地
运行总次数:0
代码可运行

加载R包

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pkgs = c('tidyverse', 'forcats', 'gtools', 'ggplot2', 'ggpubr', 'cowplot', 
         'scales', 'ggsci', 'viridis', 'hrbrthemes', 'Cairo', 'common')
# install.packages('pkgs')
inst = lapply(pkgs, library, character.only = TRUE)

读取或创建数据

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# Build dummy data
data <- data.frame(
  date = as.Date("2019-01-01") + 0:99,
  day = 1:100,
  season = rep(c('spring', 'summer', 'autumn', 'winter'), times = 25),
  temperature = runif(100)/10,
  price = runif(100)*10
)

data %>%
  slice(1:3)
##         date day season temperature    price
## 1 2019-01-01   1 spring 0.006128101 4.149554
## 2 2019-01-02   2 summer 0.089528352 3.729223
## 3 2019-01-03   3 autumn 0.039876862 4.795942

set.seed(111)
df.raw <- data %>%
  slice_sample(n = 20)

绘图

1、绘制条形图

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
p <- df.raw %>%
  mutate(day = factor(day, levels = unique(mixedsort(day)))) %>%
  mutate(season = factor(season, levels = c('spring', 'summer', 'autumn', 'winter'))) %>%
  ggplot(aes(x = day)) +
  geom_bar(aes(y = temperature, fill = season), stat="identity") 
p

2、条形图分面

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 默认条形图分面
p + facet_grid(.~season)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 条形图分面宽度相同,只展示使用的因子水平
p + facet_grid(.~season, scale="free") 
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 条形图分面宽度自动调整
p1 <- p + facet_grid(.~season, scale="free", space="free_x") 
p1

3、添加折线图

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
p2 <- p1 + geom_line(aes(y=price / 100, group = 1), size = 1, linetype = 'dashed') 
p2

4、添加第二坐标轴

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
p3 <- p2 +  scale_y_continuous(
  name = "First Axis",
  sec.axis = sec_axis(~. * 100, name='Second Axis')) 
p3

5、配色

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
p4 <- p3 + theme_classic2(base_size = 16) +
  scale_fill_simpsons() + theme(legend.position = 'top')
p4

6、给变量加上标

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 例如给秋天autumn加上标数字1,用函数supsc()
p <- df.raw %>%
  mutate(day = factor(day, levels = unique(mixedsort(day)))) %>%
  mutate(season = factor(season, levels = c('spring', 'summer', 'autumn', 'winter'))) %>%
  mutate(season = recode(season,  "autumn" = paste0("autumn", supsc('1')) ) )  %>%
  ggplot(aes(x = day)) +
  geom_bar(aes(y = temperature, fill = season), stat="identity") 


p + facet_grid(.~season, scale="free", space="free_x") +
  geom_line(aes(y=price / 100, group = 1), size = 1, linetype = 'dashed') +
  scale_y_continuous(name = "First Axis", sec.axis = sec_axis(~. * 100, name='Second Axis')) +
  theme_classic2(base_size = 16) + scale_fill_simpsons() + theme(legend.position = 'top')

参考资料

  • Dual Y axis with R and ggplot2(https://r-graph-gallery.com/line-chart-dual-Y-axis-ggplot2.html)
  • Combine ggplot2 Line & Barchart with Double-Axis in R (2 Examples)(https://statisticsglobe.com/combine-ggplot2-line-barchart-double-axis-r)
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-06-30 23:08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 单细胞天地 微信公众号,前往查看

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

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

评论
登录后参与评论
暂无评论
推荐阅读
21天学习挑战赛之java的set集合
​ HashSet集合存储自定义类型元素,要想实现元素的唯一,要求必须重写hashCode方法和equals方法
楠羽
2022/11/18
3260
21天学习挑战赛之java的set集合
【愚公系列】2022年01月 Java教学课程 50-集合对象Set
​ HashSet集合存储自定义类型元素,要想实现元素的唯一,要求必须重写hashCode方法和equals方法
愚公搬代码
2022/01/15
3080
【愚公系列】2022年01月 Java教学课程 50-集合对象Set
【IT领域新生必看】深入浅出Java:揭秘`Comparator`与`Comparable`的神奇区别
在Java编程中,对象排序是一个常见的需求。为了实现对象的排序,Java 提供了两个重要的接口:Comparable和Comparator。对于初学者来说,理解这两个接口的区别及其使用场景,是编写高效和灵活代码的关键一步。本篇文章将详细介绍Comparator与Comparable的定义、用法及其区别,帮助你全面理解这些重要概念。
E绵绵
2024/07/12
2000
Java 解惑:Comparable 和 Comparator 的区别
该文介绍了Java中的自然排序和比较器排序两种方式,并举例说明了使用这两种方式进行排序的具体实现。同时,也探讨了Comparator接口在定制排序中的实现和应用。
张拭心 shixinzhang
2018/01/05
2.1K0
Java 解惑:Comparable 和 Comparator 的区别
初步认识Collator
1.Collator是什么? 主要是用来对区域敏感性的字符串比较的,对本地化字符串进行排序。 什么是区域敏感性字符串呢?比如中文,比如 ß,在德语中,你可能希望 ß (\u00DF) 被当作 b 或者 B 来进行排序,但事实上在该语言中 ß 的排序值高于正常的 s。再比如比较 “a”, “à”。
shengjk1
2020/02/26
1.4K0
[搞懂Java集合类3]Iterator,fail-fast机制与比较器
迭代对于我们搞Java的来说绝对不陌生。我们常常使用JDK提供的迭代接口进行Java集合的迭代。
Java技术江湖
2019/09/25
7470
Java类排序
今天上课,老师讲到Arrays.sor()的时候说,这个可以对数组进行排序,于是当时脑海中立刻浮现出两个问题:一、如果对类排序,一定要把实现什么接口。二、实现了这个接口,Java怎么知道一个类是否实现了某个接口。于是带着这个问题做了一翻查找。
SingYi
2022/07/13
6270
如何优雅地给List集合排序
在平时的开发中,我们或多或少的会用到排序。在最开始学习语言的时候,我们都会学习基本的排序算法。例如:冒泡排序,基数排序,快速排序,插入排序,选择排序。
Lvshen
2022/05/05
2K0
如何优雅地给List集合排序
面试官:元素排序Comparable和Comparator有什么区别?
在 Java 语言中,Comparable 和 Comparator 都是用来进行元素排序的,但二者有着本质的区别。它们两也是常见的面试题,所以今天我们一起来盘它。
磊哥
2021/12/14
5.2K0
面试官:元素排序Comparable和Comparator有什么区别?
浅谈Comparable与Comparator的区别
平时进行自定义排序一直使用实现Comparable接口,一段时间后操作的时候居然发现有了个Comparator接口
陈灬大灬海
2022/11/28
3320
浅谈Comparable与Comparator的区别
字节二面,让写一个LFU缓存策略算法 !
LRU全称 "Least Recently Used",最近最少使用策略,判断最近被使用的时间,距离目前最远的数据优先被淘汰,作为一种根据访问时间来更改链表顺序从而实现缓存淘汰的算法,它是redis采用的淘汰算法之一。redis还有一个缓存策略叫做LFU, 那么LFU是什么呢?
程序员小猿
2021/03/24
7460
字节二面,让写一个LFU缓存策略算法 !
java——List列表结构的复杂排序
这种列表数据的类型是List<Intger>和List<String>,是简单的数据类型。 可以使用以下的方法排序。
不愿意做鱼的小鲸鱼
2022/09/26
1.1K0
java——List列表结构的复杂排序
【Java_13】List、Set、Collections
一、List 1. 特点 ① 有序(存取一致) ② 有索引 ③ 可重复 2. 常用方法 ① add(int index, E element) 将指定的元素,添加到该集合中的指定位置上。 ② get(int index) 返回集合中指定位置的元素。 ③ remove(int index) 移除列表中指定位置的元素, 返回的是被移除的元素。 ④ set(int index, E element) 用指定元素替换集合中指定位置的元素,返回值的更新前的元素。 ⑤ 示例
用户8250147
2021/02/04
2150
Java集合Set接口详解——含源码分析
前几天我们看了Java集合List接口详解——含源码分析,今天我们看一个数据一个数据存储的另一个接口——Set。
秋名山码神
2022/12/13
2960
Java集合Set接口详解——含源码分析
Java集合详解3:一文读懂Iterator,fail-fast机制与比较器
《Java集合详解系列》是我在完成夯实Java基础篇的系列博客后准备开始写的新系列。
Java技术江湖
2019/10/11
9580
对list中对象按某属性排序
实际上只要一句话children.sort(Comparator.comparing(SDict::getOrderNum));
2021/03/11
4.1K0
对list中对象按某属性排序
Java—Sort排序
Java中Sort排序是非常常用的方法,这一章我们主要来认识一下Sort的用法和相关的实现。
全栈程序员站长
2022/09/14
8150
Java—Sort排序
Java集合类:我其实没那么简单
开门见山地说吧,Java提供了一套完整的集合类(也可以叫做容器类)来管理一组长度可变的对象(也就是集合的元素),其中常见的类型包括List、Set、Queue和Map。从我个人的编程经验来看,List的实现类ArrayList和Map的实现类HashMap使用频率最高,其它实现类只能望其项背了。
沉默王二
2019/01/17
3960
java中sort排序_数据结构算法总结
正序排序:Arrays.sort(array),会检查数组个数大于286且连续性好就使用归并排序,若小于32使用插入排序,其余情况使用快速排序
全栈程序员站长
2022/09/21
3750
Comparable 和 ComparatorComparable 自然排序
Comparable 自然排序 Comparable 在 java.lang 包下,是一个接口,内部只有一个方法 compareTo(): Comparable 可以让实现它的类的对象进行比
JavaEdge
2018/05/16
7670
相关推荐
21天学习挑战赛之java的set集合
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档