pythonic生物人

Graphpad Prism还是ggprism?

  • 本文介绍一款免费的R语言工具 ggprism ,可轻松实现Graphpad Prism风格。

ggprism简介

ggprism主要具有以下 6个方面功能 ,
  • add_pvalue()添加p值
  • theme_prism()修改主题
  • scale_colour_prism()修改配色
  • scale_fill_prism()修改填充色
  • scale_shape_prism()修改点形状
  • guides()/scale_y_continuous()修改坐标轴刻度
下面简单介绍各个功能效果, 具体使用参考下文ggprism实践部分,

add_pvalue()添加p值

add_pvalue() 可轻松实现如下功能, 或者 当然,添加p值也可使用
ggstatsplot 👉 ggstatsplot几行code终结SCI级图表统计+画图

theme_prism()修改主题

ggprism有多达 44种主题 供选择,theme_prism(palette = "purple_passion")即可调用主题"purple_passion",
library(ggprism)
ggprism_data$fill_palettes#列出所有主题及颜色成分
$autumn_leaves
'#A00000''#FF0000''#CE0665''#FF8080''#9F044D''#F94040''#FF6000''#CE0665''#C06000'
$beer_and_ales
'#94641F''#C5944E''#D79A40''#C0B57B''#804040''#BB5E00''#CD751D''#910000''#A25100'
$black_and_white
'#000000''#A0A0A4''#808080''#D4D4D4''#606060''#A0A0A4''#606060''#E8E8E8''#A0A0A4'
$blueprint
'#FFFFFF''#C8DEF9''#FFFFFF''#FFFFFF''#99CCFF''#366699''#FFFFFF''#366699''#003366'
$candy_bright
'#F71480''#FF8000''#808000''#008000''#0000FF''#76069A''#F71480''#FF8000''#808000'
$candy_soft
'#FF8080''#FFA040''#C0C000''#00C000''#55A0FB''#AD07E3''#FF8080''#FFA040''#C0C000'
$colorblind_safe
'#000000''#FF0066''#107F80''#40007F''#AA66FF''#66CCFE'
$colors
'#0000FF''#FF0000''#00C000''#AD07E3''#FF8000''#000000''#94641F''#000080''#610051''#A00000''#005A00''#F2B77C''#00FF00''#90BFF9''#C0C0FF''#606060''#FFFF00''#C06000''#D4D4D4''#C0C000'
$diazo
'#C8DEF9''#90BFF9''#B5B5FF''#D4D4D4''#55A0FB''#5757F9''#90BFF9''#8BABD3''#8B90CE'
$earth_tones
'#4E5B2D''#6F6338''#967E55''#6D6058''#4E5246''#758942''#93824A''#8A744E''#827268''#33362E'
$evergreen
'#005A00''#099963''#00C000''#008000''#05BE78''#099963''#ADDEAD''#0F99B2''#0A9444'
$fir
'#9DF8FF''#20B2AA''#99CCCC''#9DF8FF''#336666''#20B2AA''#99CCCC''#000000''#336666'
$flames
'#FFCC00''#FF9900''#CD3807''#FFAD21''#FFFF33''#F40000''#FF9900''#FFCC00''#FFFF33'
$floral
'#7CA0D4''#A48AD3''#E995EB''#BADE86''#2B8AAE''#624894''#DE757B''#8BA56F''#073F80''#40007F''#80003F''#0A522A'
$greenwash
'#845852''#993D38''#E98440''#5A5448''#818C5A''#E25B54''#CF7F4D''#FEC3A0''#848484''#90C82B'
$inferno
'#000004''#420A68''#932667''#DD513A''#FCA50A''#FCFFA4'
$magma
'#000004''#3B0F70''#8C2981''#DE4968''#FE9F6D''#FCFDBF'
$mustard_field
'#C0B57B''#808000''#C0C000''#C5944E''#918751''#FFC080''#C0B57B''#808000''#C0C000'
$muted_rainbow
'#A4553B''#9D3A5E''#5D7A2B''#2C8169''#4269A0''#FF9444''#D77B98''#AFB76D''#6CC7B3''#82A5D5'
$neon
'#00FF00''#0000FF''#F74ED6''#FFFF00''#00FF00''#0000FF''#FFFF00''#0000FF''#F74ED6'
$ocean
'#F0E68C''#FFFFCC''#6699CC''#CCCC00''#C0C0C0''#666699''#FFFFCC''#CCCC99''#FFFFCC'
$office
'#000080''#800040''#4C4C4C''#008080''#004080''#800080''#008040''#0000FF''#5757F9'
$pastels
'#CCCCFF''#99CCFF''#6699CC''#666699''#9370DB''#C8DEF9''#CCCCFF''#996699''#CC6699'
$pearl
'#000000''#E8A761''#9BB3D2''#E5938A''#BDC1C4''#F2CEC0'
$plasma
'#0D0887''#6A00A8''#B12A90''#E16462''#FCA636''#F0F921'
$prism_dark
'#2C1453''#114CE8''#0E6F7C''#FB4F06''#FB0005''#A48AD3''#1CC5FE''#6FC7CF''#FBA27D''#FB7D80'
$prism_light
'#A48AD3''#1CC5FE''#6FC7CF''#FBA27D''#FB7D80''#2C1453''#114CE8''#0E6F7C''#FB4F06''#FB0005'
$purple_passion
'#76069A''#AD07E3''#F74ED6''#B856D7''#DE8BF9''#F71480''#F7ABE8''#B07FC0''#D614AF'
$quiet
'#006666''#CCCC99''#999966''#99CCCC''#6C6935''#CCCC99''#999966''#F0E68C''#336666'
$shades_of_gray
'#000000''#A0A0A4''#808080''#D4D4D4''#606060''#A0A0A4''#606060''#E8E8E8''#A0A0A4'
$spring
'#1E90FF''#FFFFFF''#FFFF00''#FFCC00''#90EE90''#33CC00''#CC6699''#FF99FF''#9DF8FF'
$stained_glass
'#FF0000''#FFFF00''#00FF00''#55A0FB''#B856D7''#F74ED6''#FF8000''#0000C0''#FFFF00'
$starry
'#323232''#1B6393''#FCD351''#C7E3CC''#F8EEC1'
$summer
'#7DA1D5''#BDDE85''#DDAF70''#DE767C''#EA95EB''#A58BD4''#53629E''#2C8AAE''#51A278''#9CB667'
$sunny_garden
'#33CC00''#CC9900''#6699CC''#8B4513''#90EE90''#008000''#CC9900''#FFCC00''#FFFF33'
$the_blues
'#000080''#0000C0''#0000FF''#5757F9''#55A0FB''#90BFF9''#C8DEF9''#0000FF''#5757F9'
$viridis
'#440154''#414487''#2A788E''#22A884''#7AD151''#FDE725'
$warm_and_sunny
'#F94040''#FF6000''#FFFF06''#FCA92E''#000000''#F94040''#FFC080''#FF8000''#CE0665'
$warm_and_sunny2
'#F94040''#FF8000''#FFFF00''#FCA92E''#FFFFA0''#F94040''#F2B77C''#FF8000''#CE0665'
$warm_pastels
'#99CCFF''#CCCCFF''#FFD700''#00CCCC''#AFEEEE''#FF99FF''#FF9999''#FFFF99''#99FFCC'
$waves
'#2E58A4''#B69D71''#E3DED4''#70AFC7''#4F5357'
$winter_bright
'#077E97''#800080''#000080''#8D8DFF''#C000C0''#056943''#077E97''#800080''#000080'
$winter_bright2
'#0F99B2''#C000C0''#0000C0''#90BFF9''#B07FC0''#099963''#0F99B2''#C000C0''#0000C0'
$winter_soft
'#55A0FB''#F74ED6''#5757F9''#C8DEF9''#DE8BF9''#05BE78''#90BFF9''#F7ABE8''#8D8DFF'
$wool_muffler
'#6699CC''#87CEFA''#FF9933''#6699CC''#87CEFA''#FF6600''#CCCCFF''#87CEFA''#FF9933'

