早上看到Y叔推文用ggplot2出GraphPad prism的图。我虽然喜欢ggplot,但是文章的最终出图很多还是用graphpad prism来做的,但是要统一风格和各种设置,每次都要调整很久。如果能够用R来达到跟prism相似的效果,那就可以直接用R了。先来试试看。

安装ggprism:

1
remotes::install_github("csdaw/ggprism")

推文举的例子

1
2
3
4
5
6
7
8
9
10
11
12
library(ggplot2)
library(ggprism)
library(patchwork)

p1 <- ggplot(ToothGrowth, aes(x = factor(dose), y = len)) +
stat_summary(aes(fill = factor(dose)), na.rm = TRUE,
geom = "col", fun = mean, colour = "black", size = 0.9) +
scale_y_continuous(limits = c(0, 30), expand = c(0, 0))

p2 <- p1 + theme_prism(base_size = 14)

p1 + p2

结果图:

image-20210207110826159

我用自己的数据

image-20210207111000025

绘图:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
library(ggplot2)
library(ggprism)
library(patchwork)
dat <- readxl::read_xlsx("data.xlsx")
dat$trt <- factor(dat$trt, levels = c("control", "A", "B", "A+B"))
my_comparisons <- list( c("control", "A"), c("A", "A+B"))

p1 <- ggplot(data = dat, aes(x = trt, y = value))+
stat_summary(fun.data = 'mean_sd',
geom = "errorbar",
colour = "black",
width = 0.25,
size = 0.8,
position = position_dodge( .9))+
stat_summary(aes(fill = factor(trt)),
na.rm = TRUE,
geom = "col",
fun = mean,
colour = "black",
size = 0.9) +
stat_compare_means(comparisons = my_comparisons,
method = "t.test",
label.y = c(2.8, 3))+
scale_fill_brewer(palette ="Greys")+
facet_wrap("CellType")

p2 <- p1+ theme_prism(base_size = 14)

p1+p2

结果:

image-20210207111135933

存在的问题

总的来看,效果还可以,但是还不够。

  1. 统计的部分还没有调好,线条怎么调粗一些。

  2. prism可以在柱状图里面填充线条(或其他图案)。

    如果R也可以达到类似的效果,我一定会想办法写一个适用于我自己的完整的实验结果出图R代码出来。

网上找到一个可以达到填充图案效果的包,parttenplot,但是不太理想。不管是代码,还是效果都没有得到很好的解决。

再研究研究,希望能够好的解决这些,已经离目标更近一步了。