使用 ggplot2 以粗体显示各个轴标签

2023-11-25

改编自这个问题和解决方案的问题:使用 ggplot2 以粗体突出显示各个轴标签

我想根据满足标准有选择地证明水平轴标签的合理性。因此,借用上述问题和答案,我设置了一个示例:

require(ggplot2)
require(dplyr)
set.seed(36)
xx<-data.frame(YEAR=rep(c("X", "Y"), each=20),
           CLONE=rep(c("A", "B", "C", "D", "E"), each=4, 2),
           TREAT=rep(c("T1", "T2", "T3", "C"), 10),
           VALUE=sample(c(1:10), 40, replace=T))

# Simple plot with factors on y axis
ggplot(xx, aes(x = VALUE, y=CLONE, fill=YEAR)) + 
    geom_bar(stat="identity", position="dodge") +
    facet_wrap(~TREAT)

enter image description here

好吧,我采用了上面问题+答案中的函数来生成理由向量:

# Modify to control justification
colorado2 <- function(src, boulder) {
    if (!is.factor(src)) src <- factor(src)                   
    src_levels <- levels(src)                                 
    brave <- boulder %in% src_levels                         
    if (all(brave)) {                                         
        b_pos <- purrr::map_int(boulder, ~which(.==src_levels)) 
        b_vec <- rep(0.2, length(src_levels))               
        b_vec[b_pos] <- 0.9                                 
        b_vec                                                  
    } else {
        stop("All elements of 'boulder' must be in src")
    }
}

# Redraw the plot with modifcation
ggplot(xx, aes(x = VALUE, y=CLONE, fill=YEAR)) + 
    geom_bar(stat="identity", position="dodge") +
    facet_wrap(~TREAT) +
    theme(axis.text.y=element_text(hjust=colorado2(xx$CLONE, c("A", "B", "E"))))

I'm getting this unfortunate mess: enter image description here

这些标签在我想要的方向上是合理的——但由于我无法弄清楚的原因,占据了太多的情节。我该如何解决 ?


我做了一些挖掘。问题在于 ggplot 如何设置 y 轴 grob 的 grob 宽度。它假设hjust所有标签都是相同的。我们可以通过对 grob 树进行一些修改来解决这个问题。以下代码是使用 ggplot2 的开发版本进行测试的,可能无法像当前发布的版本中编写的那样工作。

首先,一个简单的可重现示例:

p <- ggplot(mpg, aes(manufacturer, hwy)) + geom_boxplot() + coord_flip() + 
  theme(axis.text.y = element_text(hjust = c(rep(1, 10), rep(0, 5))))
p # doesn't work

enter image description here

问题在于轴 grob 的 grob 宽度被设置为整个绘图区域。但是我们可以手动进去固定宽度。不幸的是,我们必须在多个位置修复它:

# get a vector of the y labels as strings
ylabels <- as.character(unique(mpg$manufacturer))

library(grid)
g <- ggplotGrob(p)

# we need to fix the grob widths at various locations in the grob tree
g$grobs[[3]]$children[[2]]$widths[1] <- max(stringWidth(ylabels))
g$grobs[[3]]$width <- sum(grobWidth(g$grobs[[3]]$children[[1]]), grobWidth(g$grobs[[3]]$children[[2]]))
g$widths[3] <- g$grobs[[3]]$width

# draw the plot
grid.newpage()
grid.draw(g)

enter image description here

ggplot2 的轴绘制代码可能会被修改为计算宽度,就像我从一开始就在这里所做的那样,然后问题就会消失。

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

