问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

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))

参考资料

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号