前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >一行代码绘制Graphpad Prism风格学术图表

一行代码绘制Graphpad Prism风格学术图表

作者头像
DataCharm
发布2022-05-24 15:51:19
发布2022-05-24 15:51:19
1.5K00
代码可运行
举报
运行总次数:0
代码可运行

有读者私信问小编有没有好的Graphpad Prism的绘图教程推荐,Graphpad Prism 想必做科研的同学们多少都会了解下,也是一个操作简单且功能强大的科研作图神器了,但考虑到其收费设定(可以理解)后,小编就告辞了

~~笑话,有ggplot2这么强大的开源免费的绘图软件了,还会考虑付费的吗?

在询问完读者到底喜欢Graphpad Prism 哪点?得到的答案原来是其绘图风格。这就完事了,小编推荐一个强大的科研绘图包,让你白嫖Graphpad Prism精美的科研主题风。本期推文主要内容如下:

  • R-ggprism包简介
  • R-ggprism样例演示

R-ggprism包简介

  • 「官网」

R-ggprism包的官网地址为:https://csdaw.github.io/ggprism/index.html

  • 「主要绘图函数简介」
  1. 绘图主题(Themes)

ggprism包提供可完整的主题设置函数-theme_prism(),可以帮助你一行代码生成Graphpad Prism经典绘图风格。

  1. 颜色、填充、形状 映射(Colours, fills, and shapes)

对于图表元素中的颜色、填充、形状等,ggprism包分别提供scale_colour_prism()、scale_fill_prism()和scale_shape_prism() 函数进行一一设置。

  1. 刻度设置(Axes)

ggprism包可通过以下代码绘制其独有的刻度风格:

代码语言:javascript
代码运行次数:0
运行
复制
+
scale_x/y_discretey/continuous(guide = "prism_bracket")
# 或者如下
guides(y/x = "prism_minor/")
+
  1. P值添加(p-values)

ggprism包通过add_pvalue() 自动添加统计P值,这个小编认为对于经常绘制统计图表的同学们来说可谓是非常贴心了。

以上就基本介绍完ggprism包的主要绘图函数,接下来小编结合具体示例带大家体验ggprism包特有的绘图风格。

R-ggprism样例演示

主题设置(theme)

首先,我们来看下ggprism包theme_prism()函数主要有哪些参数:

代码语言:javascript
代码运行次数:0
运行
复制
# 以下为默认设置
theme_prism(
  palette = "black_and_white",
  base_size = 14,
  base_family = "sans",
  base_fontface = "bold",
  base_line_size = base_size/14,
  base_rect_size = base_size/14,
  axis_text_angle = 0,
  border = FALSE
)

接下来我们通过一个实例看一下theme_prism()的效果:

代码语言:javascript
代码运行次数:0
运行
复制
# 基础图表
base <- ggplot(mpg, aes(x = displ, y = cty)) +
  geom_point(aes(colour = class))
# theme_prism()默认
them_prism <- base + ggprism::theme_prism()
#theme_prism()定制操作
them_prism_set <- base + ggprism::theme_prism(palette = "purple_passion",
                                              base_size = 16, 
                                              base_line_size = 0.2,
                                              base_family = "Roboto Condensed",
                                              axis_text_angle = 45,
                                              border = TRUE, base_rect_size = 2)

可视化结果如下:

theme_prism() Set

颜色、填充、形状 映射

这里小编只介绍颜色(colour)和形状(shape)的情况,如下:

  • 颜色(colour)
代码语言:javascript
代码运行次数:0
运行
复制
base <- ggplot(mtcars, aes(x = wt, y = mpg)) +
  geom_point(aes(colour = factor(cyl), shape = factor(cyl)), size = 3) + 
  theme_prism() + 
  labs(subtitle = "theme_prism()")+
  theme(legend.position = c(0.8, 0.8)) 
  
p1 <- base + hrbrthemes::scale_colour_ipsum()+
     labs(subtitle = "hrbrthemes::scale_colour_ipsum()")
     
