You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Base R中为rca函数生成的β收敛散点图添加点标签

如何为rca函数生成的β收敛散点图添加区域标识(Regiao列)?

我明白你的困扰——rca这类封装好的函数确实会把绘图逻辑藏起来,没法直接通过参数添加点标签。不过有两种实用的方法可以解决这个问题,咱们一步步来:

先明确你的数据和当前代码

首先,你的数据集结构是这样的(前5行):

> dput(head(GDP_NUTS2,5))
structure(list(Regiao = c("N", "Ag", "C", "AML", "Al"), t2000 = c(10054.60679, 13045.59069, 10621.51789, 18104.36306, 11585.29235), t2001 = c(10652.46712, 13920.41552, 11101.08412, 18865.55149, 12014.61685), t2002 = c(11001.34917, 14612.37052, 11507.36163, 19812.29293, 12411.44835), t2003 = c(11031.7278, 15137.89461, 11884.96687, 20165.68892, 12889.20298), t2004 = c(11354.02317, 15479.68985, 12364.05053, 21068.05117, 13448.52482), t2005 = c(11875.44359, 16237.49791, 12754.40299, 21829.31373, 13867.5055), t2006 = c(12439.6426, 17046.29326, 13378.47797, 22714.25829, 14767.48968), t2007 = c(13229.02402, 17981.40383, 14044.39707, 23847.44923, 15362.11238), t2008 = c(13579.51144, 18226.74178, 14091.85326, 24347.83971, 15335.54822), t2009 = c(13243.19054, 17038.45595, 13974.46502, 23794.44899, 14836.93236), t2010 = c(13677.38358, 16976.83391, 14284.14565, 24119.66719, 15489.72008), t2011 = c(13491.68626, 16347.69468, 14011.54637, 23503.1765, 15200.84829), t2012 = c(13111.6173, 16059.51047, 13623.68635, 22118.01701, 14510.73391), t2013 = c(13473.68717, 16301.87448, 13919.18355, 22337.24739, 14628.8829), t2014 = c(13935.07757, 16974.57715, 14220.1043, 22491.62875, 15021.05459), t2015 = c(14570.33755, 17851.78088, 14983.95312, 23101.89351, 16297.81693), t2016 = c(15283.33044, 19251.57661, 15620.77307, 23800.20038, 16737.39734), t2017 = c(16083.53849, 20893.19975, 16410.11278, 24938.22636, 17888.34779), t2018 = c(17031.94867, 22131.96942, 17242.70015, 25974.24055, 18396.58684), t2019 = c(17712.44223, 23145.30242, 18045.54697, 26970.71178, 19006.1632)), row.names = c(NA, -5L), class = c("tbl_df", "tbl", "data.frame"))

你当前使用的绘图代码是:

rca(GDP_NUTS2$t2000, 2000, GDP_NUTS2[3:21], 2019, conditions=NULL, beta.plot=TRUE, beta.plotLine=TRUE, beta.plotX="Ln (initial GDP p.c.)", beta.plotY="Ln (av. growth GDP p.c.)", beta.plotTitle="Beta convergence of Portuguese regions 2000-2019")

方法1:手动提取数据用ggplot2重绘(推荐)

这个方法最灵活,完全可控,而且能轻松添加标签。核心是先算出rca函数用来绘图的两个变量:初始GDP的对数,以及平均增长率的对数,然后用ggplot2构建图表:

# 加载必要的包
library(ggplot2)
library(dplyr)

# 计算绘图所需变量:和rca的计算逻辑一致
GDP_NUTS2 <- GDP_NUTS2 %>%
  mutate(
    ln_initial = log(t2000),  # 初始GDP的对数
    ln_avg_growth = log((t2019 / t2000)^(1/19))  # 年均增长率的对数(19年的复合增长率)
  )

# 绘制带标签的β收敛图
ggplot(GDP_NUTS2, aes(x = ln_initial, y = ln_avg_growth)) +
  geom_point(size = 2) +  # 设置点的大小
  geom_text(aes(label = Regiao), hjust = 0.5, vjust = -1, size = 3.5) +  # 添加区域标签,调整位置和大小
  geom_smooth(method = "lm", se = FALSE, color = "#E63946", linewidth = 1) +  # 添加回归直线,对应beta.plotLine=TRUE
  labs(
    x = "Ln (initial GDP p.c.)",
    y = "Ln (av. growth GDP p.c.)",
    title = "Beta convergence of Portuguese regions 2000-2019"
  ) +
  theme_minimal()  # 可选:调整主题样式

这样你就能得到和rca函数输出一致的图表,同时每个点都带有Regiao列的标识,还能自由调整标签的颜色、位置、大小等样式。


方法2:修改rca函数的源代码(进阶)

如果你想继续用rca函数的原生输出,也可以修改它的绘图逻辑。首先查看rca函数的源代码:

# 查看rca函数的完整代码
print(rca)

找到其中绘制散点图的部分(通常是调用plot()函数的代码块),在这部分之后添加text()函数来标注点。比如,找到类似这样的代码:

plot(x, y, xlab = beta.plotX, ylab = beta.plotY, main = beta.plotTitle, ...)
if (beta.plotLine) abline(lm(y ~ x), col = "red")

在它后面加上:

# 添加区域标签
text(x = log(GDP_NUTS2$t2000), y = log((GDP_NUTS2$t2019 / GDP_NUTS2$t2000)^(1/19)), 
     labels = GDP_NUTS2$Regiao, pos = 3, cex = 0.8)

然后把修改后的代码保存为一个新函数,比如rca_with_labels,之后直接调用这个新函数就能生成带标签的图了。


内容的提问来源于stack exchange,提问作者Cláudio Siva

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 12:03:14