跟着Nature学作图:R语言ggplot2箱线图/堆积柱形图完整示例

Graph pangenome captures missing heritability and empowers tomato breeding

没有找到论文里的作图的代码,但是找到了部分组图数据,我们可以用论文中提供的原始数据模仿出论文中的图

今天的推文重复一下论文中的 Extended Data Fig7b Extended Data Fig7c 箱线图和堆积柱形图

image.png

箱线图下方的8个矩形可以用拼图的方式来实现

箱线图的部分示例数据

image.png

这里并没有提供箱线图的分组数据,这里我自己随便构造一列分组数据了,所以最终结果可能和原图不一致

整理数据

library(readxl)
dat01<-read_excel("data/20220711/41586_2022_4808_MOESM10_ESM.xlsx",
                  sheet = "Extend Fig7b",
                  skip = 1)
head(dat01)

library(tidyverse)

dat01 %>% 
  mutate(group_info=sample(c(rep("A",313),
                             rep("B",5),
                             rep("C",8),
                             rep("D",6)),
                           332,
                           replace = FALSE)) -> efig7c

箱线图代码

library(ggplot2)
library(latex2exp)
help(package="latex2exp")
dat<-data.frame(x=c(0.5,1:4),
                y=-Inf,
                label=c("n=",313,5,8,5))

ggplot(data=efig7c,
       aes(x=group_info,y=BLUP))+
  geom_boxplot(aes(fill=group_info))+
  scale_fill_manual(values = c("#feb2a9","#fdd79d",
                               "#dbcde4","#c993c7"))+
  geom_jitter(width = 0.4)+
  theme_bw()+
  theme(panel.grid = element_blank())+
  annotate(geom = "text",
           x=4,y=Inf,
           label=TeX(r"(Kruskal Wallis, \textit{P} = 5 \times 10${^-}$${^7}$)"),
           vjust=1,hjust=1)+
  geom_text(data=dat,aes(x=x,y=y,label=label),
            inherit.aes = FALSE,
            vjust=-0.8)+
  ylim(-40,NA)+
  labs(y="BLUP value of expression")+
  theme(axis.title.x = element_blank(),
        axis.text.x = element_blank(),
        legend.position = "none") -> p1
p1

image.png

箱线图下方的矩形点

dat.2<-data.frame(x=rep(LETTERS[1:4],2),
                  y=rep(c(1,2),each=4),
                  group=c("A","A","A","D","A","B","D","A"))
dat.2

ggplot(data=dat.2,aes(x=x,y=y,fill=group,color=group))+
  geom_point(shape=22,size=5)+
  scale_fill_manual(values = c("#fc8072","#a1d99b",
                               "#4192c6"),
                    labels=c("Reference homozygous",
                             "Heterozygous",
                             "Alternate homozygous"))+
  scale_color_manual(values = c("#fc8072","#a1d99b",
                               "#4192c6"),
                     labels=c("Reference homozygous",
                              "Heterozygous",
                              "Alternate homozygous"))+
  theme_void() +
  theme(legend.title = element_blank())+
  annotate(geom = "text",
           x=1,y=2,label="SV3_42936717",
           hjust=1.2,size=3,vjust=1)+
  annotate(geom = "text",
           x=1,y=1,label="SV3_42954617",
           hjust=1.2,size=3,vjust=0) -> p2
p2

image.png

将两个图组合到一起

library(ggpubr)
as_ggplot(get_legend(p2))
library(patchwork)

p1+
  annotation_custom(grob = get_legend(p2),
                    xmin=3.5,xmax=3.5,ymin=-28,ymax=-28)+
  p2+
  theme(legend.position ="none")+
  plot_layout(ncol = 1,heights = c(10,1)) -> p3
p3

image.png

最后是堆积柱形图的代码

数据集

image.png

dat02<-read_excel("data/20220711/41586_2022_4808_MOESM10_ESM.xlsx",
                  sheet = "Extend Fig7c")
dat02

dat02$x<-factor(dat02$x,
                levels = c("SNPs","Indels","SVs"))
dat02

dat02 %>% 
  group_by(x) %>% 
  mutate(new_col=cumsum(y)) -> dat02

ggplot(data=dat02,aes(x=x,y=y,fill=group))+
  geom_bar(stat="identity",
           position = "stack")+
  scale_fill_manual(values = c("Non-module"="#e99e9c",
                               "Module"="#98c0d7"))+
  geom_text(aes(x=x,y=new_col,label=y),
            vjust=1)+
  labs(x=NULL,y=TeX(r"(\textit{h}${^2}$)"))+
  theme_classic()+
  scale_y_continuous(expand = expansion(mult = c(0,0)))+
  theme(legend.position = c(0.2,0.8),
        legend.title = element_blank(),
        axis.title.y = element_text(angle = 0,vjust = 0.5)) -> p4
p4

image.png

最后是拼图

p3+p4
ggarrange(p3,p4,ncol = 2)

image.png

示例数据和代码可以自己到论文中获取,或者给本篇推文点赞,点击在看,然后留言获取

AI大模型学习福利

作为一名热心肠的互联网老兵,我决定把宝贵的AI知识分享给大家。 至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

