简介

散点图通常用来刻画两个连续型变量之间的关系。绘制散点图时数据集中的每一个观测值都由散点图中的一个点来表示。利用包ggplot2可以绘制十分漂亮的散点图。 利用ggplot2绘图前先确保我们所使用的数据集是data.frame形式。ggplot2绘图利用映射将数据赋予给坐标轴上进而添加几何对象形成图形。绘图前先加载包ggplot2library(ggplot2)

#Load packages
library(ggplot2)#visualization

加载完包之后,本文利用数据集mtcars来演示散点图绘制。 先查看数据集的前几行来了解mtcars数据集。

#check data
head(mtcars)
##                    mpg cyl disp  hp drat    wt  qsec vs am gear carb
## Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
## Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
## Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
## Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
## Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2
## Valiant           18.1   6  225 105 2.76 3.460 20.22  1  0    3    1

绘制简单的散点图

ggplot(data=mtcars, aes(x=wt, y=mpg)) + geom_point()

shape参数修改图形的形状

ggplot(data=mtcars, aes(x=wt, y=mpg)) +geom_point(shape=17)

size参数修改点的大小

ggplot(data = mtcars, aes(x=wt, y=mpg))+geom_point(size=5)

color参数修改点的颜色

ggplot(data=mtcars, aes(x=wt, y=mpg))+geom_point(color="red")

绘制分组的散点图

可将分组变量(因子或字符变量,可通过factor()强制性将非因子变量转为因子变量)赋值给颜色或性状属性,实现分组散点图的绘制。

首先将数值型变量cyl转换为因子型变量

mtcars$cyl <- factor(mtcars$cyl)

分组变量赋值给颜色属性(变量赋值必须在aes里面)

ggplot(data=mtcars, aes(x=wt, y=mpg, color=cyl))+geom_point(size=3)

分组变量赋值给性状属性

ggplot(data=mtcars, aes(x=wt, y=mpg, shape=cyl))+geom_point(size=3)

如果对R语言默认的颜色或者形状不满意,可以通过scale_color_brewer()或者scale_color_manual()函数自定义点的颜色以及scale_shape_manual()函数自定义点的形状。 下面我们将分组变量cyl同时赋值给颜色和形状属性。

ggplot(data=mtcars, aes(x=wt, y=mpg, color=cyl, shape= cyl))+geom_point(size=3)+
  scale_color_brewer(palette = "Accent")+scale_shape_manual(values = c(2, 9, 16))#Accent是一调色板,可选点的形状见上

将连续变量映射给颜色、大小和形状等属性

将连续性变量disp映射给颜色属性

ggplot(data=mtcars, aes(x=wt, y=mpg, color=disp))+geom_point(size=3)

从图中可以发现值越大对应的颜色越浅,以下是通过人为设置色阶使值大小与颜色深浅保持一致

ggplot(data=mtcars, aes(x=wt, y=mpg, color=disp))+geom_point(size=3)+
  scale_color_gradient(low="lightblue", high="darkblue")

将连续性变量disp映射给大小属性

ggplot(data=mtcars, aes(x=wt, y=mpg, size=disp))+geom_point(color="red")

重叠点的处理

当数据量非常大时,会导致数据重叠点非常严重,可通过使用半透明的点避免。alpha参数控制点的透明度。下面利用数据集diamonds来演示。

#check data
head(diamonds)
## # A tibble: 6 × 10
##   carat       cut color clarity depth table price     x     y     z
##   <dbl>     <ord> <ord>   <ord> <dbl> <dbl> <int> <dbl> <dbl> <dbl>
## 1  0.23     Ideal     E     SI2  61.5    55   326  3.95  3.98  2.43
## 2  0.21   Premium     E     SI1  59.8    61   326  3.89  3.84  2.31
## 3  0.23      Good     E     VS1  56.9    65   327  4.05  4.07  2.31
## 4  0.29   Premium     I     VS2  62.4    58   334  4.20  4.23  2.63
## 5  0.31      Good     J     SI2  63.3    58   335  4.34  4.35  2.75
## 6  0.24 Very Good     J    VVS2  62.8    57   336  3.94  3.96  2.48
#未使用透明点处理
ggplot(data=diamonds, aes(x=carat, y=price))+geom_point()

#使用alpha参数调整点透明度
ggplot(data=diamonds, aes(x=carat, y=price))+geom_point(alpha=0.1)

为散点图添加拟合曲线

#使用数据集mtcars
ggplot(data=mtcars, aes(x=wt, y=mpg))+geom_point()+stat_smooth(method="lm")

#也可以去除掉拟合曲线的置信区间
ggplot(data=mtcars, aes(x=wt, y=mpg))+geom_point()+stat_smooth(method="lm", se=FALSE)

#也可以针对不同类型的cyl来进行拟合
ggplot(data=mtcars, aes(x=wt, y=mpg, color=cyl))+geom_point()+stat_smooth(method="lm")