p2 <- base + scale_colour_prism() +
    labs(subtitle = "scale_colour_prism()")
    
p3 <- base + scale_colour_prism(palette = "purple_passion") +
   labs(subtitle = "scale_colour_prism(purple_passion)")

p4 <- base + scale_colour_prism(palette = "candy_bright")+
  labs(subtitle = "scale_colour_prism(candy_bright)")

p5 <- base + scale_colour_prism(palette = "colorblind_safe")+
  labs(subtitle = "scale_colour_prism(candy_bright)")

colour_set_png <- (base + p1+p2)/(p3+p4+p5) 

可视化结果如下:

colour_set

你还可以通过如下代码查看其提供的主题:

代码语言:javascript
代码运行次数:0
运行
复制
lengths(ggprism_data$colour_palettes)
lengths(ggprism_data$fill_palettes)

形状(shape)映射

ggprism包提供的shape形状包括default、filled、complete 三种形式,我们通过一个例子进行说明:

代码语言:javascript
代码运行次数:0
运行
复制
# create a base plot to compare shape scales
base <- ggplot(mpg, aes(x = displ, y = cty)) +
  geom_point(aes(colour = class, fill = class, shape = class)) + 
  theme_prism(base_size = 11, base_fontface = "plain", border = TRUE) +
  theme(plot.subtitle = element_text(face = "bold"),
        legend.position = c(0.8, 0.75),
        legend.key.height = unit(10, "pt")) +
  coord_cartesian(clip = "off") + 
  scale_colour_prism(palette = "floral") + 
  scale_fill_prism(palette = "floral")
p1 <- base
p2 <- base + scale_shape_prism(palette = "default") + 
  labs(subtitle = "default")
p3 <- base + scale_shape_prism(palette = "filled") + 
  labs(subtitle = "filled")
p4 <- base + scale_shape_prism(palette = "complete") + 
  labs(subtitle = "complete")

(p1 + p2) / (p3 + p4)

fill set

添加P值(p-values)

这一部分小编就选择常见的图表进行P值添加,更多详细例子,大家可参考官网,这里我们导入一个新包(rstatix),详细代码如下:

  • 样例一:
代码语言:javascript
代码运行次数:0
运行
复制
library(rstatix)
df_p_val <- rstatix::t_test(ToothGrowth, len ~ supp) %>% 
  rstatix::add_x_position()

p <- ggplot(ToothGrowth, aes(x = factor(supp), y = len)) + 
  stat_summary(geom = "col", fun = mean) + 
  stat_summary(geom = "errorbar", 
               fun = mean,
               fun.min = function(x) mean(x) - sd(x),
               fun.max = function(x) mean(x) + sd(x),
               width = 0.3) + 
  theme_prism() + 
  coord_cartesian(ylim = c(0, 35)) + 
  scale_y_continuous(breaks = seq(0, 35, 5), expand = c(0, 0))

# normal plot
p + add_pvalue(df_p_val, y.position = 30)

Example of add_pvalue()

  • 样例二:
代码语言:javascript
代码运行次数:0
运行
复制
df_p_val <- rstatix::t_test(ToothGrowth, len ~ dose, ref.group = "0.5") %>% 
  rstatix::add_xy_position()

p <- ggplot(ToothGrowth, aes(x = factor(dose), y = len)) + 
  stat_summary(geom = "col", fun = mean) + 
  stat_summary(geom = "errorbar", 
               fun = mean,
               fun.min = function(x) mean(x) - sd(x),
               fun.max = function(x) mean(x) + sd(x),
               width = 0.3) + 
  theme_prism() + 
  coord_cartesian(ylim = c(0, 40)) + 
  scale_y_continuous(breaks = seq(0, 40, 5), expand = c(0, 0))

# with brackets
p1 <- p + add_pvalue(df_p_val, label = "p.adj.signif")

# without brackets
p2 <- p + add_pvalue(df_p_val, label = "p.adj.signif", remove.bracket = TRUE)

p1 + p2

Example02 of add_pvalue()

