我如何使用 BaseR 确定图例的形式?

How can I determine the form of my legend with BaseR?

我正在尝试复制以下图表:

这是我到目前为止设法做到的:

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 或任何其他包)?

使用因数定义 colpch。对于图例,只使用一个 vec 的水平,并沿着它做 seq uences。并使用 tex.col=.

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

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


plot(UN$ppgdp, UN$infantMortality,
     xlab = "Gross Domestic Product per Capita",
     ylab = "Infant Mortality",
     xaxt = "n",
     las = 1,
     col = UN$region,
     pch = as.numeric(UN$region))
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()
vec <- levels(UN$region)

legend('center', 
       legend = vec, 
       ncol=4,
       pch = seq(vec), 
       col = seq(vec),
       text.col=seq(vec))