百日筑基篇—— ggplot2包介绍(R语言初识五)

百日筑基篇—— ggplot2包介绍(R语言初识五)


前言

鄙人对计算机编程语言有较多兴趣,故学R语言,作为一个萌新,希望以这种方式,对自己的学习不断进行复盘,同时希望多多指教!! 推荐 https://blog.csdn.net/qazplm12_3/article/details/110252322 (生信宝典)

一、ggplot2 包是什么?

ggplot2是一个用于生成统计或数据图形的R包,,它提供了一种基于图层的可视化语法,让用户可以通过简单的代码生成各种复杂的图表。其核心理念是将绘图与数据分离,数据相关的绘图与数据无关的绘图分离,是按图层作图,同时它保有命令式作图的调整函数,使其更具灵活性。

主要特点:

  1. 易于使用
  2. 强大的图层系统
  3. 高度定制化
  4. 丰富的可视化类型
  5. 容易扩展

二、八大基本要素

1. 数据和映射

数据: 用于绘图的数据,一般为数据框或矩阵
映射:aes() 函数是ggplot2中的映射函数,即数据集中的数据关联到相应的图形属性过程中一种对应关系。

代码如下(示例):

# 加载包
library(ggplot2)
# 生成数据
set.seed(11)
diamond <- diamonds[sample(nrow(diamonds),2000),]

#使用diamonds的数据子集作为绘图数据,克拉(carat)数为X轴变量,价格(price)为Y轴变量。
gg <- ggplot(diamond,aes(x=carat,y=price,col=color))
gg+geom_point()
#分组(group)也是ggplot2种映射关系的一种,  如果需要把观测点按额外的离散变量进行分组处理
p1 <- ggplot(data=diamond, mapping=aes(x=carat, y=price, group = factor(cut)))
p1 + geom_boxplot()

2. 几何对象

几何对象代表我们在图中实际看到的图形元素,如点、线、多边形等。
通过geom_xxx() 的形式指定不同的几何对象图层。
不同的几何对象适用于不同的数据类型和分析目的。

代码如下(示例):

p <- ggplot(diamond,aes(x=price,fill=cut))
p +geom_histogram()
#设置position="dodge",side-by-side地画直方图
p +geom_histogram(position = "dodge")
table(diamond$price)
#设置使用position="fill",按相对比例画直方图
p+geom_histogram(position = "fill")

ggplot(diamond)+geom_bar(aes(x=clarity, fill=cut),position = "dodge")#柱状图是把分类数据,按类别计数。
ggplot(diamond,aes(x=cut, y=price,fill=color))+geom_boxplot()

3. 标尺

在对图形属性进行映射之后,使用标尺可以控制这些属性的显示方式,比如坐标刻度,颜色属性等。
ggplot2的scale系列函数有很多,命名和用法是有一定规律的。一般使用三个单词用_连接。
第一个都是scale;第二个是color、fill等可更改的参数;第三个是具体的类型。

# 横坐标是离散变量,纵坐标是连续变量
p <- ggplot(mtcars, aes(factor(cyl), mpg)) + geom_point()
# 更改坐标轴名称 、更改横轴标度
p + scale_x_discrete("cyl",labels = c("4"="a","6"="b","8"="c"))
# 指定横轴顺序以及展示部分
p + scale_x_discrete(limits=c("6","4"))

p + scale_y_continuous("ylab_mpg")
p + scale_y_continuous(breaks = c(10,20,30))
p + scale_y_continuous(breaks = c(10,20,30), labels=scales::dollar)
p + scale_y_continuous(limits = c(10,20))

# 连续变量可以更改标度,还可以进行统计变换
p + scale_y_reverse() # 纵坐标翻转
p + scale_y_log10()
p + scale_y_continuous(trans = "log10")
p + scale_y_sqrt()
# 更改刻度标签的位置
p + scale_x_discrete(position = "top") +
  scale_y_continuous(position = "right")

4. 统计变换

ggplot2 支持数据预处理和统计变换。用户可以使用相应的统计函数来分组、聚合和变换数据。

#stat_summary()
g <- ggplot(mtcars,aes(cyl, mpg)) + geom_point()
#mean_cl_bool对mpg进行运算,返回均值,最大值,最小值;其他可用smean.cl.normal,smean.sdl,smedian.hilow。
g + stat_summary(fun.data = "mean_cl_boot", color = "red", size = 0.5)
table(mtcars$cyl)
g + stat_summary(fun = "mean", color = "red", size = 2, geom = "point") # 计算各组均值
# 增加1组颜色变量映射,然后求均值并连线
g + aes(color = factor(vs)) + stat_summary(fun = mean, geom = "line") 
g + stat_summary(fun = mean, fun.min = min, fun.max = max, color = "red") # 计算各组均值,最值
#stat_smooth
ggplot(mpg, aes(displ, hwy)) +geom_point() +stat_smooth()+stat_smooth(method=lm)

ggplot(mpg, aes(displ, hwy)) +geom_point() +geom_smooth() +stat_smooth(method = lm, se = TRUE)
#formula 表示指定平滑曲线的方程,如 y~x, y~poly(x, 2), y~log(2) ,需要与method参数搭配使用
ggplot(mpg, aes(displ, hwy)) +geom_point() +geom_smooth(method = lm, formula = y ~ splines::bs(x, 3), se = FALSE)
#se 表示是否显示平滑曲线的置信区间,默认TRUE显示;level = 0.95
ggplot(mpg, aes(displ, hwy, color = class))  + geom_point() + stat_smooth(se = FALSE, method = lm)

5. 坐标系统

