R 绘图 – 散点图
以下是在 R 语言中绘制散点图(Scatter Plot)的中文讲解,结合 Visual Studio Code(VSCode)环境,重点包括中文支持,内容简洁清晰,适合初学者。散点图用于展示两变量之间的关系,适合探索数据分布或相关性。
1. R 散点图简介
R 语言提供多种方法绘制散点图,基础方法使用内置的 plot()
函数,高级可视化可使用 ggplot2
包。散点图适用于显示连续变量的分布或相关性,如身高与体重、销量与价格等。中文支持需要正确配置字体和图形设备以避免乱码。
2. 准备工作
- 确保 R 已安装:参考前述 macOS R 环境安装指南,确保 R 和 VSCode 配置完成。
- 安装必要包:
- 基础散点图使用 R 自带的
plot()
函数,无需额外包。 - 高级散点图推荐使用
ggplot2
:R install.packages("ggplot2")
- 安装
httpgd
包以在 VSCode 中显示图形:R install.packages("httpgd")
- VSCode 配置:
- 确保安装了 R 扩展和
languageserver
(见前述指南)。 - 在 VSCode 设置中启用
httpgd
:json { "r.plot.useHttpgd": true }
- 中文支持:安装
showtext
包以确保中文显示正常:
install.packages("showtext")
- 安装 XQuartz(若需要):macOS 默认图形设备可能需要 XQuartz 支持中文显示:
brew install --cask xquartz
3. 配置中文支持
为避免中文标题、标签乱码,推荐以下方法:
方法 1:设置中文字体(基础绘图)
par(family = "Arial Unicode MS") # 或 "PingFang SC"
方法 2:使用 showtext
包(推荐)
library(showtext)
showtext_auto() # 自动启用 showtext
font_add("myfont", regular = "Arial Unicode MS") # 或其他中文字体
方法 3:使用 httpgd
httpgd
通过浏览器渲染图形,支持中文显示,与 VSCode 集成良好。确保 VSCode 设置中启用 r.plot.useHttpgd
。
4. 绘制基础散点图(使用 plot()
)
以下是使用 R 内置 plot()
函数绘制散点图的示例,以模拟的身高和体重数据为例。
示例代码
在 VSCode 中新建 .R
文件(如 scatter_plot.R
),输入:
# 设置中文字体
par(family = "Arial Unicode MS")
# 示例数据
height <- c(160, 165, 170, 175, 180, 185)
weight <- c(50, 55, 60, 65, 70, 75)
# 绘制散点图
plot(height, weight, main = "身高与体重关系", xlab = "身高 (cm)", ylab = "体重 (kg)",
pch = 16, col = "blue", cex = 1.5)
代码说明
height
,weight
:两个变量的数值向量,分别表示 x 轴和 y 轴数据。main
:图表标题。xlab
,ylab
:x 轴和 y 轴标签。pch
:点形状(16 表示实心圆)。col
:点颜色。cex
:点大小(1.5 表示 1.5 倍默认大小)。
运行代码
- 选中代码,按
Ctrl + Enter
(或Cmd + Enter
)运行。 - 图形将在 VSCode 的“绘图”面板或浏览器中显示(若启用
httpgd
)。
- 若未显示,检查
httpgd
或 XQuartz 是否安装(brew install --cask xquartz
)。
5. 绘制高级散点图(使用 ggplot2
)
ggplot2
提供更美观、灵活的散点图绘制方式。以下是示例:
示例代码
library(ggplot2)
library(showtext)
showtext_auto()
font_add("myfont", regular = "Arial Unicode MS")
# 创建数据框
data <- data.frame(
height = c(160, 165, 170, 175, 180, 185),
weight = c(50, 55, 60, 65, 70, 75)
)
# 绘制散点图
ggplot(data, aes(x = height, y = weight)) +
geom_point(color = "blue", size = 3) +
labs(title = "身高与体重关系", x = "身高 (cm)", y = "体重 (kg)") +
theme_minimal(base_family = "myfont")
代码说明
library(ggplot2)
:加载ggplot2
包。data.frame
:创建数据框,包含身高和体重数据。geom_point
:绘制散点,size
控制点大小。labs
:设置标题和轴标签。theme_minimal(base_family = "myfont")
:使用简洁主题和中文字体。
运行代码
- 选中代码,按
Ctrl + Enter
(或Cmd + Enter
)运行。 - 图形显示在 VSCode 的“绘图”面板或浏览器中。
6. 生成散点图(参考)
以下是基于示例数据的散点图代码块,用于 VSCode 显示:
{
"type": "scatter",
"data": {
"datasets": [{
"label": "身高与体重",
"data": [
{"x": 160, "y": 50},
{"x": 165, "y": 55},
{"x": 170, "y": 60},
{"x": 175, "y": 65},
{"x": 180, "y": 70},
{"x": 185, "y": 75}
],
"backgroundColor": "#0000FF",
"borderColor": "#0000FF",
"pointRadius": 5
}]
},
"options": {
"scales": {
"x": {
"title": { "display": true, "text": "身高 (cm)", "color": "#333333" }
},
"y": {
"title": { "display": true, "text": "体重 (kg)", "color": "#333333" },
"beginAtZero": true
}
},
"plugins": {
"title": {
"display": true,
"text": "身高与体重关系",
"color": "#333333"
},
"legend": {
"display": true,
"labels": { "color": "#333333" }
}
}
}
}
说明
- 上述代码块模拟散点图效果,数据与 R 示例一致。
- 实际 R 绘图使用
plot()
或ggplot2
,此图为可视化参考。
7. 增强散点图
- 添加回归线(
plot()
):
par(family = "Arial Unicode MS")
plot(height, weight, main = "身高与体重关系", xlab = "身高 (cm)", ylab = "体重 (kg)", pch = 16, col = "blue")
abline(lm(weight ~ height), col = "red", lwd = 2) # 添加线性回归线
- 添加回归线(
ggplot2
):
library(ggplot2)
library(showtext)
showtext_auto()
font_add("myfont", regular = "Arial Unicode MS")
data <- data.frame(height = c(160, 165, 170, 175, 180, 185), weight = c(50, 55, 60, 65, 70, 75))
ggplot(data, aes(x = height, y = weight)) +
geom_point(color = "blue", size = 3) +
geom_smooth(method = "lm", color = "red", se = FALSE) +
labs(title = "身高与体重关系", x = "身高 (cm)", y = "体重 (kg)") +
theme_minimal(base_family = "myfont")
- 按类别着色(
ggplot2
):
data <- data.frame(
height = c(160, 165, 170, 175, 180, 185),
weight = c(50, 55, 60, 65, 70, 75),
group = c("男", "女", "男", "女", "男", "女")
)
ggplot(data, aes(x = height, y = weight, color = group)) +
geom_point(size = 3) +
labs(title = "身高与体重关系(按性别)", x = "身高 (cm)", y = "体重 (kg)") +
scale_color_manual(values = c("blue", "pink")) +
theme_minimal(base_family = "myfont")
- 保存图形:
plot()
:R png("scatter_plot.png", family = "Arial Unicode MS") plot(height, weight, main = "身高与体重关系") dev.off()
ggplot2
:R ggsave("scatter_plot_ggplot.png", width = 6, height = 4, device = cairo_pdf)
8. 常见问题
- 中文乱码:
- 使用
par(family = "Arial Unicode MS")
或showtext
设置字体。 - 检查系统字体:运行
system("fc-list :lang=zh")
查看可用中文字体。 - 使用
cairo_pdf
设备保存图形:R pdf("chart.pdf", family = "Arial Unicode MS", useDingbats = FALSE)
- 图形不显示:确保
httpgd
已安装并启用r.plot.useHttpgd
。检查 XQuartz:
brew install --cask xquartz
- 点重叠:调整点大小(
cex
或size
)或使用透明度(alpha
):
ggplot(data, aes(x = height, y = weight)) +
geom_point(color = "blue", size = 3, alpha = 0.5)
- 字体不可用:尝试
PingFang SC
或STHeiti
:
par(family = "PingFang SC")
9. 获取途径
- R 语言:免费下载,访问 cran.r-project.org.
- VSCode:可通过 grok.com、x.com、VSCode iOS/Android 应用免费使用(有限额)。付费订阅(如 SuperGrok)提供更高配额,详情见 x.ai/grok.
如需更复杂散点图(如添加趋势线、多变量可视化)或特定数据绘图帮助,请提供数据或需求!