R语言ggplot2可视化:分组堆叠条形图,展示不同分组的多个处理数据特征,动态交互式条形图

在实验数据可视化过程中,经常需要对多个样本在多个处理条件下多种指标进行比较,使用下面这种分组堆叠条形图能从多个角度同时展示数据特征。

备注:图中横轴以“0”为界左右分为两部分,可以用来表示处理A和处理B,纵轴表示样品,每行条形图中不同颜色分别代表不同类型的指标。

今天分享的内容是在R语言中绘制该图的方法,包括数据的整理准备过程,以及绘图所用的代码,所有数据均随机生成,无实际意义。

使用R语言中plotly包可以将堆叠条形图转换为交互式动态图,鼠标移动时即可显示每个彩色小条的具体信息,方便进行数据探索和挖掘。

数据准备与环境加载

library(tidyverse)
library(ggtext)
library(magrittr)
library(ggprism)
library(MetBrewer)
library(plotly)

以上是绘图所用到的一些R包,主要是使用R语言中ggplot绘图体系,动态交互使用plotly实现。

随机生成测试数据

df <- as.data.frame(matrix(nrow = 1000,ncol = 4))
df$V1[1:500] <- runif(500,min = 10,max = 30)
df$V1[501:800] <- runif(300,min = 50,max = 100)
df$V1[801:1000] <- runif(200,min = 90,max = 120)

第一列数字是随机生成的1000个值,用于映射绘图时每个条形图的长度。

对数据进行随机分组和分类

df$V2[sample(1000,400)] <- "A"
df$V2[is.na(df$V2)] <- "B"
-------------------------------
df$V3[1:100] <- "Type 1"
df$V3[101:200] <- "Type 2"
df$V3[201:300] <- "Type 3"
df$V3[301:400] <- "Type 4"
df$V3[401:500] <- "Type 5"
df$V3[501:600] <- "Type 6"
df$V3[601:700] <- "Type 7"
df$V3[701:900] <- "Type 8"
df$V3[901:1000] <- "Type 9"

第二列分随机分成A和B两组,用来表示处理前和处理后,或者其他分组处理。第三类添加分类信息,绘图时用不同颜色映射不同分类。

添加样品名称并整理表格

df$V4 <- rep(paste0("Sam",1:25),40)
df$V4 <- factor(df$V4,levels = c(paste0("Sam",1:25)))
colnames(df) <- c("value","group","type","class")

整理完成之后,数据格式如下:

绘制堆叠条形图

df %>% 
    ggplot(aes(y=class,x = ifelse(group == "A",-value,value),fill =type)) + 
    geom_bar(stat = "identity",position = "stack")

先使用最基础的条形图进行绘制,已经能大概看到雏形了,主要是颜色的区别,接下来调整颜色。

p <- df %>% 
    ggplot(aes(y=class,x = ifelse(group == "A",-value,value),fill =type)) + 
    geom_bar(stat = "identity",position = "stack")+
    scale_fill_manual(values=met.brewer("Cassatt2",9))+
    scale_x_continuous(guide = "prism_minor",expand = c(0,0),limits=c(-1500,2000),
                       breaks=seq(-1500,1500,300))+
    geom_vline(xintercept = 0,linetype = 2)+ # 添加垂直线
    labs(x="Some test value",y="Some Sample ID")

然后在进行稍微的美化,添加上主题设置代码,即可大功告成。

p <- p + theme(axis.text.y=element_text(color="black",size=8,margin=margin(r=1)),
          axis.text.x=element_text(color="black",size=9,margin=margin(t=8)),
          axis.title.x = element_text(size=11,margin=margin(t=8),color="black",face="bold"),
          plot.margin=unit(c(0.3,0.3,0.3,0.3),units=,"cm"), 
          panel.background = element_blank(),   
          prism.ticks.length.y = unit(2, "pt"),
          prism.ticks.length.x = unit(-5, "pt"),
          axis.line = element_line(color="black"),
          axis.ticks.length.x = unit(-.2, "cm"),
          legend.key = element_blank(),
          legend.background = element_blank(),
          legend.title = element_blank(),
          legend.text=element_text(size=8,color="black"),
          legend.spacing.x=unit(0.1,'cm'),
          legend.key.width=unit(0.4,"cm"),
          legend.key.height=unit(0.4,"cm"),
          legend.position = c(0.001,1.02), # 定义图例位置
          legend.justification = c(0,1)
    )

