如何删除 ggplot geom_bar 图中的选择标签并将这些标签居中?

2024-03-09

是否可以从 geom_bar ggplot (geom_text) 中删除重复值的某些/特定标签并将该值集中在图/条上?

My data:

structure(list(prey_name = c("Amphipod", "Byths", "Chiro.Adult", 
"Chiro.Larvae", "Chiro.Pupae", "Chironomidae", "Chydoridae", 
"Copepoda", "Cyclopoid", "Daphnia", "Dreissena", "EggMass", "Eurycercidae", 
"Fish.Eggs", "Goby", "Hemimysis", "Isopod", "Sphaeriidae", "Trichopteran", 
"UID.Fish"), Fi = c(0.189473684210526, 0.515789473684211, 0.0526315789473684, 
0.157894736842105, 0.252631578947368, 0.0526315789473684, 0.0105263157894737, 
0.0210526315789474, 0.0105263157894737, 0.147368421052632, 0.0842105263157895, 
0.0210526315789474, 0.0210526315789474, 0.0105263157894737, 0.147368421052632, 
0.0105263157894737, 0.0947368421052632, 0.0421052631578947, 0.0105263157894737, 
0.0210526315789474)), class = c("tbl_df", "tbl", "data.frame"
), row.names = c(NA, -20L))

My plot:

ggplot(FO_adult, aes(x=reorder(prey_name, -Fi), Fi, fill=prey_name)) +
  geom_bar(stat = "identity") +
  geom_text(aes(y = Fi, label = round(Fi, digits=3)), vjust = -0.5,
            check_overlap = TRUE) +
  ggtitle("Frequency of Occurrence") +
  labs(x="Prey", fill = "Prey Name", y = "Frequency of Occurrence (%)", 
       caption = "Source: DNR Diet Data") + 
  scale_fill_igv(palette = "default") +
  theme_bw() +
  theme(legend.position = "right", 
        plot.title = element_text(hjust=0.5),
        legend.background = element_rect(fill = "white", color = 1),
        axis.text.x = element_blank(),
        axis.ticks.x = element_blank(),
        axis.ticks.length = unit(0.2,"cm")) +
  scale_y_continuous(expand = expansion(mult = c(0,0.1)))

这使:

我的问题是,是否可以为重复的值设置一个标签?例如,0.147 出现两次(水蚤和虾虎鱼);其他猎物为 0.053; 0.021 等。我可以将这些值仅在绘图上显示一次并将其居中吗?

Desired plot: desired plot

我知道我可以进行子集化并做这样的事情:

ggplot(FO_adult, aes(x=reorder(prey_name, -Fi), Fi, fill=prey_name)) +
  geom_bar(stat = "identity") +
  geom_text(data = subset(FO_adult, Fi > 0.10), 
              aes(y = Fi, label = round(Fi, digits=3)), vjust = -0.5) +
  ggtitle("Frequency of Occurrence") +
  labs(x="Prey", fill = "Prey Name", y = "Frequency of Occurrence (%)", 
       caption = "Source: DNR Diet Data") + 
  scale_fill_igv(palette = "default") +
  theme_bw() +
  theme(legend.position = "right", 
        plot.title = element_text(hjust=0.5),
        legend.background = element_rect(fill = "white", color = 1),
        axis.text.x = element_blank(),
        axis.ticks.x = element_blank(),
        axis.ticks.length = unit(0.2,"cm")) +
  scale_y_continuous(expand = expansion(mult = c(0,0.1)))

它会删除小于 10% 的值的标签,但如果可能的话我更愿意保留其他值......

我查看了以下帖子,但没有真正回答我的问题:删除重复标签 https://stackoverflow.com/questions/45629806/remove-duplicate-labels-in-geom-text & 删除选定的标签 https://stackoverflow.com/questions/68276338/remove-selected-labels-in-geom-text-repel

另外,我知道这是一个单独的问题,但也许答案很简单......是否可以按照与情节相同的顺序排列图例(按以下顺序排列图例:Byths、Chiro.Pupae、Amphpod、Chiro。幼虫等...)?


