我正在为不同国家/地区制作图表,在这些国家/地区我使用 geom_label_repel 手动添加文本。我在更改该文本中的边框颜色时遇到问题(我希望它的颜色与文本不同)。这是一个可重现的示例:
\n\n#Create dataframe \ncountries <- c("Mundo", "Argentina", "Brasil", "Chile", "Colombia", "Mexico", "Per\xc3\xba", "Estados Unidos")\ncountries <- rep(countries, 120)\nvaccinations <- data.frame(countries)\nvaccinations$countries <- factor(vaccinations$countries , levels = c("Mundo", "Argentina", "Brasil", "Chile",\n "Colombia", "Mexico", "Per\xc3\xba", "Estados Unidos"))\nvaccinations <- vaccinations %>%\n group_by(countries) %>%\n mutate(month = 1:120,\n vaccines = runif(120, min = 0, max = 5))\n\n#Write text to add manually in each country\nsaved_text <- data.frame(\n label_pais = c("10.10 per 100", "11.76 per 100", "12.58 per 100", "62.94 per 100", \n "5.98 per 100", "8.84 per 100", "3.18 per 100", "55.96 per 100"),\n countries = c("Mundo", "Argentina", "Brasil", "Chile",\n "Colombia", "Mexico", "Per\xc3\xba", "Estados Unidos"))\n\nsaved_text$countries <- factor(saved_text$countries, levels = c("Mundo", "Argentina", "Brasil", "Chile",\n "Colombia", "Mexico", "Per\xc3\xba", "Estados Unidos"))\n\n#Plot\nggplot()+\n geom_line(data = vaccinations, \n aes(x = month, y = vaccines, colour = factor(countries)), size = 2, show.legend = FALSE) +\n facet_wrap( ~ countries, ncol = 4)+\n geom_label_repel(data = saved_text,\n aes(y = 6, x = 1, label = label_pais)) #How can I change the border color?\nRun Code Online (Sandbox Code Playgroud)\n我明白了\n
\n我知道 geom_label_repel 中的颜色参数会更改边框的颜色(以及文本颜色),但我想要的是文本颜色为黑色,边框为红色。有谁知道如何实现这一目标?提前致谢!
这是一个具有挑战性的问题。主要是因为颜色仅在 grob 中定义一次,这适用于边框和文本本身。
让我们从获取一些颜色开始:
ggplot() +
geom_line(data = vaccinations,
aes(x = month, y = vaccines, colour = factor(countries)), size = 2, show.legend = FALSE) +
facet_wrap( ~ countries, ncol = 4) +
geom_label_repel(data = saved_text,
aes(y = 6, x = 1, label = label_pais, color = factor(countries)))
Run Code Online (Sandbox Code Playgroud)
ggrepel这完全是一种黑客行为,但让我们动态编辑包的代码。我窥探了源代码,直到找到创建文本的函数。
首先,我们需要卸载包。然后使用fixInNamespace编辑绘图功能:
unloadNamespace("ggrepel")
fixInNamespace("makeContent.labelrepeltree","ggrepel")
Run Code Online (Sandbox Code Playgroud)
如果您使用 Rstudio,您将获得一个弹出编辑器。如果您使用的是控制台,您会看到略有不同的东西。在第 77 行,您将找到定义文本属性的位置。
更改row$colour为"black"并保存更改。您可能会收到错误消息。不用担心。
现在,重新加载包后重复相同的代码:
library(tidyverse)
library(ggrepel)
ggplot() +
geom_line(data = vaccinations,
aes(x = month, y = vaccines, colour = factor(countries)), size = 2, show.legend = FALSE) +
facet_wrap( ~ countries, ncol = 4) +
geom_label_repel(data = saved_text,
aes(y = 6, x = 1, label = label_pais, color = factor(countries)))
Run Code Online (Sandbox Code Playgroud)
当您重新启动 R 会话时,所有这些都会恢复。
| 归档时间: |
|
| 查看次数: |
2615 次 |
| 最近记录: |