还有一个隐藏小细节,在上图中标注分组“A”和“B”,使用annotate功能添加。

p <- p + annotate(geom="text",y=5,x=-1200,label="A",size=4,fontface="bold")+
    annotate(geom="text",y=5,x=1700,label="B",size=4,fontface="bold")

动态交互图

通过刚刚的绘图过程已经得到了一个ggplot2对象,使用plotly即可对其进行转换,变为交互式图像。

plotly::ggplotly(p)


至此,感谢您的阅读!如果您喜欢本文分享的可视化方法,欢迎转发分享给更多朋友,如需获得本文测试数据和代码,后台联系即可免费下载。

参考资料:https://mp.weixin.qq.com/s/GPQ5LPSlU6yq08nOb3t5Qg

本文由mdnice多平台发布

  • 11
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: Python数据分析是利用Python编程语言进行数据分析的过程。在数据分析中,经常需要将分析的结果进行可视化展示,提供更直观的信息呈现。而基于plotly的动态可视化绘图则是一种利用plotly库进行数据绘图,并且实现动态效果的方法。plotly是一个强大的绘图库,它可以绘制各种类型的图表,并且支持交互式操作,使得数据分析结果更加直观。 绘制动态可视化图表的过程如下:首先,需要安装plotly库,并导入相应的模块。然后,根据需要,选择合适的图表类型,比如折线图、散点图等,利用plotly的绘图函数进行绘制。可以设置图表的布局、颜色、标题等属性,使得图表更具美观性和可读性。接下来,根据数据的变化,通过更新数据源或设置动效果,实现图表的动态效果。最后,将生成的图表保存为PDF格式的文件,方便保存和分享。 使用基于plotly的动态可视化绘图有以下几个优点:首先,plotly的绘图功能十分强大,可以绘制各种类型的图表,并且支持交互式操作,方便用户进行数据探索和分析。其次,动态可视化图表可以更加生动地展示数据的变化趋势和关系,增加了数据分析的直观性和可理解性。此外,生成的图表可以保存为PDF格式的文件,方便与他人分享和使用。 总之,基于plotly的动态可视化绘图可以帮助数据分析人员更好地展示分析结果,提供直观的信息呈现。它是数据分析中非常有用的工具之一,能够提升数据分析的效果和表现力。 ### 回答2: Python数据分析是利用Python编程语言进行数据分析的一种方法。其中,基于plotly的动态可视化绘图是指使用plotly库来创建具有交互性和动态效果的图表。而动态可视化绘图的优势在于能够更直观地展示数据的变化趋势和关联性。 在使用Python进行数据分析时,绘制可视化图表是非常重要的步骤之一。而plotly作为一种强大的可视化库,提供了丰富的图表类型和交互特性,能够满足各种数据分析的需求。通过使用plotly,用户可以绘制条形图、折线图、散点图、饼图等各种常见图表,并且可以根据需要添加交互功能,如缩放、悬停等。 与传统的静态图表不同动态可视化图表能够更好地展示数据的变化。例如,在时间序列数据分析中,绘制动态折线图可以使用户更直观地看到数据随时间的变化趋势。此外,通过添加滑块或按钮等控件,用户可以通过切换控件的状态来查看不同时间点的数据情况,进一步加深对数据的理解。 绘制动态可视化图表并将其保存为PDF格式可以方便用户在不同设备上查看和分享。Python的绘图库可以轻松实现将图表保存为PDF文件的功能。只需使用相应的函数将绘制的图表对象保存为PDF文件即可。这样,数据分析人员可以将生成的动态可视化图表以PDF的形式分享给其他人,实现对数据分析过程和结果的可视化共享。 总结来说,基于plotly的动态可视化绘图是一种强大的数据分析工具,能够通过交互性和动态效果更好地展示数据分析的结果。将绘制的图表保存为PDF文件可以方便用户在不同设备上查看和分享。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

生信分析笔记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值