ggplot2分面网格(Facet Grid)自定义各分面Y轴刻度标签方法咨询
要实现ggplot2分面网格的不同Y轴刻度自定义,最简便的方法是使用ggh4x扩展包提供的分面坐标轴独立设置功能,具体操作如下:
步骤1:安装加载所需包
install.packages("ggh4x") library(ggh4x) library(ggplot2)
步骤2:修改原有绘图代码
仅需要在原有代码的facet_grid层后新增facetted_pos_scales层,即可为不同分面单独设置Y轴参数,修改后的完整代码如下:
ggplot() + geom_violin(data = fulldfUp, aes(x = Species, y = Value), fill = "#ffffff", colour = "#000000", show.legend = FALSE, alpha = .9, size = .3, width = .7) + stat_summary(data = fulldfUp, aes(x = Species, y = Value), fun = mean, geom = "point", shape = 21, size = 3.5, alpha = .9, colour = "#000000", fill = "#fc3232") + facet_grid(Estimate ~. , scales = "free", labeller = labeller(Estimate = ylabels)) + # 新增部分:为不同分面设置独立Y轴 facetted_pos_scales( y = list( Estimate == "平均深度(Mean Depth)" ~ scale_y_continuous(breaks = 1:4, labels = paste0(1:4, "X")), Estimate == "保留reads百分比(Percentage of Retained Reads)" ~ scale_y_continuous(breaks = seq(10,40,10), labels = paste0(seq(10,40,10), "%")) ) ) + scale_fill_manual(values = c("#fbb4ae", "#b3cde3", "#ccebc5", "#decbe4", "#fed9a6")) + scale_colour_manual(values = c("#fbb4ae", "#b3cde3", "#ccebc5", "#decbe4", "#fed9a6")) + theme(panel.background = element_rect(fill = "#ffffff"), panel.grid.major.x = element_line(color = "#ededed", linetype = "dashed", size = .00005), panel.grid.major.y = element_blank(), panel.grid.minor = element_blank(), panel.border = element_blank(), axis.line = element_line(colour = "#000000", size = .3), axis.title = element_blank(), axis.text.x = element_text(colour = "#000000", size = 20, face = "bold", angle = 45, vjust = 1, hjust = 1), axis.text.y = element_text(color = "#000000", size = 20), axis.ticks.x = element_line(color = "#000000", size = .3), axis.ticks.y = element_line(color = "#000000", size = .3), strip.background.y = element_rect(colour = "#000000", fill = "#d6d6d6", size = 0.3), strip.text = element_text(colour = "#000000", size = 20, face = "bold"), legend.position = "top", legend.margin = margin(t = 0, b = 0, r = 0, l = 0), legend.box.margin = margin(t = 10, b = 20, r = 0, l = 0), legend.key = element_rect(fill = NA), legend.background = element_blank())
替代方案(无第三方分面扩展包)
如果不想使用ggh4x,可以拆分绘图后用patchwork拼接:
- 分别筛选
Estimate列两个取值的子集,各自独立绘制小提琴图,分别调用scale_y_continuous设置对应刻度标签 - 用
patchwork包的垂直拼接语法plot1 / plot2合并两个图,调整主题保持样式一致即可。
内容的提问来源于stack exchange,提问作者George Pacheco
相关产品推荐
相关产品推荐

