You need to enable JavaScript to run this app. 使用Base R绘图时如何设置图例为指定矩形样式?
优惠活动
大模型
产品
解决方案
定价
更多

使用Base R绘图时如何设置图例为指定矩形样式?

问题描述

我正在尝试复现如下图表:
示例图表
目前我已经完成的代码如下:

library(carData)
UN <- as.data.frame(UN)

layout(matrix(c(1, 2, 3, 3), 2, 2, byrow = TRUE))

col.vec <- c("blue", "turquoise1", "green", "palegreen",
             "orange", "red", "violet", "purple")[UN$region]
pch.vec <- c(8, 6, 5, 4, 3, 2, 1, 0)[UN$region]


plot(UN$ppgdp, UN$infantMortality,
     xlab = "Gross Domestic Product per Capita",
     ylab = "Infant Mortality",
     xaxt = "n",
     las = 1,
     col = col.vec,
     pch = pch.vec)
axis(side = 1, at = c(0, 20000, 40000, 60000, 80000, 100000),
     labels = c(0, "", 40000, "", 80000, ""))

plot(UN$region, UN$infantMortality,
     xlab = "Region",
     ylab = "Infant Mortality",
     xaxt = "n",
     las = 1,
     col = c("blue", "turquoise1", "green", "palegreen",
             "orange", "red", "violet", "purple"))

plot.new()
legend('center', 
       legend = UN$region, 
       pch = pch.vec, 
       col = col.vec)

我的问题是:不使用ggplot2或其他任何扩展包的前提下,如何将图例调整为和示例图一致的矩形样式?

解决方法

你只需要对图例部分的代码做两处调整即可:

  • 先提取唯一的地区分类,避免图例出现重复项
  • 调用legend()时去掉pch参数,改用fill参数传入颜色值,即可生成填充矩形的图例样式

修改后的完整代码如下:

library(carData)
UN <- as.data.frame(UN)

layout(matrix(c(1, 2, 3, 3), 2, 2, byrow = TRUE))

# 提取唯一地区和对应配色
unique_regions <- levels(UN$region)
region_col <- c("blue", "turquoise1", "green", "palegreen",
                "orange", "red", "violet", "purple")
# 生成绘图用的逐行颜色、点型向量
col.vec <- region_col[UN$region]
pch.vec <- c(8, 6, 5, 4, 3, 2, 1, 0)[UN$region]

# 第一幅散点图
plot(UN$ppgdp, UN$infantMortality,
     xlab = "Gross Domestic Product per Capita",
     ylab = "Infant Mortality",
     xaxt = "n",
     las = 1,
     col = col.vec,
     pch = pch.vec)
axis(side = 1, at = c(0, 20000, 40000, 60000, 80000, 100000),
     labels = c(0, "", 40000, "", 80000, ""))

# 第二幅箱线图
plot(UN$region, UN$infantMortality,
     xlab = "Region",
     ylab = "Infant Mortality",
     xaxt = "n",
     las = 1,
     col = region_col)

# 图例部分
plot.new()
legend('center', 
       legend = unique_regions, 
       fill = region_col,
       bty = "n") # 可选:去掉图例外框,和常见示例图样式匹配

内容的提问来源于stack exchange,提问作者python_begins

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.10 00:12:03