R语言绘图入门:基础绘图与ggplot2详解
创作时间:
作者:
@小白创作中心
R语言绘图入门:基础绘图与ggplot2详解
引用
1
来源
1.
http://www.360doc.com/content/24/1001/08/17477544_1135472857.shtml
R语言绘图是数据分析和可视化的重要工具,广泛应用于生物医学、金融、科研等领域。本文将介绍R语言中的两种主要绘图系统:基础绘图系统(base plot)和ggplot2,帮助读者快速掌握基本的绘图技巧。
基础绘图系统(base plot)
基础绘图系统是R语言自带的绘图包,不需要额外加载即可使用。虽然它的语法相对复杂,但可以实现对图形细节的精细控制。
常见图表类型
- 散点图
plot(1:10, 1:10, type = "p", main = "这是一幅图", sub = "这是副标题", xlab = "这是横坐标", ylab = "这是纵坐标")
- 折线图
plot(1:10, 1:10, type = "l", main = "这是一幅图", sub = "这是副标题", xlab = "这是横坐标", ylab = "这是纵坐标")
- 条形图
tmp <- data.frame(`人数` = c(23,18,36,27,19), `类型` = c("糖尿病","脑梗死","心肌梗死","支气管炎","肺炎"))
barplot(`人数` ~ `类型`, data = tmp)
- 箱线图
boxplot(Sepal.Length ~ Species, data = iris)
- 直方图
hist(iris$Sepal.Length)
- 密度图
plot(density(iris$Sepal.Length))
ggplot2绘图系统
ggplot2是基于"语义化绘图"理念的高级绘图系统,由Hadley Wickham开发。它将绘图过程分解为数据映射、几何对象和标度等组件,使得绘图过程更加直观和灵活。
ggplot2的基本结构
- 数据
- 图形属性映射
- 几何对象
例如,绘制一个简单的散点图:
library(ggplot2)
ggplot(data = mpg, mapping = aes(x = displ, y = hwy)) +
geom_point()
常见图表类型
- 散点图
ggplot(mpg, aes(displ, hwy, color = class)) +
geom_point()
- 箱线图
ggplot(mpg, aes(drv, hwy)) +
geom_boxplot()
- 直方图
ggplot(mpg, aes(hwy)) +
geom_histogram()
- 密度图
ggplot(mpg, aes(hwy)) +
geom_density()
高级绘图技巧
分面
对于分类变量,可以使用分面的形式表示:
ggplot(mpg, aes(displ, hwy)) +
geom_point() +
facet_wrap(vars(class))
主题和坐标轴
可以自定义主题和坐标轴的细节:
p <- ggplot(mpg, aes(drv, hwy, color = drv)) +
geom_boxplot()
p + theme_bw()
保存图片
使用ggsave函数可以保存绘制的图形:
ggplot(mpg, aes(displ, hwy, colour = factor(cyl))) +
geom_point()
ggsave("plot.png", width = 5, height = 5)
扩展包
ggplot2有众多扩展包,提供了丰富的绘图功能。例如,使用ggplot2绘制金字塔图:
data <- read.table("datasets/02-splitbarplot_PopGermany.csv", sep = ",", header = TRUE)
library(tidyr)
data <- pivot_longer(data, cols = 2:3, names_to = "group", values_to = "values")
data$values <- ifelse(data$group == "male", -data$values, data$values)
library(ggplot2)
library(scales)
ggplot(data) +
geom_bar(stat = "identity", aes(values, age.span, fill = group)) +
scale_fill_manual(values = c("#C0392B", "#2980B9"), guide = "none") +
annotate("text", x = -Inf, y = Inf, label = "male", hjust = -0.2, vjust = 1) +
annotate("text", x = Inf, y = Inf, label = "female", hjust = 1.2, vjust = 1) +
annotate("text",
x = ifelse(data[7:40,]$group == "male", -150000, 150000),
y = data[7:40,]$age.span,
label = paste0(round(abs(data[7:40,]$values) / 1000000, 1), "m"),
color = "white", size = 3,
hjust = ifelse(data[7:40,]$group == "male", 1, 0)) +
annotate("text",
x = ifelse(data[1:6,]$group == "male",
data[1:6,]$values - 150000,
data[1:6,]$values + 150000),
y = data[1:6,]$age.span,
label = paste0(round(abs(data[1:6,]$values) / 1000, 1), "k"),
color = "black", size = 3,
hjust = ifelse(data[1:6,]$group == "male", 1, 0)) +
labs(x = NULL, y = NULL,
caption = "Projection from 2015 \n based on continued trend with higher immigration") +
theme(panel.grid.minor.x = element_blank(),
panel.grid.major.x = element_blank(),
axis.text.x = element_blank(),
axis.ticks = element_blank(),
axis.text.y = element_text(color = "black"),
plot.caption = element_text(color = "gray50", face = 3))
参考资料
- 《ggplot2:数据分析与图形艺术》
- 《R数据可视化手册》
- 《R绘图系统》
- 免费R语言绘图网站:https://plot.ly/,https://www.r-graph-gallery.com/
热门推荐
李渊和杨坚的各种关系(权力与亲情交织,是阴谋还是命中注定)
世界首例全眼移植手术效果超预期 患者恢复部分视力 眼压血流状态正常
医生提醒:一天里面,2个时间段测量血糖最准确,很多人没选对
插混or增程?怎么选?一文搞定利弊分析
尿酸检测怎么验?验血还是验尿?
NSIDC(美国国家冰雪数据中心)数据集:全球气候变化研究的重要基石
2025年嵌入式软件开发工程师就业市场前景怎么样?
孕期可以尝试的瑜伽体式有哪些?
劳动合同诉讼审理:程序公正与权益维护
送自己花送什么比较好 十种送给自己的花有哪些
全国流感病毒阳性率快速上升:99%为甲流,如何科学应对?备哪些药?
“保底条款”无效,谁为亏损买单?
美元换人民币现金按哪个汇率:实时汇率及操作指南
婴儿便秘怎么办?七个月宝宝便秘的科学应对方案
“永嘉之乱:当西晋的辉煌与外族的铁骑相遇,历史的悲剧与启示”
一文读懂如何挑选铁锅:材质、厚度与使用体验全解析
褥疮的预防与治疗:从日常护理到专业治疗的全面指南
田蕴章和田英章两兄弟谁的书法水平更高?为什么呢?结果让人意外
浙江哪里最能吃辣?这些美食你挑战过吗
浙江哪里最能吃辣?这些美食你挑战过吗
双向开关:通过MOS管和IGBT实现电流双向流动
生杏仁怎样处理才没毒
如何轻松取消手机呼叫转移功能的详细步骤与建议
车辆灯光不亮怎么办?一文详解排查与修复方法
如何使用Taskkill命令行工具终止进程?
芒果和凤梨可以一起吃吗
凤仙花盆栽养殖方法
二战中德国为何不建造航母?难道是因为航母技术不行?
猪肉腥味最怕它,大厨:炖肉加“1勺”!软烂又入味,滋补又好吃
光线传媒的中国神话宇宙,能否靠《哪吒》系列独挑大梁?