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