散点图通常用来刻画两个连续型变量之间的关系。绘制散点图时数据集中的每一个观测值都由散点图中的一个点来表示。利用包ggplot2可以绘制十分漂亮的散点图。 利用ggplot2绘图前先确保我们所使用的数据集是data.frame形式。ggplot2绘图利用映射将数据赋予给坐标轴上进而添加几何对象形成图形。绘图前先加载包ggplot2 即library(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()
ggplot(data=mtcars, aes(x=wt, y=mpg)) +geom_point(shape=17)
ggplot(data = mtcars, aes(x=wt, y=mpg))+geom_point(size=5)
ggplot(data=mtcars, aes(x=wt, y=mpg))+geom_point(color="red")
可将分组变量(因子或字符变量,可通过factor()强制性将非因子变量转为因子变量)赋值给颜色或性状属性,实现分组散点图的绘制。
mtcars$cyl <- factor(mtcars$cyl)
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是一调色板,可选点的形状见上
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")
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")