ggplot2_散点图

2020-09-15 15:40:50 浏览数 (1)

ggplot_散点图

sunqi
2020/8/1

R 概述

散点图的绘制 拟合散点图曲线

获得示例数据

代码语言:javascript复制
# 加载数据
# mecars是一个汽车相关的数据集
data("mtcars")
mydata <- mtcars

# 转换cyl为因子类型
mydata$cyl <- as.factor(mydata$cyl)

# 查看数据集前4行
head(mydata[, c("wt", "mpg", "cyl", "qsec")], 4)
代码语言:javascript复制
##                   wt  mpg cyl  qsec
## Mazda RX4      2.620 21.0   6 16.46
## Mazda RX4 Wag  2.875 21.0   6 17.02
## Datsun 710     2.320 22.8   4 18.61
## Hornet 4 Drive 3.215 21.4   6 19.44
代码语言:javascript复制
# 加载包

library(ggplot2)
# 设置主题格式,这部分可以选择在绘制中进行
# 也可以在theme_set中进行全局设置
theme_set(
  theme_bw()  
    theme(legend.position = "top"))

绘图

geom_point():用于绘制散点图 参数 color:点的颜色 size:点的大小 shape :点的形状

代码语言:javascript复制
# 设置主函数
p <- ggplot(mydata, aes(x = wt, y = mpg))

# 绘制散点图
p   geom_point()
代码语言:javascript复制
# 更改点颜色和大小形状
p   geom_point(color = "#00AFBB", size = 2, shape = 23)# shape的数字有特殊只带
代码语言:javascript复制
# 多组散点图
# 根据cyl设置散点的形状
# cyl是发动机的缸数
p   geom_point(aes(shape = cyl))
代码语言:javascript复制
# 根据分组,进行不同的颜色设置
p   geom_point(aes(shape = cyl, color = cyl))  
  # color_manual的作用是自定义颜色,而不是采用默认的颜色分组
  scale_color_manual(values = c("#00AFBB", "#E7B800", "#FC4E07"))

添加拟合的曲线

geom_smooth():添加一条平滑的曲线

参数:color:设置颜色 size:线的粗细 linetype:线的类型 fill: 置信区间的颜色填充 method:平滑曲线的绘制方法。“loess:局部加权回归;“lm”:线性回归 se:置信区间 fullrange:是否全部绘制 level:置信区间值,默认为0.95

代码语言:javascript复制
# 添加线性回归曲线
p   geom_point()   geom_smooth(method = lm)
代码语言:javascript复制
## `geom_smooth()` using formula 'y ~ x'
代码语言:javascript复制
# 去除置信区间
p   geom_point()  
  geom_smooth(method = lm, se = FALSE)
代码语言:javascript复制
## `geom_smooth()` using formula 'y ~ x'
代码语言:javascript复制
# 局部加权回归:默认的方法
p   geom_point()   geom_smooth()
代码语言:javascript复制
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'
代码语言:javascript复制
# 更改颜色设置
p   geom_point(aes(color = cyl, shape=cyl))  
  # 曲线的颜色和fill用于区分组
  geom_smooth(aes(color = cyl, fill = cyl), method = lm)  
  #scale_color_manual和scale_fill_manual用于自定义配色方案设置
  scale_color_manual(values = c("#00AFBB", "#E7B800", "#FC4E07")) 
  # 颜色填充方案
  scale_fill_manual(values = c("#00AFBB", "#E7B800", "#FC4E07"))
代码语言:javascript复制
## `geom_smooth()` using formula 'y ~ x'
代码语言:javascript复制
# 去除置信区间,并扩展曲线范围
p   geom_point(aes(color = cyl, shape = cyl))  
  # se 设置为false,fullrange 设置为true
  geom_smooth(aes(color = cyl), method = lm, se = FALSE, fullrange = TRUE)  
  scale_color_manual(values = c("#00AFBB", "#E7B800", "#FC4E07")) 
  scale_fill_manual(values = c("#00AFBB", "#E7B800", "#FC4E07"))
代码语言:javascript复制
## `geom_smooth()` using formula 'y ~ x'

geom_rug()

这个函数以前没有用到过,看帮助的意思是添加个案的识别

代码语言:javascript复制
# 添加识别点
# 在xy轴上出现短横线用于标示个案
p   geom_point()   geom_rug()
代码语言:javascript复制
# 添加颜色区别
p   geom_point(aes(color = cyl))  
  geom_rug(aes(color = cyl))

Jitter points

当数据集的数据过多时,绘图就会显得很杂乱 position = position_jitter()用于避免过量绘图 width: x轴上的点 height: y轴上的点

代码语言:javascript复制
# 不设置jitter
p1 <- ggplot(mpg, aes(displ, hwy))  
  geom_point()

# 设置jitter
p2 <- ggplot(mpg, aes(displ, hwy))  
  geom_point(position = position_jitter(width = 0.5, height = 0.5))
library(patchwork)
p1 p2

添加点的文本

函数:geom_text() and geom_label():添加文本和标签 geom_text_repel() and geom_label_repel():文本注释,在ggrepel包中

代码语言:javascript复制
# install.packages("ggrepel")
library(ggrepel)

# 添加点
# 将汽车的名字赋值给labs,也就是每个个案的标识
.labs <- rownames(mydata)
p   geom_point(aes(color = cyl))  
  # 给点添加标签
  geom_text_repel(aes(label = .labs,  color = cyl), size = 3) 
  scale_color_manual(values = c("#00AFBB", "#E7B800", "#FC4E07"))
代码语言:javascript复制
# 使用geom_label_repel添加文本
#这个函数给出的文本带有方框
p   geom_point(aes(color = cyl))  
  geom_label_repel(aes(label = .labs,  color = cyl), size = 3) 
  scale_color_manual(values = c("#00AFBB", "#E7B800", "#FC4E07"))

气泡图

代码语言:javascript复制
# alpha是透明度 size是设置气泡的因素
p   geom_point(aes(color = cyl, size = qsec), alpha = 0.5)  
  scale_color_manual(values = c("#00AFBB", "#E7B800", "#FC4E07"))  
  # 调整气泡的范围
  scale_size(range = c(0.5, 12))
代码语言:javascript复制
# 颜色渐变

p   geom_point(aes(color = mpg,size = qsec) )  
  scale_color_gradientn(colors = c("#00AFBB", "#E7B800", "#FC4E07"))  
  theme(legend.position = "right") 
  scale_size(range = c(0.5, 12))

结束语

我比较喜欢ggplot2的一点是可以将绘图程序写进函数,可以批量绘图,批量下载,至于设置这些东西,能记就记,记不住,用的时候百度。

love&peace

0 人点赞