R语言绘图RR小技巧

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

我们也可以使用下列的函数手动指定箱子的颜色

# 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

也可以手动改变填充颜色

# 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
上一篇下一篇

猜你喜欢

热点阅读