zl程序教程

您现在的位置是:首页 >  Java

当前栏目

配色神器R-grafify

2023-02-18 16:30:38 时间

前言

这里介绍一下grafify这个包,虽然它只能做基础绘图和基础分析,比如说柱状图、点图和ANOVA,

但是它「做的图很漂亮」。这个配色,让我不禁想到了小洁老师的画图配色,真的有点像。

R-grafify的颜色展示

颜值党最关注的肯定是颜色了。

grafify的颜色对色盲友好,可以使用以下这些色盘。

默认的色板是其中okabe_ito:

离散/名称/分类变量可以使用:

okabe_ito`, `bright`, `contrast, dark`, `kelly`, `light`, `muted`,`pale`, `r4`,`safe`, `vibrant

连续变量可以使用(decrete=FALSE):

grey_conti`, `blue_conti`, `yellow_conti #连续色也是很明显的,毕竟是渐变色

分歧数据(也是连续变量)可以使用(decrete=FALSE):OrBl_div, PrGn_div(两头渐变)

grafify常用参数看过来:

对于plot_开头的系列函数(也就是grafify自带的函数们),「最常用三个参数」ColPal(使用哪一个色盘), ColSeq(为FALSE时非连续挑选颜色,默认为TRUE),ColRev(是否倒置颜色顺序)

由于是「和ggplot2联动」,所以也可以贴心的在ggplot种使用这些颜色:scale_fill_ and scale_colour_ (或者scale_color_)。常用的参数也会调整为:Colseq(挑选非连续远距离颜色),reverse=TRUE(颜色倒序)

举几个栗子

  • 1.颜色倒序
ggplot(data = InsectSprays,         #data table
       aes(x = spray, y = count))+
  geom_point(size = 3, 
             aes(colour = spray))+
  scale_colour_grafify(reverse = TRUE)+ #默认色盘倒序颜色
  labs(title = "scale_colour_grafify",
       subtitle = "reverse `okabe_ito` palette")+
  theme_classic(base_size = 21)
  • 2.Colseq---不连续的取色
  • 3.连续的向量也能取色
ggplot(mtcars, aes(x = mpg, y = disp))+
  geom_point(aes(fill = gear), #按照gear的数值映射颜色
             size = 4, shape = 21)+
  scale_fill_grafify(palette = "OrBl_div")+ #blue_conti是默认的
  theme_classic(base_size = 21)+
  labs("`yellow_conti` colour scheme")+
  theme_classic(base_size = 21)
  • 4.使用plot_grafify_palette函数,就可以查看每个色盘颜色长啥样(调色神器)
plot_grafify_palette(palette = "okabe_ito")

正式画图

以下是此包能够绘制的19张图

这里面一共又可以分为6个大类,接下来我们就针对6大类来绘制一下

1.双变量图(x是分类变量)(花式秀箱线图与小提琴图)

双变量需要的是长数据形式,默认顺序是data,xcol,ycol

柱状图:可以画散点图plot_dot...或者抖动图(针对稍微多的数据)plot_scatter... plot_scatterbar_sd & plot_dotbar_sd那就可以加上标准差

下面介绍常用参数:

bsize:柱体粗细

ewid:误差棒宽度

symsize or dotsize:点大小

b_alpha (bar alpha柱透明度)和 s_alpha (symsize apha点透明度):控制透明度

jitter=0针对的是scatter函数:不抖动

plot_scatterbar_sd(data_1w_death, #data
                   Genotype,      #向量x
                   Death, #向量y
                   symsize = 3, fontsize = 25, #点与字体大小
                   b_alpha = 0.5,#柱状就设置半透明(凸显颜色)
                   s_alpha = 0.5,#点设置半透明
                   ColPal = "vibrant",   #色盘
                   ColRev = T,           #反颜色
                   ColSeq = F,        #颜色远距离不连续
                   TextXAngle = 45,#字体倾斜
                   jitter=0)+  # 不抖动 
  labs(title = "complex")+    #设置标题
  guides(fill = "none") # 无图例
  • 箱线图:plot_scatterbox, plot_dotbox ; 同上,这里的b_alpha的意思是box alpha箱体透明度