使用 ggplot2 以粗体显示各个轴标签 的相关文章

  • 如何获得属于五分位数的x?

    我正在大学学习使用 R 进行计量经济学项目 所以请原谅我的笨拙 基本上 使用并给出 一个矩阵 股票价格 行 天 列 公司股票价格 另一个矩阵 市值 行 天 列 公司市值 我必须收集第三个矩阵每天观察的属于市值分布第一五分位数的股票价格 然后
  • 错误:“rjags”的包或命名空间加载失败

    在终端的 conda 环境之一中 我能够成功安装包 rjags 但是 当我在该环境中运行 R 并运行库 rjags 时 出现以下错误 加载所需的包 coda 错误 rjags 的包或命名空间加载失败 rjags 的 loadNamespac
  • 从 R 中的 HTTPS 连接逐行读取

    当创建连接时open r 它允许逐行读取 这对于批量处理大数据流非常有用 例如这个脚本 https gist github com jeroenooms d33a24958d99bb969ac0通过一次读取 100 行来解析相当大的 gzi
  • 将 VLMC 拟合到很长的序列

    我正在尝试将 VLMC 拟合到最长序列为 296 个状态的数据集 我这样做如下所示 Load libraries library PST library RCurl library TraMineR Load and transform d
  • R 编程:如何计算数据框中两个单元格之间的差异并将它们保存在新列中

    尝试学习 R 并陷入自相关示例中 我想将 x 的差异与 y 的差异进行回归 我在数据框中有 x 和 y 并且希望将 x2 x1 的差值保存在新列 例如 dx 中 我不知道该怎么做 我拥有的 data1 x y 5 3 8 9 3 1 1 5
  • 将函数应用于 3d 数组的每一层,返回一个数组

    假设您有一个包含行 列和层的 3 维数组 A lt array 1 27 c 3 3 3 想象你有一个函数 它接受一个矩阵作为输入并返回一个矩阵作为输出 就像t 如何将该函数应用于数组的每一层 返回与第一层大小相同的另一个数组 我觉得我应该
  • 设置图表的标签和值

    我正在使用创建饼图JFreeChart 我想像中一样单独设置值和标签iReport 换句话说 我希望图表在饼图上显示与图例中不同的结果 有什么办法可以实现这个目标吗 The MessageFormat 参数索引值对应于系列名称 domain
  • 使用 R 进行项目组织 [重复]

    这个问题在这里已经有答案了 可能的重复 统计分析和报告撰写的工作流程 https stackoverflow com questions 1429907 workflow for statistical analysis and repor
  • R:表格格式

    我有一个包含以下列的 Excel 文件 Column1 Column2 Column3 ab bb 0 5 ab bc 0 1 ab cd 0 7 ab dd 0 8 ac bb 0 2 ac bg 0 8 ac ee 0 8 ac dd
  • R - 通过覆盖和递归合并列表

    假设我有两个带有名字的列表 a list a 1 b 2 c list d 1 e 2 d list a 1 b 2 b list a 2 c list e 1 f 2 d 3 e 2 我想递归地合并这些列表 如果第二个参数包含冲突的值 则
  • 在 R 中使用 Huggingface Transformer 模型

    我正在尝试在 R 中使用不同的 Huggingface 模型 这是通过 reticulate 导入 Transformer 包来实现的 谢谢 https rpubs com eR ic transfoRmers https rpubs co
  • 使用 dplyr::filter 的整洁方式是什么?

    使用下面的函数调用foo c b 输出以内联方式显示 正确的写作方式是什么df gt filter x gt x 我已经包含了一个使用的示例mutate以整洁的风格与之对比filter foo lt function variables x
  • ggplot2、R 中的单条形条形图

    我有以下数据和代码 gt ddf var1 var2 1 aa 73 2 bb 18 3 cc 9 gt gt dput ddf structure list var1 c aa bb cc var2 c 73L 18L 9L Names
  • R - tidyr - 变异并传播多列

    我在 R 中有以下数据框 my df test lt data frame V1 c 1 2 1 V2 c A B A V3 c S1 S1 S2 V4 c x x x V5 c y y y V6 c A B C V7 c D E F my
  • 更改计划的开始日期以优化资源

    我有很多工作需要在特定的时间间隔执行 然而 我们每天完成这项工作的资源有限 因此 我正在尝试优化开始时间日期 开始时间日期只能向前移动 不能向后移动 以便每天使用的资源与我们的预算更加不相似 这些函数在下面的示例中使用 Function t
  • 在多行中打印带有列名称的 R 数据框

    我有一个带有长列名称的 R 数据框 所以当我打印数据框时它太宽了 有没有一种简单的方法可以将数据框打印到屏幕上 并且列名出现在多行中 我知道我可以缩短名字 但我不想这样做 当奥斯卡的答案被接受时 我想这可能真的是一个答案 不幸的是 这只是复
  • 如何在我自己的网络服务器上导出并托管 ggvis 图表?

    据我了解 ggvis 运行在闪亮的之上 但我不知道如何在没有 R shiny 的情况下导出在网络服务器上运行单个 ggvis 图表所需的所有文件 这对于交互式绘图来说是不可能的 因为 每个交互式 ggvis 图都必须连接到正在运行的 R 会
  • ggplot 直方图相对于轴的位置不正确

    我试图这样绘制直方图 Todo lo haremos con base en un variable aleatoria Uniforme 0 1 set seed 26 n 10000 U lt runif n n Supongamos
  • R - Quantstart:多种股票的测试策略

    我正在使用一些指标构建基本交易策略 我的问题是我希望它在多个股票上运行 而不必指定我想要测试的每个单独的股票 目前我可以使用向量一次获取多个符号 如下所示 Get Shares from Yahoo Finance Stocks lt AS
  • ggplot2 可视化/显示中的地图错误?

    正如您在下面看到的 我使用 ggplots 制作的地图上存在一个奇怪的显示问题 任何投影似乎都会发生同样的问题 这是代码 仅包maps and ggplot2需要 mapWorld lt borders world colour gray5