具体什么样子?

scale_colour/_fill_prism()修改配色

scale_colour_prism(palette = "colorblind_safe")或
scale_fill_prism(palette = "colorblind_safe")直接调用"colorblind_safe"主题配色,

scale_shape_prism()修改点形状

scale_shape_prism()即可轻松实现,

guides()/scale_y_continuous()修改坐标轴刻度

ggprism实践

该案例模仿Graphpad Prism的一张图,https://cdn.graphpad.com/assets/0.27.0/images/srcset/prism-get-actionable-help-w1920-800.png 几乎使用到了ggprism中主要的方法 (详细见代码中注释),

# 导入package
library(ggplot2)
library(ggprism)
library(ggnewscale)
library(dplyr)
library(tidyr)

# 准备数据
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")) + 
  ggnewscale::new_scale_colour() +
  geom_point(aes(colour = treatment, shape = treatment), size = 3) + 
  
  #scale_colour_prism修改配色,此处使用ggprism中"winter_bright"主题中配色
  scale_colour_prism(palette = "winter_bright", 
                     labels = c("No inhibitor", "Inhibitor")) + 
  
  #scale_shape_prism修改点形状                   
  scale_shape_prism(labels = c("No inhibitor", "Inhibitor")) + 
  
  #theme_prism修改主题,此处使用ggprism中"winter_bright"主题
  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(guide = guide_prism_minor())方式修改刻度
  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")

- END- 关注pythonic生物人👇 pythonic生物人去哪了?
微信交流
备注来意 (交流群、合作等等)