在同一个 geom_text 上使用 ggrepel 和 Shadowtext

2024-03-07

我有一个情节(用 R 制作ggplot2)这是对一堆文本数据进行奇异值分解的结果,所以我基本上有一个数据集,其中包含一些评论中使用的约 100 个单词和约 10 个评论类别,每个评论都有 2D 坐标。由于文本量太大以及许多重要点之间的距离有多近,我很难让情节看起来清晰。

我的数据现在的结构方式,我正在绘制 2 个不同的geom_texts使用不同的格式和诸如此类的东西,为每个人传递一个单独的坐标数据框。这更容易,因为如果 ~10 个类别与 ~100 个术语重叠(这是次要的)就可以了,而且我想要这两个类别有相当不同的格式,但不一定有理由不能将它们放在一起数据框和geom我想如果有人能找到解决方案。

我想做的是使用ggrepel功能,因此 ~10 个类别相互排斥并使用shadowtext功能使它们从彩色单词的背景中脱颖而出,但由于它们是不同的geom我不知道如何实现这一点。

带有一些虚假数据的最小示例:

library(ggplo2)
library(ggrepel)
library(shadowtext)

dictionary <- c("spicy", "Thanksgiving", "carborator", "mixed", "cocktail", "stubborn",
                "apple", "rancid", "table", "antiseptic", "sewing", "coffee", "tragic",
                "nonsense", "stufing", "words", "bottle", "distillery", "green")

tibble(Dim1 = rnorm(100),
       Dim2 = rnorm(100),
       Term = sample(dictionary, 100, replace = TRUE),
       Color = as.factor(sample.int(10, 100, replace = TRUE))) -> words


tibble(Dim1 = c(-1,-1,0,-0.5,0.25,0.25,0.3),
       Dim2 = c(-1,-0.9, 0, 0, 0.25, 0.4, 0.1),
       Term = c("Scotland", "Ireland", "America", "Taiwan", "Japan", "China", "New Zealand")) -> locations

#Base graph
ggplot() +
  xlab("Factor 1") +
  ylab("Factor 2") +
  theme(legend.position = "none") +
  geom_text_repel(aes(x = Dim1, y = Dim2, label = Term, color = Color),
                  words,
                  fontface = "italic", size = 8) -> p

#Cluttered and impossible to read:
p + geom_text(aes(x = Dim1, y = Dim2, label = Term),
              locations,
              fontface = "bold", size = 16, color = "#747474")


#I can make it repel:
p + geom_text_repel(aes(x = Dim1, y = Dim2, label = Term),
                   locations,
                   fontface = "bold", size = 16, color = "#747474")

#Or I can make the shadowtext:
p + geom_shadowtext(aes(x = Dim1, y = Dim2, label = Term),
                  locations,
                  fontface = "bold", size = 16, color = "#747474", bg.color = "white")

The results of the second plot, nicely repelling: messy plot with a lot of words but the category labels are separated

The results of the last plot, with these clean-looking white buffers around the category labels: messy plot with the category labels all on top of each other but outlined in white

有没有办法两全其美?我尝试使用geom_label_repel没有边框,但我认为它看起来不像阴影文本解决方案那么干净。


这个答案来得有点晚了,但我最近发现自己陷入了类似的困境,并找到了解决方案。我写这篇文章是因为它可能对其他人有用。

#I can make it repel:
p + geom_text_repel(aes(x = Dim1, y = Dim2, label = Term),
                locations,
                fontface = "bold", size = 16,
                color = "white",
                bg.color = "black",
                bg.r = .15)