随机推荐

  • 为什么全局匿名联合需要声明为静态?

    C 0x 草案 9 5 6 在命名命名空间或全局命名空间中声明的匿名联合应声明为静态的 为什么是这样 假设匿名联合不需要声明为静态 并且编译器遇到这两个翻译单元 预处理后 File1 union int a char b Further c
  • Microsoft Visual Studio:opendir() 和 readdir(),如何实现?

    我之前在我的 Dev cpp 中使用过这种代码 if dh opendir folder false while file readdir dh false do my stuff closedir dh 但现在我正在使用 MSVC 我不知
  • CSS边框颜色分为4种颜色

    有什么方法可以让 CSS 边框的一侧有 4 种不同的颜色吗 我目前有 header border color 88a9eb 我想要有 4 种纯色边框 每种颜色有 25 的分割 这可能吗 我想制作一个完整的版本 中间没有白色的部分 您可以使用
  • 如何从另一个 job2 访问 Hudson job1 工件?

    我们在哈德逊的一个项目中有一份制作工作和一份夜间工作 生产作业需要从特定的夜间构建 作为参数提供 中提取一些工件 谁能帮助我们提示如何实现这一目标 The 复制神器插件似乎能够做到这一点 另一种方法可能是通过获取工件 http server
  • 在 Selenium Chrome 驱动程序中禁用缓存

    我使用 Selenium ChromeDriver 来测量网页的性能 但默认情况下 Chrome 驱动程序缓存是启用的 Option disable application cache现已弃用https code google com p
  • std::mutex 作为类成员,并将类对象存储到容器中

    下面是重现该错误的最少代码 include
  • Powershell:查找/替换 ASCII 控制字符的模式

    我正在尝试编写一个脚本来搜索文件的内容 并在遇到一组 ASCII 控制字符时插入 CR LF 我想替换的字符模式是 ETX NUL STX ETX SOH filenames Get Childitem E VendorFiles CR c
  • Resharper 8.1 测试运行器减慢 Visual Studio 文本编辑速度

    我有一个相当小的 C 解决方案 其中包含大约 5 个项目 我正在使用带有 Update 4 的 Visual Studio 2012 和 Resharper 8 1 内部版本 8 1 23 546 它采用配备 SSD 和 16GB RAM
  • Ruby on Rails 多态关系的优点和缺点 [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 您知道 Ruby on Rails 多态关系有哪些优点和缺点 优点 您可以轻松地将任何东西链接到任何东西 适应性强的关系有助于适应不可预见的情况 很容易建立关系 非常适合临时系统
  • 如何使用 from_json 和 schema 作为字符串(即 JSON 编码的 schema)?

    我正在从 Kafka 读取一个流 并将 Kafka 的值 即 JSON 转换为 Structure from json有一个采用类型模式的变体String 但我找不到样本 请指出下面的代码有什么问题 Error Exception in t
  • Jboss 在根上下文中部署

    是的 我知道enable welcome root false 但在文件中找不到这个 使用 Wildfly Final 或 jboss eap 6 2 在哪儿 为什么我需要在 WEB INF 中添加 jboss web xml 有问题的文件
  • “@Transactional”应该放在服务层或 DAO 的哪里

    首先 我可能正在问一些以前被问过并回答过的问题 但我无法返回搜索结果 我们在服务层定义事务注释 典型的 Spring Hibernate CRUD 通常是 控制器 gt 管理器 gt Dao gt Orm 我现在遇到的情况是 我需要根据客户
  • 在谷歌地图android上实现落针动画

    我正在我的 Android 应用程序中实现谷歌地图 在此过程中我想添加落针动画 我已经搜索了所有内容 但找不到执行此操作的确切方法 任何人都可以帮助我如何做 这将是一个很大的帮助 将标记添加到地图中的所需位置 然后使用该标记调用此函数 pr
  • Python - PyQt - QTable Widget - 添加行

    我是 PyQt 的新手 无论如何仍然有点困惑 我有一个像这样的文本文件结构 姓名 姓氏 电话 电子邮件 空格实际上是制表符 t 现在当我用我的方法读取这个文件时 我希望填充 QTableWidget 我的 QTable Widget 有 4
  • C Int 和 Long 32 - 64 位中的值范围

    我对 C 中 Int 变量的值范围感到困惑 我知道 32 位 unsigned int 的范围是 0 到 65 535 那么只要有0到4 294 967 295 这在 32 位机器上没问题 但现在在 64 位机器中一切都保持不变吗 或者也许
  • 连接两个 gatsby 节点

    所以 我正在使用盖茨比 mdx用于从 MDX 文件创建站点的插件 我想在 SitePage 对象和 Mdx 对象之间创建关联 以便我可以对 SitePage 边缘执行一个 graphQL 查询来构建站点导航 我的大部分代码都是用 TypeS
  • 如何链接没有字幕的 YouTube 视频?

    可以链接吗youtubeHTML 代码中的视频不显示其字幕 字幕 假设我有以下视频 http www youtube com watch v kTvHIDKLFqc 它有默认的英文字幕 但是 当链接该视频时 我想在没有它们的情况下加载它 是
  • C++ 中正态分布的随机数

    作为 C 的完全初学者 我想从正态分布生成一个随机数 使用以下代码 源自此post 我能够这样做 include
  • 我可以在 Windows 7 上使用 C# .NET 开发 Blackberry 应用程序吗

    嘿 我非常有兴趣为黑莓操作系统构建一个应用程序 我可以用 C 来做吗 Blackberry 还推出了 Visual Studio 插件 但您将如何将其与模拟器一起使用 不 你做不到 你必须使用Java来做黑莓开发 黑莓曾经有一个 C C A
  • 使用 ggplot2 以粗体显示各个轴标签

    改编自这个问题和解决方案的问题 使用 ggplot2 以粗体突出显示各个轴标签 我想根据满足标准有选择地证明水平轴标签的合理性 因此 借用上述问题和答案 我设置了一个示例 require ggplot2 require dplyr set