我们可以通过设置add_pvalue()中的参数对P值样式进行设置。

以上就完成对ggprism包主要绘图函数的设置,接下在通过绘制Graphpad Prism 封面图来告诉ggprism绘制Prism风格图表的便捷性。

  • 封面绘制
代码语言:javascript
代码运行次数:0
运行
复制
library(ggprism)
library(ggnewscale)
df <- data.frame(
  agonist = c(1e-10, 1e-8, 3e-8, 1e-7, 3e-7, 1e-6, 3e-6, 1e-5, 3e-5, 1e-4, 3e-4),
  ctr1 = c(0, 11, 125, 190, 258, 322, 354, 348, NA, 412, NA),
  ctr2 = c(3, 33, 141, 218, 289, 353, 359, 298, NA, 378, NA),
  ctr3 = c(2, 25, 160, 196, 345, 328, 369, 372, NA, 399, NA),
  trt1 = c(3, NA, 11, 52, 80, 171, 289, 272, 359, 352, 389),
  trt2 = c(5, NA, 25, 55, 77, 195, 230, 333, 306, 320, 338), 
  trt3 = c(4, NA, 28, 61, 44, 246, 243, 310, 297, 365, NA)
) %>% 
  mutate(log.agonist = log10(agonist)) %>% 
  pivot_longer(
    c(-agonist, -log.agonist), 
    names_pattern = "(.{3})([0-9])", 
    names_to = c("treatment", "rep"),
    values_to = "response"
  ) %>% 
  filter(!is.na(response))

dose_resp <- y ~ min + ((max - min) / (1 + exp(hill_coefficient * (ec50 - x))))
# 可视化绘制
ggplot(df, aes(x = log.agonist, y = response)) +
  geom_smooth(
  aes(colour = treatment),
  method = "nls", formula = dose_resp, se = FALSE,
  method.args = list(start = list(min = 1.67, max = 397, ec50 = -7, hill_coefficient = 1))
) +
  scale_colour_manual(
      labels = c("No inhibitor", "Inhibitor"),
      values = c("#00167B", "#9FA3FE")
) +
 #这里开始进行ggprism包进行定制化操作
 ggnewscale::new_scale_colour() +
  geom_point(aes(colour = treatment, shape = treatment), size = 3) + 
  scale_colour_prism(
    palette = "winter_bright", 
    labels = c("No inhibitor",
               "Inhibitor")
  ) + 
  scale_shape_prism(
    labels = c("No inhibitor",
               "Inhibitor")
  ) +
  theme_prism(palette = "winter_bright", base_size = 16) +
  scale_y_continuous(
  limits = c(-100, 500), 
  breaks = seq(-100, 500, 100),
  guide = "prism_offset"
) +
 scale_x_continuous(
  limits = c(-10, -3), 
  breaks = -10:-3,
  guide = "prism_offset_minor",
  minor_breaks = log10(rep(1:9, 7)*(10^rep(-10:-4, each = 9))),
  labels = function(lab) {
    do.call(
      expression,
      lapply(paste(lab), function(x) bquote(bold("10"^.(x))))
    )
  }
) +
  theme(
  axis.title.y = element_blank(),
  legend.title = element_blank(),
  legend.position = c(0.05, 0.95),
  legend.justification = c(0.05, 0.95)
) + 
  labs(x = "[Agonist], M")

Custom Charts

总结

今天小编给大家推荐一个可以绘制「Graphpad Prism」 图表风格的强大绘图包-R-ggprism包,小编这里介绍的肯定是不全面,特别是其主题、刻度、颜色等的介绍。感兴趣的同学可以自行去官网了解情况。而想使用Graphpad Prism软件却因为价格、语言等原因导致无法使用的小伙伴(所谓的破解版就算了哈),可使用此包进行学术风格的图表绘制哈~~。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-04-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DataCharm 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • R-ggprism包简介
  • R-ggprism样例演示
    • 主题设置(theme)
    • 颜色、填充、形状 映射
    • 形状(shape)映射
    • 添加P值(p-values)
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档