The bg.color and bg.r选项来自几何文本排斥允许您为文本选择阴影颜色和大小,从而显着提高图像的对比度(见下文!)。这个解决方案借鉴自这个堆栈链接! https://stackoverflow.com/questions/56798482/how-to-combine-repelling-labels-and-shadow-or-halo-text-in-ggplot2

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在同一个 geom_text 上使用 ggrepel 和 Shadowtext 的相关文章

  • 如何从 R 数据框中提取关键字

    我是 R 中文本挖掘的新手 我想从数据框的列中删除停用词 即提取关键字 并将这些关键字放入新列中 我尝试制作一个语料库 但它对我没有帮助 df C3是我目前拥有的 我想添加栏目df C4 但我无法让它工作 df lt structure l
  • R 编程常用工具

    如果已经以不同的方式问过这个问题 我深表歉意 但我找不到任何达到我想要的东西 我真的是从其他软件包 SPSS 开始接触 R 的 当我了解真正可以做什么时 我意识到我还需要其他 工具 这让我想到了我的问题 您有哪些用于开发 R 代码的设置 我
  • R中整数类和数字类有什么区别

    我想先说我是一个绝对的编程初学者 所以请原谅这个问题是多么基本 我试图更好地理解 R 中的 原子 类 也许这适用于一般编程中的类 我理解字符 逻辑和复杂数据类之间的区别 但我正在努力寻找数字类和整数类之间的根本区别 假设我有一个简单的向量x
  • 计算互相关函数?

    In R 我在用ccf or acf计算成对互相关函数 以便我可以找出哪个移位给我带来最大值 从它的外观来看 R给我一个标准化的值序列 Python 的 scipy 中是否有类似的东西 或者我应该使用fft模块 目前 我正在这样做 xcor
  • 不同 R/lme4 版本的单一拟合结果不匹配

    我试图将 R 版本 3 5 3 lme4 1 1 18 1 的随机效应估计与 R 版本 4 1 1 lme4 1 1 27 1 相匹配 然而 当存在奇异拟合时 这两个版本之间的随机效应存在微小差异 我对奇点警告很满意 但令人费解的是不同版本
  • 如何绘制大时间序列(数千次给药次数/药物剂量)?

    我正在尝试绘制医院中如何开出单一药物的图解 在这个虚拟数据库中 我在 2017 年 1 月 1 日之后遇到了 1000 名患者 绘图的目的是了解该药物的给药模式 在接近入院 出院或患者住院期间是否更频繁 高剂量给药 Get random d
  • R- 将某些列从 0 标准化为 1,其值等于 0

    我最近开始使用 are 我想扩展我的数据矩阵 我在这里找到了一种方法在两点之间缩放系列 https stackoverflow com questions 5468280 scale a series between two points
  • 如何在ubuntu的conda环境中更改Rstudio中的R版本

    我在基本系统中安装了 R 4 3 和 Rstudio 在 conda 环境中安装了旧版本的 R 4 2 3 命令which R返回环境中安装的 R 的目录 home 用户 miniconda3 envs anndata2ri pip bin
  • 将第 N 行上的 NA 行插入 data.frames 列表,其中 N 来自列表

    经过几个小时后 我发现自己无法解决以下问题 我有一个数据框列表 我想分别向每个 DF 插入 而不是替换 一行或多行 NA 始终至少一行 要插入的 NA 数量存储在单独的列表中 为了说明这一点 我有以下两个列表 list of datafra
  • 如何在knitr和RStudio中为word和html设置不同的全局选项?

    我正在使用 RStudio 0 98 932 和 knitr 1 6 想要为word和html设置不同的全局knitr选项 例如 想要将word的fig width和fig height设置为6 html的fig width和fig hei
  • 一段 R 代码会影响 foreach 输出中的随机数吗?

    我使用运行模拟foreach and doParallel并与随机数 名为random在代码中 简而言之 我模拟一个足球联赛 随机生成所有比赛的获胜者以及相应的结果 在dt base没有比赛进行 在dt ex1 and dt ex24场比赛
  • 无法更新/编辑从 R 中的包(`gratia`)导出的 ggplot2 对象

    我希望我在这里遗漏了一些令人痛苦的明显的东西 我希望更新 例如 修复标题 实验室等 由 生成的 ggplot 对象gratia draw 不太确定为什么我无法更新该对象 有一个简单的解决方案吗 devtools install github
  • randomForest 包在删除一个预测类时的奇怪行为

    我正在运行一个随机森林模型 它产生的结果从统计角度来看对我来说完全没有意义 因此我确信有些东西mustrandomForest 包的代码出现错误 至少在模型的本次迭代中 预测 左侧变量是具有 3 种可能结果的政党 ID 民主党 独立党 共和
  • 如何在 Caret 中绘制随机森林(护林员)树

    我生成了如下所示的随机森林树 并尝试绘制它 但出现错误 我在哪里犯了错误 我怎样才能以正确的方式绘制它 Actmodel lt train Activity Section Author data CB1 method ranger trC
  • 如何在 R 中合并同名列表中的数据框?

    我有一个包含很多数据框的列表 如果它们具有相同的名称 我想合并它们 即合并所有具有相同名称 a 和 b 的数据框 像这样 a lt aaaaa b lt bbbbb c lt ccccc g lt list df1 lt data fram
  • 如何对数字进行四舍五入并使其显示零?

    R 中将数字四舍五入到小数点后 2 位的常用代码是 gt a 14 1234 gt round a digits 2 gt a gt 14 12 但是 如果该数字的前两位小数位为零 则 R 会在显示中抑制零 gt a 14 0034 gt
  • 为什么数据帧上的 is.vector 不返回 TRUE?

    tl dr R 中的向量到底是什么 长版 R 中很多东西都是向量 例如 数字是长度为 1 的数值向量 is vector 1 1 TRUE 列表也是一个向量 is vector list 1 1 TRUE 好的 所以列表是一个向量 显然 数
  • 警告消息 - 来自 dummies 包的 dummy

    我正在使用 dummies 包为分类变量生成虚拟变量 其中一些变量具有两个以上类别 testdf lt data frame A as factor c 1 2 2 3 3 1 B c A B A B C C C c D D E D D E
  • 如何在 data.table 中分组后使用条件计算行数

    我有以下数据框 dat lt read csv s1 s2 v1 v2 a b 10 20 a b 22 NA a b 13 33 c d 3 NA c d 4 5 NA c d 10 20 dat gt A tibble 6 x 4 gt
  • picker输入字体或背景颜色

    我在闪亮的仪表板中使用 pickerInput 这很好 除了一个问题 背景颜色和字体颜色太相似 使得过滤器选择难以阅读 有什么办法可以改变背景或字体颜色吗 如果可能的话 我想继续使用 pickerInput 但如果有一个带有 selectI

