美文网首页R语言绘图技巧
[R语言]boxplot绘图经验总结

[R语言]boxplot绘图经验总结

作者: YERA | 来源:发表于2021-05-19 00:35 被阅读0次

    箱线图是统计分析里面最为重要且基础的图形,利用R语言绘制箱线图是数据分析里必不可少的一环。这里我总结了面对不同情形时,绘制箱线图的经验。

    这里只介绍利用基础绘图命令boxplot,来绘制箱线图。
    ● 给出一列数据,画出箱线图
    library(RColorBrewer)
    Value=round(runif(50,min=10,max=50),2)
    colors = brewer.pal(8,"Accent")
    boxplot(Value,col = "white",cex=0.5, pch=20,outcol=colors[6], 
            main = "Example",ylab="Value",xlab="Feature")
    stripchart(list(Value),vertical = T,method = "jitter",cex = 0.8,
               pch = 20,col = colors[1],add=T)
    dev.off()
    
    Example

    这里,我们采用了stripchart函数以及RColorBrewer包来添加数据点并调整颜色。

    ● 给出两列数据,画出箱线图
    Value1=round(runif(50,min=10,max=50),2)
    Value2=round(runif(50,min=6,max=45),2)
    colors = brewer.pal(8,"Accent")
    boxplot(Value1,Value2,col = "white",cex=0.5, pch=20,outcol=colors[6], 
            main = "Example",ylab="Value",names =c("Feature1","Feature2"))
    stripchart(list(Value1,Value2),vertical = T,method = "jitter",cex = 0.8,
               pch = 20,col = colors[1:2],add=T)
    dev.off()
    
    Example2

    注意,此时应当利用boxplot函数里面的内置参数names设置每个箱线图的特征名。并且将stripchart函数里面的数据用列表并起来。

    ● 给出按照分类变量划分,含有众多特征的dataframe,画出箱线图
    library(dplyr)
    class = factor(c(rep(1,50),rep(2,50)))
    Value1=round(runif(50,min=10,max=50),2)
    Value2=round(runif(50,min=6,max=45),2)
    Dat = data.frame(class,Value1,Value2)
    colors = brewer.pal(8,"Accent")
    boxplot(Value1~class,Dat,col = "white",cex=0.5, pch=20,outcol=colors[6], main = "Example",ylab="Value")
    Dat1 =  Dat %>% filter(class==1)
    Dat2 = Dat %>% filter(class==2)
    Dat3 = Dat %>% filter(class==3)
    Dat4 = Dat %>% filter(class==4)
    stripchart(list(Dat1[,"Value1"],Dat2[,"Value1"],Dat3[,"Value1"],Dat4[,"Value1"]), vertical = T,method = "jitter",cex = 0.8,pch = 20,col = colors[5:9],add=T)
    dev.off()
    
    Example3

    这里,我们使用了dplyr包,将数据按照不同类别(1,2,3,4)来分成新的数据,并且,在boxplot函数里,不同于上述几种方式,其数据的给定是以公式的方式给出,形如“特征~类别,数据名”的样式。

    箱线图美化
    1. 我们会发现画2个箱线图组合时,箱线图的宽度太大,以至于这种箱线图看起来不美观,如Example2,此时我们可以通过在boxplot函数中指定位置,将箱线图显示在1和3的坐标轴上,起到缩小宽度的效果,当然添点也是如此。
    Value1=round(runif(50,min=10,max=50),2)
    Value2=round(runif(50,min=6,max=45),2)
    colors = brewer.pal(8,"Accent")
    boxplot(Value1,Value2,col = "white",cex=0.5, pch=20,outcol=colors[6], 
            main = "Example",ylab="Value",names =c("Feature1","Feature2"),
            at=c(1, 3), xlim=c(0, 4))
    stripchart(list(Value1,Value2),vertical = T,method = "jitter",cex = 0.8,
               pch = 20,col = colors[1:2],add=T,at=c(1, 3))
    dev.off()
    
    Example4
    2. 当特征过多时,箱线图名称容易出现重叠的现象,此时需要对名称进行角度倾斜,而这在boxplot函数参数里面不能设置,此时我们需要取消横轴的命名,采用text函数,贴在画布上。
    class = factor(c(rep(1,25),rep(2,25),rep(3,25),rep(4,25)))
    Value1=round(runif(50,min=10,max=50),2)
    Value2=round(runif(50,min=6,max=45),2)
    Dat = data.frame(class,Value1,Value2)
    colors = brewer.pal(8,"Accent")
    boxplot(Value1~class,Dat,col = "white",cex=0.5, pch=20,outcol=colors[6], 
           main = "Example",ylab="Value",xlab="",xaxt="n")
    axis(side=1, at=1:4, labels=FALSE)
    text(c(1:4), x=1:4, y=6, xpd=T, srt=30)
    Dat1 =  Dat %>% filter(class==1)
    Dat2 = Dat %>% filter(class==2)
    Dat3 = Dat %>% filter(class==3)
    Dat4 = Dat %>% filter(class==4)
    stripchart(list(Dat1[,"Value1"],Dat2[,"Value1"],Dat3[,"Value1"],Dat4[,"Value1"]),
              vertical = T,method = "jitter",cex = 0.8,
              pch = 20,col = colors[5:9],add=T)
    dev.off()
    
    Example5

    相关文章

      网友评论

        本文标题:[R语言]boxplot绘图经验总结

        本文链接:https://www.haomeiwen.com/subject/ripyjltx.html