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 倍默认大小)。

运行代码

  1. 选中代码,按 Ctrl + Enter(或 Cmd + Enter)运行。
  2. 图形将在 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"):使用简洁主题和中文字体。

运行代码

  1. 选中代码,按 Ctrl + Enter(或 Cmd + Enter)运行。
  2. 图形显示在 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
  • 点重叠:调整点大小(cexsize)或使用透明度(alpha):
  ggplot(data, aes(x = height, y = weight)) +
    geom_point(color = "blue", size = 3, alpha = 0.5)
  • 字体不可用:尝试 PingFang SCSTHeiti
  par(family = "PingFang SC")

9. 获取途径

  • R 语言:免费下载,访问 cran.r-project.org.
  • VSCode:可通过 grok.comx.com、VSCode iOS/Android 应用免费使用(有限额)。付费订阅(如 SuperGrok)提供更高配额,详情见 x.ai/grok.

如需更复杂散点图(如添加趋势线、多变量可视化)或特定数据绘图帮助,请提供数据或需求!

类似文章

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注