plot_scatterbox(data_t_pratio, #data 
               Genotype,      #X轴 
               Cytokine,      #Y轴
               ColPal = "muted",#设置色盘
               jitter = 0.1,  #加入抖动
               s_alpha = 0.7, #点透明度
               b_alpha = 0)+  #箱体透明度
  labs(title = "Scatter & box plot, `muted` palette",#加上大小标题
       subtitle = "jitter & bar opacity")+
  scale_y_log10()+            #对y轴范围取log
  annotation_logticks(sides = "l") #在左侧加上指示位置

小提琴图:·plot_scatterviolinplot_dotviolin

小提琴图也差不多,其中特有的参数

其中添加了

s_alpha 还是点的透明度

v_alpha 小提琴透明度

b_alpha里面的箱子的透明度

trim = FALSE设置有无提琴头

#继续叠buff
plot_scatterviolin(data_t_pratio, #data
                   Genotype,      #X轴
                   Cytokine,      #Y轴
                   ColPal = "pale", fontsize = 25,#色盘
                   jitter = 0.2,  #加抖动
                   s_alpha = 0.8,#点透明度
                   v_alpha = 0.2,#小提琴透明度
                   b_alpha = 0.5,#箱体透明度
                   bwid = 0.2,    #箱体宽度
                   trim = T)+     #去除提亲两头
  labs(title = "All in")+#标题
  scale_y_log10()+            #log Y轴
  annotation_logticks(sides = "l")+#加上log注释棒
  guides(fill = "none")#不要图例

还有俩函数plot_bar_sd & plot_point_sd都是只展示均值和标准差。

2.多变量图(还可以加统计信息额)

可以绘制多于两个变量的柱状图箱线图等,还可以加上ANOVA统计!!!

  • 柱状图:plot_3d_scatterbar,plot_4d_scatterbar
  • 箱线图:plot_scatterbox, plot_dotbox
  • 小提琴图:plot_scatterviolin,plot_dotviolin

其中可以大致的分为plot-3d以及plot-4d两个情况。plot3d可以做单因素方差分析,4d是双因素方差分析

  • plot_3d_sctterbar & plot_3d_sctterbox

(1) 柱状图

plot_3d_scatterbar(data_1w_death,
                   Genotype,             #x轴分组信息
                   Death,                #y轴数值信息
                   Experiment,           #区域因子(影响因素)
                   b_alpha = 0.5,        #透明度
                   jitter = 0.4,         #增加抖动
                   ColPal = "contrast",  #色盘
                   ColRev = T)+          #逆转颜色
  labs(title = "1way RB, bar/SD",
       subtitle = "(`contrast` palette)")
#blocking factor就是区域因子也就是不重要但是会影响到实验的因素
plot_4d_scatterbar(data_2w_Tdeath,           #数据
                   Genotype,                 #x轴分类因素
                   PI,                       #y轴数值型向量
                   Time,                     #第二个分类因子(双因素嘛)
                   Experiment,               #blocking factor
                   b_alpha = 0.7,            #透明度
                   ColPal = "okabe_ito")+    #色盘 
  labs(title = "2way/RM, bars/SD",
       subtitle = "(shapes = randomised blocks)")
plot_4d_scatterbox(data_2w_Tdeath,           
                   Genotype,                 
                   PI,                       
                   Time,                  
                   Experiment,               
                   b_alpha = 0.7,          
                   ColPal = "okabe_ito")+      
  labs(title = "2way/RM, box/whiskers",
       subtitle = "(shapes = randomised blocks)")

3. 定量x-y图

  • 三个变量都是数值型变量:plot_xy_NumGroup