我认为这只需要一些数据操作。请记住,离散轴“实际上”是一个在整数处具有因子级别标签的数字轴,因此一些数据整理允许计算每个标签的 x、y 位置。

要使图例的顺序与 x 轴相同,只需重新排序填充美学,就像重新排序 x 美学一样:

library(tidyverse)

ggplot(FO_adult, aes(x = reorder(prey_name, -Fi), Fi, 
                     fill = reorder(prey_name, -Fi))) +
  geom_col() +
  geom_text(data = FO_adult %>%
                     mutate(label = round(Fi, digits = 3),
                            prey_num = as.numeric(reorder(prey_name, -Fi))) %>%
                     group_by(label) %>%
                     summarize(n = n(), 
                               label = first(label), 
                               Fi = first(Fi),
                               prey_num = first(prey_num), 
                               prey_name = first(prey_name)),
            aes(x = prey_num + (n - 1)/2, y = Fi, label = label), vjust = -0.5,
            check_overlap = TRUE) +
  ggtitle("Frequency of Occurrence") +
  labs(x="Prey", fill = "Prey Name", y = "Frequency of Occurrence (%)", 
       caption = "Source: DNR Diet Data") + 
  scale_fill_igv(palette = "default") +
  theme_bw() +
  theme(legend.position = "right", 
        plot.title = element_text(hjust=0.5),
        legend.background = element_rect(fill = "white", color = 1),
        axis.text.x = element_blank(),
        axis.ticks.x = element_blank(),
        axis.ticks.length = unit(0.2,"cm")) +
  scale_y_continuous(expand = expansion(mult = c(0,0.1)))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何删除 ggplot geom_bar 图中的选择标签并将这些标签居中? 的相关文章

  • 从 R 中的向量中选择所有可能的元组

    我正在尝试用 R 编写一个程序 当给定一个向量时 将返回所有可能的tuples http en wikipedia org wiki Tuples该向量中的元素 例如 元组 c a b c c a b c 出租车 c a c c b c c
  • R::bigmemory - 如何创建角色big.matrix?

    我尝试使用bigmemory封装在R我一开始就陷入困境 我愿意 temp lt matrix paste a 1 10 5 2 并得到一个字符矩阵 没关系 但后来我尝试 x lt as big matrix temp type char 我
  • 返回数据帧 R 中的下一行

    我有一个看起来像这样的数据框 kind datetime book 2016 04 23 04 23 00 pen 2016 04 23 04 30 00 toy 2016 04 23 06 45 00 我想为数据集中的每一行返回下一行的日
  • LDA with topicmodels,如何查看不同文档属于哪些主题?

    我正在使用 topicmodels 包中的 LDA 我已经在大约 30 000 个文档上运行它 获取了 30 个主题 并获得了主题的前 10 个单词 它们看起来非常好 但我想看看哪些文档属于哪个主题的概率最高 我该怎么做 myCorpus
  • 如何在for循环中引用变量?

    我正在循环访问不同的 data tables 和 data table 中的变量 但我在引用内部变量时遇到问题for loop dt1 lt data table a1 c 1 2 3 a2 c 4 5 2 dt2 lt data tabl
  • 在 R 中创建一个运行计数变量?

    我有一个足球比赛结果的数据集 我希望通过创建一组类似于世界足球 Elo 公式的运行评级来学习 R 我遇到了麻烦 在 Excel 中看似简单的事情在 R 中并不完全直观 例如 4270 个观察中的前 15 个具有必要的变量 date t 1
  • 如何计算R中移动窗口内的平均斜率

    我的数据集包含2个变量y 和 t 05s y 每 05 秒测量一次 我正在尝试计算移动中的平均坡度20秒窗口 即计算第一个 20 秒斜率值后 窗口向前移动一个时间单位 05 秒 并计算下一个 20 秒窗口 在以下位置生成连续 20 秒斜率值
  • 将数据框中的每个 x 个字符拆分为字符串

    我知道这里有一些关于每隔一段时间分割一个字符串的答案nth字符 例如this one https stackoverflow com questions 23208490 split each character in r and this
  • 如何使用 usmap 标记数字而不是名称?

    我知道 usmap 有一个选项label in plot usmap 我想标记一些数字 而不是状态名称 我想 usmap 中应该有与州质心坐标相关的数据 但我不知道如何找到它 如果我能得到 坐标然后我可以用它来标记数字geom text 这
  • 尝试读取 CSV 文件时出现“无法识别的字符串转义”

    我正在尝试导入一个 csv文件 以便我可以观看此视频 R ggplot2 图形直方图 http www youtube com watch v 47kWynt3b6M 我安装了所有正确的软件包 包括ggplot以及相关的包 视频中的第一个说
  • pyomo + 网状错误 6 句柄无效

    我正在尝试运行pyomo优化 我收到错误消息 Error 6 The handle is invalid 不知道如何解释它 环顾四周似乎与特权有关 但我不太明白 在下面找到完整的错误跟踪以及重现它的玩具示例 完整的错误跟踪 py run f
  • twitterR 和 ROAuth R 软件包安装

    我在安装 CRAN 上的 twitteR 和 RAOuth 软件包时遇到一些问题 我尝试了几种不同的方法 在 Windows 下使用源代码 在 Ubuntu 下使用 RStudio 我尝试了以下命令 sudo apt get install
  • 在 R 格子包中微调点图

    我正在尝试为不同的数据集和不同的算法绘制一堆 ROC 区域 我有三个变量 方案 指定所使用的算法 数据集 是正在测试算法的数据集 以及 Area under ROC 我正在 R 中使用lattice库 命令如下 点图 方案 Area und
  • 使用 R 选择第一个非 NA 值

    df lt data frame ID c 1 1 1 2 3 3 3 test c NA 5 5 6 4 NA 7 3 NA 10 9 我想创建一个名为 value 的变量 它是每个单独 ID 测试的第一个非 NA 值 对于只有NA的个体
  • R 中的列乘以子字符串

    假设我有一个数据框 其中包含多个组件及其在多个列中列出的属性 并且我想对这些列运行多个函数 我的方法是尝试将其基于每个列标题中的子字符串 但我无法弄清楚如何做到这一点 下面是数据框的示例 Basket F Type 1 F Qty 1 F
  • 将每列的值乘以 R 中另一个 data.frame 中的权重

    我有两个data frames df and weights 代码如下 df看起来像这样 id a b d EE f 1 this 0 23421153 0 02324956 0 5457353 0 73068586 0 5642554 2
  • ddply 和aggregate 之间的区别

    有人可以通过以下示例帮助我了解聚合和 ddply 之间的区别 数据框 mydat lt data frame first rpois 10 10 second rpois 10 10 third rpois 10 10 group c re
  • 在 r 中的 group_by 之后建模后取消列表列的嵌套

    我想对所有组进行线性回归group by 将模型系数保存在列表列中 然后使用 unnest 扩展列表列 这里我用的是mtcars以数据集为例 注 我想用do here becausebroom tidy 不适用于所有型号 mtcars gt
  • 文本挖掘 pdf 文件/词频问题

    我正在尝试挖掘一篇具有丰富 pdf 编码和图表的文章的 pdf 我注意到 当我挖掘一些 pdf 文档时 我得到的高频词是 phi taeoe toe sigma gamma 等 它与某些 pdf 文档配合良好 但与其他文档配合使用时却得到这
  • 有效地绘制大时间序列(matplotlib)

    我正在尝试使用 matplotlib 在同一轴上绘制三个时间序列 每个时间序列有 10 6 个数据点 虽然生成图形没有问题 但 PDF 输出很大 在查看器中打开速度非常慢 除了以栅格化格式工作或仅绘制时间序列的子集之外 还有其他方法可以获得

随机推荐