R可视化学习(2)--箱线图
2020-08-23 本文已影响0人
凯凯何_Boy
箱线图由箱和“须”(whisker)两部分组成。箱的范围是从数据的下四分位数到上四分位数,也就是常说的四分位距(IQR)。箱的中间有一条表示中位数,或者说50%分位数的线。须则是从箱子的边缘出发延伸至1.5倍四分位距内的最远的点。如果图中有超过须的数据点,则其被视为异常值,并以点来表示。如下图使用偏态的数据展示了直方图、密度曲线和箱线图之间的关系。
图片.png
本篇介绍如何使用ggplot2制作箱线图,我们使用geom_boxplot()函数,一个简单的格式如下:
geom_boxplot(outlier.colour="black", outlier.shape=16,
outlier.size=2, notch=FALSE)
outlier.colour, outlier.shape, outlier.size : 展示离群值的颜色,形状,大小
notch : 逻辑值。如果为真,画一个有缺口的方框图。凹口显示中值周围的置信区间,该区间通常基于中值+/- 1.58*IQR/sqrt(n)。槽口用于比较组;如果两个盒子的凹口没有重叠,这是中间值不同的有力证据。
图片.png
准备数据
使用ToothGrowth数据集
# Convert the variable dose from a numeric to a factor variable
ToothGrowth$dose <- as.factor(ToothGrowth$dose)
head(ToothGrowth)
基本的箱线图
library(ggplot2)
# Basic box plot
p <- ggplot(ToothGrowth, aes(x=dose, y=len)) +
geom_boxplot()
p
# Rotate the box plot
p + coord_flip()
# Notched box plot
ggplot(ToothGrowth, aes(x=dose, y=len)) +
geom_boxplot(notch=TRUE)
# Change outlier, color, shape and size
ggplot(ToothGrowth, aes(x=dose, y=len)) +
geom_boxplot(outlier.colour="red", outlier.shape=8,
outlier.size=4)
图片.png
添加平均值
使用stat_summary()函数
# Box plot with mean points
p + stat_summary(fun.y=mean, geom="point", shape=23, size=4)
图片.png
选择指定组展示
p + scale_x_discrete(limits=c("0.5", "2"))
图片.png
带有点的箱线图
通过geom_dotplot()函数或者geom_jitter()函数添加点
# Box plot with dot plot
p + geom_dotplot(binaxis='y', stackdir='center', dotsize=1)
# Box plot with jittered points
# 0.2 : degree of jitter in x direction
p + geom_jitter(shape=16, position=position_jitter(0.2))
图片.png
映射分组颜色
改变箱子的线条颜色
盒子图线颜色可以通过变量不同水平自动控制:
# Change box plot line colors by groups
p<-ggplot(ToothGrowth, aes(x=dose, y=len, color=dose)) +
geom_boxplot()
p
图片.png
我们也可以使用下列的函数手动指定箱子的颜色
- scale_color_manual() : to use custom colors
- scale_color_brewer() : to use color palettes from RColorBrewer package
- scale_color_grey() : to use grey color palettes
# Use custom color palettes
p+scale_color_manual(values=c("#999999", "#E69F00", "#56B4E9"))
# Use brewer color palettes
p+scale_color_brewer(palette="Dark2")
# Use grey scale
p + scale_color_grey() + theme_classic()
图片.png
改变箱子的填充颜色
# Use single color
ggplot(ToothGrowth, aes(x=dose, y=len)) +
geom_boxplot(fill='#A4A4A4', color="black")+
theme_classic()
# Change box plot colors by groups
p<-ggplot(ToothGrowth, aes(x=dose, y=len, fill=dose)) +
geom_boxplot()
p
也可以手动改变填充颜色
- scale_fill_manual() : to use custom colors
- scale_fill_brewer() : to use color palettes from RColorBrewer package
- scale_fill_grey() : to use grey color palettes
# Use custom color palettes
p+scale_fill_manual(values=c("#999999", "#E69F00", "#56B4E9"))
# use brewer color palettes
p+scale_fill_brewer(palette="Dark2")
# Use grey scale
p + scale_fill_grey() + theme_classic()
图片.png
改变图例位置
p + theme(legend.position="top")
p + theme(legend.position="bottom")
p + theme(legend.position="none") # Remove legend
图片.png
改变x轴变量的顺序
p + scale_x_discrete(limits=c("2", "0.5", "1"))
多组箱线图
# Change box plot colors by groups
ggplot(ToothGrowth, aes(x=dose, y=len, fill=supp)) +
geom_boxplot()
# Change the position
p<-ggplot(ToothGrowth, aes(x=dose, y=len, fill=supp)) +
geom_boxplot(position=position_dodge(1))
p
图片.png
改变颜色并添加点
# Add dots
p + geom_dotplot(binaxis='y', stackdir='center',
position=position_dodge(1))
# Change colors
p+scale_fill_manual(values=c("#999999", "#E69F00", "#56B4E9"))
图片.png
自定义箱线图
添加标题或改变主题
# Basic box plot
ggplot(ToothGrowth, aes(x=dose, y=len)) +
geom_boxplot(fill="gray")+
labs(title="Plot of length per dose",x="Dose (mg)", y = "Length")+
theme_classic()
# Change automatically color by groups
bp <- ggplot(ToothGrowth, aes(x=dose, y=len, fill=dose)) +
geom_boxplot()+
labs(title="Plot of length per dose",x="Dose (mg)", y = "Length")
bp + theme_classic()
图片.png
手动改变颜色
# Continuous colors
bp + scale_fill_brewer(palette="Blues") + theme_classic()
# Discrete colors
bp + scale_fill_brewer(palette="Dark2") + theme_minimal()
# Gradient colors
bp + scale_fill_brewer(palette="RdBu") + theme_minimal()
图片.png