一、全套AGI大模型学习路线

AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!

因篇幅有限,仅展示部分资料,需要点击文章最下方名片即可前往获取

二、640套AI大模型报告合集

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

因篇幅有限,仅展示部分资料,需要点击文章最下方名片即可前往获

三、AI大模型经典PDF籍

随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。


因篇幅有限,仅展示部分资料,需要点击文章最下方名片即可前往获

四、AI大模型商业化落地方案

因篇幅有限,仅展示部分资料,需要点击文章最下方名片即可前往获

作为普通人,入局大模型时代需要持续学习和实践,不断提高自己的技能和认知水平,同时也需要有责任感和伦理意识,为人工智能的健康发展贡献力量

<think>好的,用户想用ggplot2绘制比例堆积柱形图,需要方法和示例代码。首先,我需要回忆比例堆积柱形图的特点。这种图表每个柱子的总高度为100%,各部分按比例显示。与普通堆积柱形图不同,普通的是绝对值叠加,而比例的是相对值。 接下来,我应该考虑数据准备。通常需要计算每个类别下各组的比例。例如,使用dplyr的group_by和mutate来计算百分比。比如按分类变量分组后,每个组内计算比例,并可能乘以100转换为百分比。 然后是绘图步骤。使用ggplot2的geom_bar或geom_col,但需要设置position参数为"fill",这样柱子会按比例堆叠。同时,可能需要调整坐标系,比如使用coord_flip变成水平柱状图,但这不是必须的。 添加标签方面,可能需要用geom_text或geom_label来显示百分比。需要注意的是,当使用position_fill时,标签的位置可能需要调整,通常y坐标为1的位置,但可能需要根据数据的具体结构来调整。 颜色和主题调整也是重要部分,使用scale_fill_brewer或viridis调色板来美化颜色,labs添加标题和轴标签,theme_minimal或类似主题来优化外观。 现在需要检查是否有引用中的相关示例。用户提供的引用中,引用[4]提到了使用geom_bar和geom_text来添加百分比标签,但那是普通柱状图。而比例堆积可能需要调整stat和position参数。引用[3]中的例子使用了coord_flip和scale_fill_viridis_d,这可能对调整图表方向有帮助。 可能还需要考虑数据转换的步骤,比如使用group_by和mutate计算百分比,或者在ggplot内部使用stat计算。例如,使用stat(prop)或者计算比例后传入。 另外,确保代码正确性,比如检查aes映射是否正确,位置调整是否正确,标签的位置是否准确。可能需要用after_stat或stat_count等函数来获取统计后的值。 最后,给出一个完整示例代码,包括数据模拟、数据处理、绘图和美化步骤。确保用户能够复制并运行代码,得到所需的比例堆积柱形图。</think>### 使用ggplot2绘制比例堆积柱形图的方法 比例堆积柱形图的特点是**每个柱子的总高度为100%**,各组别按比例分布,适合展示类别内部构成关系。以下是具体实现步骤和示例代码: --- #### **1. 数据准备** 假设有以下模拟数据(以汽车品牌与类型为例): ```r library(tidyverse) # 模拟数据 df <- data.frame( brand = rep(c("A", "B", "C"), each = 3), type = rep(c("SUV", "Sedan", "Truck"), 3), count = c(20, 30, 50, 40, 25, 35, 15, 45, 40) ) # 计算比例 df_percent <- df %>% group_by(brand) %>% mutate(percent = count / sum(count) * 100) %>% ungroup() ``` --- #### **2. 基础绘图** 使用`geom_bar(stat = "identity", position = "fill")`实现比例堆积效果: ```r ggplot(df_percent, aes(x = brand, y = percent, fill = type)) + geom_bar(stat = "identity", position = "fill") ``` --- #### **3. 添加百分比标签** 通过`geom_text()`在柱子内部显示百分比,注意调整标签位置: ```r ggplot(df_percent, aes(x = brand, y = percent, fill = type)) + geom_bar(stat = "identity", position = "fill") + geom_text( aes(label = sprintf("%.1f%%", percent)), position = position_fill(vjust = 0.5), # 居中显示 color = "white", size = 4 ) ``` --- #### **4. 优化图表样式** 调整颜色、坐标轴和主题: ```r ggplot(df_percent, aes(x = brand, y = percent, fill = type)) + geom_bar(stat = "identity", position = "fill") + geom_text( aes(label = sprintf("%.1f%%", percent)), position = position_fill(vjust = 0.5), color = "white", size = 4 ) + scale_fill_brewer(palette = "Set2") + # 颜色方案 scale_y_continuous(labels = scales::percent) + # 将y轴显示为百分比 labs(x = "Brand", y = "Proportion", fill = "Type") + theme_minimal() + # 简洁主题 theme(legend.position = "top") # 图例位置 ``` --- #### **关键参数解释** - `position = "fill"`:强制柱子高度按比例归一化为100%[^4]。 - `position_fill(vjust = 0.5)`:控制标签在柱子中的垂直居中位置。 - `scale_y_continuous(labels = scales::percent)`:将y轴刻度转换为百分比格式[^2]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值