plot_xy_NumGroup(dplyr::filter(diamonds, cut == "Premium" & clarity == "SI1"), 
                 depth, #x轴
                 price, #y轴
                 carat, #渐变的数据
                 s_alpha = .5, #点透明度
                 ColPal = "PrGn_div")+ #选取了分歧数据色盘
  labs(title = "`PrGn_div` colour palette")
  • 两个数值型变量加一个分类变量:1plot_xy_CatGroup
plot_xy_CatGroup(data=neuralgia,
                xcol= Age,
                ycol= Duration,
                 CatGroup=Pain,#通过这个参数进行分组
                 symsize = 3,
                 ColPal = "vibrant")+   #palette  
  labs(title = "2 numeric & 1 categorical variable",
       subtitle = "(reverse 'vibrant' palette, facet_wrap)")+
  facet_wrap("Treatment")

4.前后对应图

有助于显示对应数据的变化情况。作图时依然需要长数据,此外还需要groups参数一列标注数据之间的对应关系。:

  • 不同对应有不同的颜色:plot_befafter_colours (plot_befafter_colors)
plot_befafter_colours(data_1w_death,
                      Genotype,
                      Death,
                      Experiment, 
                      symsize = 4,
                      ColRev = T)+
  labs(title = "Mutiple groups, matched colours",
       subtitle = "(reversed `okabe_ito`)")

不同组间绘制前后图

plot_befafter_colours(data_2w_Tdeath,
                      Time,
                      PI,
                      Experiment,
                      symsize = 3)+
  facet_wrap("Genotype")+#分面
  labs(title = "Two-way repeated measures",
       subtitle = "(matched shapes, `okabe_ito` palette)")

plot_befafter_shapes

plot_befafter_shapes(data_2w_Tdeath,#data
                      Time,#xcol
                      PI,#ycol
                      Experiment,#match
                     s_alpha= 0.7,        #点透明度
                     symsize = 2,        #点大小
                     symthick = 1.5,     #描边宽度
                     ColPal = "contrast",#指定色盘
                     ColRev = T)+        #倒序颜色
  facet_wrap("Genotype")+#分面
  labs(title = "Two-way repeated measures\nmatched shapes",
       subtitle = "(`contrast` palette reversed)")
#如果想要单色,直接使用SingleColour参数
plot_befafter_colours(data_t_pdiff, 
                      Condition, 
                      Mass, 
                      Subject, 
                      SingleColour = "ok_orange")#单色是橙色
plot_befafter_shapes(data_t_pdiff, 
                     Condition, 
                     Mass, 
                     Subject, 
                     SingleColour = "ok_bluegreen")#单色是形状

5.数据分布图

QQ图:plot_qqline

需要数据表,y值以及分组因子(如果有的话)

plot_qqline(data_t_pratio, 
            log(Cytokine),       #log transformed-data
            Genotype)+         
  labs(title = "QQ plot with log-transformation",
       subtitle = "(`all_grafify` palette)")

密度图:plot_density

plot_density(data = chickwts, 
            ycol = weight, 
            group = feed,
            TextXAngle = 45,
            fontsize = 16)+
 facet_wrap("feed")            #这个分面真的好有用哎

直方图:plot_histogram

和geom_histgram几乎一致

plot_histogram(data = diamonds,
               ycol = carat,
               group = cut,
               fontsize = 16)

分面来看

plot_histogram(data = diamonds,
               ycol = carat,
               group = cut,
               TextXAngle = 45,
               fontsize = 16)+
  scale_x_log10()+  #log x轴
  facet_wrap("cut") #分面

QQ图建模:plot_qqmodel

可以画线性模型的残差呢。这里她画的是学生残差,这个残差可以解决outlier将回归模型向outlier处‘拉’的情况。

计算方法为

详细介绍见:https://online.stat.psu.edu/stat462/node/247/

#创建一个线性模型
mod1 <- simple_model(data_2w_Festing,
                     "GST",
                     c("Treatment", "Strain"))

#画模型的残差
plot_qqmodel(mod1)

感兴趣的小伙伴还可以康康 相关的教学视频 以及官网。