随机推荐

  • 在mockito中模拟通用scala方法

    我正在开发一个 Scala 项目 使用 Mockito 作为模拟框架 我想模拟以下通用 Scala 方法 def parseXml T ClassTag xmlUrl URL xsdUrl Option URL Option T 当嘲笑时
  • 用于将十六进制字符串转换为字节数组的预处理器宏

    我已将 AES 128 密钥定义为 IDE 中的构建符号 以便它像这样调用 GCC arm none eabi gcc D AES KEY 3B7116E69E222295163FF1CAA1681FAC 这相当于 define AES K
  • 如何在 html 内使用双百分号(%%variable%%)括起来的 PHP 变量

    我正在修改发送到电子邮件的 html 文件 我需要通过以下方式创建一些检查PHP到变量但是我不知道双倍百分比是多少 我尝试在网上搜索 但我看到的结果甚至与编程无关 我需要确定何时发送另一封邮件 因为我只能在 30 分钟后发送邮件时才能看到输
  • 如何快速更新锚点约束

    我想在 iOS 中创建一个像 android 一样的菜单 我在用着布局限制建立限制条件 当我尝试更新左侧时 我遇到了这个问题约束单击按钮时的图像 它应该动画到单击按钮的位置 谁能帮我 它应该支持横向和纵向 我不想使用第三方代码 也不想使用N
  • log4net 日志正在创建但仍为空

    我正在尝试使用log4net http logging apache org log4net 当我启动应用程序时 它会创建日志文件 但无论我调用多少次Log Info Application Started 它仍然是空的 我研究了谷歌返回的
  • AWS IOT 连接在 IPAD OS v12.1.1 上关闭

    当我们在 ios 版本 12 1 1 上使用 wss 协议连接到 AWS IoT 时 我们能够成功连接到 IoT 但立即我们可以看到 IoT 触发 onError 事件 然后连接关闭 它尝试再次重新连接 但没有任何运气 我们从 IoT 得到
  • Ruby 中的舍入不一致?

    Ruby 的舍入有错误吗 为什么它的行为是这样的 gt gt 1 14 1 15 1 16 map x 1f x gt 1 1 1 1 1 2 gt gt 1 4 1 5 1 6 map x 0f x gt 1 2 2 例如 为什么 1 1
  • 使用 vcpkg 编译 gRPC C++ 示例

    我正在尝试使用与 vcpkg 管理器一起安装的 grpc 来构建和运行 grpc 示例 我通过克隆并查找 grpc 安装了 vcpkg 管理器 如下所示 sudo apt get install y unzip build essentia
  • eclipse appcompat->res->drawable-xxxhdpi 错误

    我刚刚将我的日食更新为SDK 21 我知道每次我创建项目时 Eclipse 也会创建名为appcompat v7 但是appcompat v7显示错误在res drawable xxxhdpi文件夹 这也使我的项目出错 并在控制台显示此警报
  • pip install mod_wsgi,如何设置MOD_WSGI_APACHE_ROOTDIR环境?

    我正在尝试在 Windows 10 中安装 mod wsgi 命令pip install mod wsgi给我错误 RuntimeError No Apache installation can be found Set the MOD W
  • weak_ptr 是如何工作的?

    我明白如何使用weak ptr and shared ptr 我明白如何shared ptr通过计算其对象中的引用数量来工作 如何weak ptr工作 我尝试阅读 boost 源代码 但我对 boost 还不够熟悉 无法理解它使用的所有内容
  • 在调试模式下使用 Intel TBB

    我正在尝试使用英特尔线程构建块调试 C 代码 使用我在此处找到的过程线程构建块中的调试 https stackoverflow com questions 32887113 debugging in threading building b
  • Angular - 如何导航到 .ts 文件中的命名路由器出口

    我有一个侧面导航 在侧面导航中我将其命名为路由器出口 我试图将名为 aside 的路由器出口分配给名为 top words aside 的子组件 但是 它找不到 url 段 报告 component html
  • C++ 友元函数模板重载和 SFINAE 在 clang++、g++、vc++ 中的不同行为(C++14 模式)

    因此 以下代码在 clang 3 8 0 下构建并成功运行 但在 g 6 3 0 和 vc 19 10 24903 0 下均失败 g 和 vc 都抱怨运算符 的重新定义 有谁知道这里哪个编译器有问题 对于无法编译代码的编译器 编译错误的解决
  • 如何找出 PDF 文档中引用了哪些字体以及嵌入了哪些字体

    PDF 文档中的字体存在一些问题 为了解决这个问题 我想检查一下 哪些字体实际上嵌入在pdf文档中 哪些字体只是被引用 有没有一种简单 而且免费 的方法可以做到这一点 pdffonts命令行工具最初来自Xpdf http en wikipe
  • jquery后台只改变一个轴

    我想我的最后一个问题让大家不知所措 所以我会简化一下 我试图仅更改 x 轴的背景位置 默认情况下 如果只定义一个值 则另一个默认为50 所以这个函数 function colorChangePiano var bp background p
  • 链接我的库时未解析的外部符号

    我已经用 VS2010 编译了自己的库文件 lib 但是当我尝试像这样引用它时 pragma comment lib path to lib lib 我不断收到无法解析的外部符号 我做错了什么 到目前为止 pragma comment li
  • 异步odbc好像是同步的

    我正在尝试执行异步数据库查询 但是当我测试我的代码时 它似乎是同步的 我已将问题隔离到我的查询功能 无法弄清楚我做错了什么 我对 aync await 功能还很陌生 所以我可能做了一些愚蠢的事情 这是失败的代码 我正在使用本地安装的 pos
  • 如何解析存储在我的 google 驱动器中但以 html 类型突出的 XML 文件?

    如何解析存储在我的谷歌驱动器中但作为 html 类型脱颖而出的 XML 文件 我在我的 google Drive 云上保存了源 xml 的副本 我可以解析源代码 但无法解析看起来像 html 类型的 xml 副本 我有解析错误 例如 元素类
  • 在同一个 geom_text 上使用 ggrepel 和 Shadowtext

    我有一个情节 用 R 制作ggplot2 这是对一堆文本数据进行奇异值分解的结果 所以我基本上有一个数据集 其中包含一些评论中使用的约 100 个单词和约 10 个评论类别 每个评论都有 2D 坐标 由于文本量太大以及许多重要点之间的距离有