Seurat::DotPlot 样式美化-Facet方法添加X轴注释标签

简介: 本文示例了 Seurat::DotPlot 气泡图通过 GGPLOT Facet 美化展示效果的代码过程,以供参考学习

image.png

1、获取Seurat::DotPlot() 绘图数据

pacman::p_load(Seurat,dplyr,ggplot2)
sc <- pbmc_small
data.usage <- DotPlot(sc,features = VariableFeatures(sc)[1:10])$data 
> data.usage
                     avg.exp      pct.exp features.plot id avg.exp.scaled
Htr2c           6.387599e-02   0.88218224         Htr2c  0   -0.241662933
St6gal1         1.504964e-02   0.21474173       St6gal1  0   -0.523974858
AC121788.1      4.451450e-02   0.64422519    AC121788.1  0   -0.310429629
Gm28928         4.653460e-03   0.05803831       Gm28928  0   -0.215970623

2、创建x轴分类标签注释

data.anno <- data.frame(
    features.plot = unique(data.usage$features.plot),
    label = c("Cell.A","Cell.A","Cell.B","Cell.C","Cell.C","Cell.D","Cell.E","Cell.F","Cell.G","Cell.H")
)
> data.anno
   features.plot  label
1          Htr2c Cell.A
2        St6gal1 Cell.A
3     AC121788.1 Cell.B
4        Gm28928 Cell.C

3、将注释添加到data.usage方便绘图调用

df.plot <- plyr::join(data.usage,data.anno)

4、重排y轴绘图顺序

df.plot$id <- factor(df.plot$id,levels = sort(levels(df.plot$id),decreasing = T) )
> df.plot$id
  [1] 0  0  0  0...
  Levels: 9 8 7 6 5 4 3 21 20 2 19 18 17 16 15 14 13 12 11 10 1 0 #自定义的绘图标签顺序

5、重绘气泡图并基于facet分面方法为x轴添加注释标签

p <- ggplot(df.plot,aes(x=features.plot,y =  as.numeric(id),size = pct.exp, color = avg.exp.scaled))+
    geom_point() + 
    scale_size("% detected", range = c(0,10)) + #调整绘图点的相对大小
    scale_color_gradientn(colours = viridis::viridis(20),
                          guide = guide_colorbar(ticks.colour = "black",frame.colour = "black"),
                          name = "Average\nexpression") +
    cowplot::theme_cowplot() + 
    ylab("") + xlab("Markers") + theme_bw() +
    scale_y_continuous(breaks = 1:length(levels(df.plot$id)),labels = levels(df.plot$id),sec.axis = dup_axis())+ #复制 y轴 代替边框效果
    facet_grid(~label, scales="free_x",space = "free")+theme_classic() +
    theme(
        axis.text.x = element_text(size=12, angle=0, hjust=0.5, color="black",face="bold"),#x轴标签样式
        axis.text.y = element_text(size=12, color="skyblue",face="bold"),
        axis.title.x = element_text(size=14,colour = 'black',vjust = -0.8,hjust = 0.5),#坐标轴标题

        axis.ticks.y = element_blank(),#坐标轴刻度
        axis.text.y.right = element_blank(),#坐标轴标签隐藏
        axis.ticks.x = element_blank(),
        axis.line = element_line(colour = 'grey30',size = 0.2), #坐标轴轴线样式

        panel.spacing=unit(0, "mm"), #分面图图块间距
        strip.text.x = element_text(size=15, face="bold",color = "#FFFFFF",
                                    vjust = 0.5,margin = margin(b = 3,t=3)),#分面标签样式
        strip.background = element_rect(colour="grey30", fill="grey60",size = 1)
    )

6、分面标签上色

g <- ggplot_gtable(ggplot_build(p))
strips <- which(grepl('strip-', g$layout$name))
cols <- BuenColors::jdb_color_maps[1:length(unique(df.plot$label))] %>% as.vector() 

for (i in seq_along(strips)) {
    k <- which(grepl('rect', g$grobs[[strips[i]]]$grobs[[1]]$childrenOrder))
    l <- which(grepl('titleGrob', g$grobs[[strips[i]]]$grobs[[1]]$childrenOrder))
    g$grobs[[strips[i]]]$grobs[[1]]$children[[k]]$gp$fill <- cols[i]
}
plot(g)


最后再分享一个添加层次聚类树的绘图脚本,在我的GitHub


Reference

r - ggplot2 outside panel border when using facet - Stack Overflow

目录
相关文章
ECharts 提示框组件Tooltip属性大全(包含文本注释)
ECharts 提示框组件Tooltip属性大全(包含文本注释)
390 0
|
定位技术
Echarts使用geojson地理坐标地图地名label标签位置不居中调整的解决方案
Echarts使用geojson地理坐标地图地名label标签位置不居中调整的解决方案
346 0
|
JavaScript
Threejs实现标签,自定义样式显示标签
Threejs实现标签,自定义样式显示标签
1432 0
Threejs实现标签,自定义样式显示标签
|
1月前
|
JavaScript API
Echarts中单独为每个legend图例设置样式-根据数据正负显示不同样式
通过上述方法,我们便能够在ECharts中根据数据的正负为每个图例项设置不同的样式,增强了图表的可读性和表现力。这种方法虽然略显间接,但不失为一种灵活的解决方案。
58 2
LiveCharts 直方图详解,安装和使用,以及常用属性的说明
本文介绍了LiveCharts在WPF中的应用,包括安装方法、基本使用和直方图(LineSeries)的常用属性说明。安装LiveCharts通过NuGet包管理器进行,使用时需在XAML文件中引入相应的命名空间。文章还提供了直方图的属性详解和综合示例,包括线条样式、坐标轴标签、图例位置等设置,以及如何自定义数据点形状。
LiveCharts 直方图详解,安装和使用,以及常用属性的说明
|
6月前
|
数据可视化 前端开发 定位技术
echarts 关于折线统计图常用的属性设置--超详细(附加源码)
echarts 关于折线统计图常用的属性设置--超详细(附加源码)
133 0
echarts圆环图设置legend数据对齐百分比样式使用rich富文本标签和formatter函数
echarts圆环图设置legend数据对齐百分比样式使用rich富文本标签和formatter函数
650 0
Echarts去掉中间的网格线
Echarts去掉中间的网格线
124 1
|
11月前
|
前端开发
CSS改变图标颜色(filter一行代码解决hover变换颜色问题)
CSS改变图标颜色(filter一行代码解决hover变换颜色问题)
250 0
python 绘图中的一些小技巧(显示中文标签,显示负号,共用x轴,设置轴的属性。。。)
python 绘图中的一些小技巧(显示中文标签,显示负号,共用x轴,设置轴的属性。。。)