坐标系统用于控制如何将数据映射到可视化区域和如何呈现在坐标轴上.。
使用coord_ 函数设置不同种类的坐标系统,以便更好地呈现数据和支持图表定制化要求。

#coord_flip()实现坐标轴翻转
ggplot(diamond)+geom_bar(aes(x=cut, fill=cut))+coord_flip()
#coord_polar()实现极坐标转换
ggplot(diamond)+geom_bar(aes(x=factor(1),fill=cut))+coord_polar()
#饼图
ggplot(diamond)+geom_bar(aes(x=factor(1), fill=cut))+coord_polar(theta="y")
#风玫瑰图
ggplot(diamond)+geom_bar(aes(x=clarity, fill=cut))+coord_polar()

6. 图层

在 ggplot2 中,图层是用来在同一张图表上添加可视化元素的基本组成单元,直接使用+号即可实现叠加图层。
每个图层设置函数(geom_xxx和stat_xxx)都可以设置数据和映射,ggplot2的图层设置函数对映射的数据类型是有较严格要求的。

7. 分面

分面(Facet)是将数据子集按照特定变量进行分组,生成多个子图的一种技术。

#facet_wrap:基于一个因子进行设置,形式为:~变量(~单元格)
p <- ggplot(mtcars,aes(mpg,hp))+geom_point()
p+ facet_wrap(~cyl)
table(mtcars$cyl)
#每个分面单独的坐标刻度,单独对x轴设置
#scales参数fixed表示固定坐标轴刻度,free表示反馈坐标轴刻度,也可以单独设置成free_x或free_y
p+facet_wrap(~cyl,scales = "free")
#每个分面单独的坐标刻度,单独对y轴设置
#nrow,ncol参数为数值,表示 分面设置成几行和几列
p+facet_wrap(~carb,scales="free",nrow=1)
#对nrow设置后的效果图表变得比较拥挤,正常情况下,
  #facet_wrap自然生成的图片,只设置scale = free 会相对比较好看。
table(mtcars$carb)
#facet_grid:基于两个因子进行设置,形式为:变量~变量(行~列),
#如果把一个因子用点表示,也可以达到facet_wrap的效果,也可以用加号设置成两个以上变量
p+facet_grid(vs~cyl)
table(mtcars$vs)
#space 表示分面空间是否可以按照数据进行缩放,参数和scales一样
p+facet_grid(vs~cyl,scales="free",space="free")
#margins 通过TRUE或者FALSE表示是否设置而一个总和的分面变量,默认情况为FALSE,即不设置
p+facet_grid(vs~cyl,margins=TRUE)

8. 主题

在 ggplot2 中,主题(Theme)是指用于控制图表外观的视觉元素,包括文字字号、颜色、标签、线条粗细、背景等等。

p <-ggplot(data=diamond)+geom_point(aes(x=carat,y=price,colour=color))
pp <- p + labs(title="学习ggplot2可视化",subtitle = "参数好多",caption = "孰能生巧")+
  theme(plot.title=element_text(face="bold.italic",color="steelblue",size=24, hjust=0.5,vjust=0.5,angle=360,lineheight=113))
pp +theme_classic()
#ggplot2 扩展包主题
library(ggthemes)
p+theme_stata()
windows()
#自定义主题
theme_MJ <- function(..., bg='white'){
  require(grid)
  theme_classic(...) +
    theme(rect=element_rect(fill=bg),
          plot.margin=unit(rep(1,4), 'lines'),
          panel.border=element_rect(fill='transparent', color='transparent'),
          panel.grid=element_blank(),
          axis.title = element_text(color='black', vjust=0.1),
          axis.ticks.length = unit(-0.1,"lines"),
          axis.ticks = element_line(color='black'),
          legend.title=element_blank(),
          legend.key=element_rect(fill='transparent', color='transparent'))
}
p + theme_MJ() + labs(title="学习ggplot2可视化",subtitle = "参数好多记不住?",caption = "熟能生巧!")

三、示例应用

ggplot2绘图在环境空气监测数据可视化:

# 加载需要用到的扩展包
library(ggplot2)
# 导入数据,污染物为臭氧(Ozone)
aqi_data <- read.csv("E:/daily_44201_2022/daily_44201_2022.csv",header = T)
# 筛选出特定站点的数据
site_data <- subset(aqi_data, Site.Num == 10)
# 绘制折线图
ggplot(site_data, aes(x = Date.Local, y = Arithmetic.Mean)) +
  geom_line() +
  labs(x = "日期", y = "臭氧浓度 (ppm)", title = "某站点每日臭氧浓度监测")+theme_dark()


# 读取空气质量指数数据
a_data <- read.csv("E:/annual_aqi_by_cbsa_2022/annual_aqi_by_cbsa_2022.csv")
# 绘制Scatter Plot
ggplot(data, aes(x = Days.PM2.5, y = Median.AQI, color = CBSA.Code)) + 
  geom_point(size = 3) +
  labs(title = "Scatter Plot of Days.PM2.5 vs Median.AQI for US.City  ",
       x = "Days.PM2.5",
       y = "Median.AQI")+geom_smooth(method="lm")
#这段代码会绘制出“PM2.5超标天数”与“AQI天数”之间的散点图,其中每个点的颜色代表一个城市的数据


总结

今天,主要简单的介绍了ggplot2 R包,在数据分析中,数据的可视化是必不可少的,故掌握一定的画图方法很有必要,使用该包可以很快上手。其图层叠加的思想是关键。
天行健,君子以自强不息

-2023-7-7 筑基篇

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

星石传说

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值