如何保持带有长标签的ggplot的大小

2024-02-06

我有一个图,它是每种事件类型的数量的简单条形图。我需要将情节的标签放在情节下方,因为某些事件的名称很长并且会横向挤压情节。我尝试将标签移动到图下方,但现在当有很多事件类型时,它会被向上挤压。有没有办法拥有静态绘图大小(即条形图),以便长图例不会挤压绘图?

My code:

ggplot(counts_df, aes(x = Var2, y = value, fill - Var1)+
    geom_bar(stat = "identity") +
    theme(legend.position = "bottom") +
    theme(legen.direction = "vertical") +
    theme(axis.text.x = element_text(angle = -90)

结果:

我认为这是因为图像大小必须是静态的,因此绘图会因轴而牺牲。当我在情节下面放置一个图例时,也会发生同样的事情。


有多种方法可以避免标签过度绘制或挤压绘图区域或提高总体可读性。哪种解决方案最合适将取决于标签的长度和条形的数量以及许多其他因素。所以,你可能不得不玩一玩。

虚拟数据

不幸的是,OP 没有包含可重现的示例,因此我们必须编写自己的数据:

V1 <- c("Long label", "Longer label", "An even longer label",
        "A very, very long label", "An extremely long label",
        "Long, longer, longest label of all possible labels", 
        "Another label", "Short", "Not so short label")
df <- data.frame(V1, V2 = nchar(V1))
yaxis_label <- "A rather long axis label of character counts"

“标准”条形图

x 轴上的标签垂直打印,相互重叠:

library(ggplot2)  # version 2.2.0+
p <- ggplot(df, aes(V1, V2)) + geom_col() + xlab(NULL) +
  ylab(yaxis_label) 
p

请注意,最近添加的geom_col()代替geom_bar(stat="identity")正在使用中。

OP的方法:旋转标签

x 轴上的标签旋转 90°,挤压绘图区域:

p + theme(axis.text.x = element_text(angle = 90))

水平条形图

所有标签(包括 y 轴标签)均垂直打印,提高了可读性,但仍然挤压绘图区域(但由于图表采用横向格式,因此挤压程度较小):

p + coord_flip()

带标签的垂直条形图

标签垂直打印,避免过度绘图,减少绘图区域的挤压。你可能需要尝试一下width参数为stringr::str_wrap.

q <- p + aes(stringr::str_wrap(V1, 15), V2) + xlab(NULL) +
  ylab(yaxis_label)
q

带标签的水平条形图

我最喜欢的方法:所有标签均竖直打印,提高可读性, 减少了地块面积的挤压。同样,您可能需要尝试一下width参数为stringr::str_wrap控制标签分割成的行数。

q + coord_flip()

附录:使用缩写标签scale_x_discrete()

为了完整起见,应该提到的是ggplot2能够缩写标签。在这种情况下,我发现结果令人失望。

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

如何保持带有长标签的ggplot的大小 的相关文章

  • 如何制作 POSIXct 的空向量

    我想制作一个空向量POSIXct这样我就可以放一个POSIXct in it vec lt vector POSIXct 10 vec vec 1 lt 2014 10 27 18 11 36 PDT vec 那是行不通的 有任何想法吗 由
  • R 复平面上的多重根

    我一直在尝试找到一个返回方程的所有复数解的函数 例如 16 1 4 2 i0 2 i0 0 i2 0 i2 就目前情况而言 如果我输入16 1 4 进入控制台 它只返回 2 我可以为此编写一个函数 但我想知道在 R 中是否有一种简单的方法可
  • 润滑mdy功能

    我正在尝试转换以下内容 但对其中一个日期 1 没有成功 4 2 10 变为 0010 04 02 有办法纠正这个问题吗 谢谢 维韦克 data lt data frame initialDiagnose c 4 2 10 14 01 200
  • R 脚本 - 如何在错误时继续执行代码

    我编写了一个 R 脚本 其中包含一个检索外部 Web 数据的循环 数据的格式大多数时候是相同的 但有时格式会以不可预测的方式发生变化 并且我的循环崩溃 停止运行 有没有办法不管错误如何继续执行代码 我正在寻找类似于 VBA 中的 On er
  • 从字符串向量中删除方括号

    我有一个字符向量 其中每个元素都括在括号中 我想 去掉括号 只剩下字符串 所以我尝试 n c Dave Tony Sara paste n sep 不幸的是 由于某种原因这不起作用 在使用相同的代码之前我已经执行了相同的任务 并且不确定为什
  • 在 R 中使用整数值代替数值(例如 1L 与 1)作为常量的好处

    在 R 源代码中 大多数 但不是全部 函数使用整数值作为常量 colnames lt function x do NULL TRUE prefix col if is data frame x do NULL return names x
  • 用另一个文件的标签为图表(ggplot2)中的标题添加下标

    在我的程序中 我有两个主要文件 第一个包含数据 第二个包含标签 或图形标题 文件总数1 数据 3 10000 3 32039232 1 0 0017290351 2 0 0002781092 3 10001 3 32101193 1 0 0
  • 如何计算R中的月份差异

    我有格式的日期2015 03 即年月 现在我想计算两个日期之间的月份差异 示例 日期之间的差异2015 03 and 2014 12应该是 3 或 4 因为 12 月到 3 月是 3 个月或 4 个月 这取决于我们是否考虑 12 月 你可以
  • 如何在 Jupyter Notebook 内的 conda 环境中使用特定的 Java 版本

    我的总体目标是使用sparklyr在 Jupyter 实验室的 Azure 云服务上的 R Jupyter 笔记本中 我使用 R sparklyr 和 Java 8 创建了一个新的 conda 环境 因为这是 Sparklyr 支持的版本
  • iGraph + Plotly 创建随机连接

    我正在尝试使用示例代码在这里iGraph网络图在plotly https plot ly r network graphs new to plotly和我自己的鞋拔子data frames而不是使用示例空手道俱乐部数据 当绘制图表时 它似乎
  • prop.test 使用什么公式?

    The prop test函数显然没有使用给定的公式here https onlinecourses science psu edu stat200 node 48创建置信区间 那么使用什么公式 下面是一个置信区间CI使用 prop tes
  • 带knitr的子图或子标题?

    是否可以使用 knit 生成子图 带有相关的子标题 这是一个最小的工作示例 documentclass article begin document lt
  • gtrendsR 包中 gconnect() 的登录问题

    我正在尝试使用 gtrendsR 包中的 gconnect 登录 R 中的 Google 帐户 但遇到了问题 上个月我一直在使用谷歌趋势数据进行研究 并且从来没有遇到过问题 如果您有任何想法 请告诉我 我让 Google 支持人员查看我的帐
  • 每种可能组合中的 Wilcoxon Rank Sum 检验

    我有 5 个值群体 我想在每种可能的组合中运行 Wilcoxon Rank Sum 检验 运行测试后 我想将 p 值存储在矩阵中 我是 还附上数据集 Population1 Population2 Population3 Populatio
  • 转置列表列表

    我有一个包含列表条目的列表 我需要转置结构 原始结构是矩形的 但子列表中的名称不匹配 这是一个例子 ax lt data frame a 1 x 2 ay lt data frame a 3 y 4 bw lt data frame b 5
  • 展开多列 [tidyr]

    我想使用将数据分布在多个列上tidyr dat lt data frame ID rep 1 10 col1 LETTERS seq 1 10 col2 c letters seq 1 8 NA NA col3 c rep NA 8 5 N
  • 并行化随机森林

    通过搜索和询问 我发现了许多可以用来利用服务器所有核心的软件包 以及许多可以进行随机森林的软件包 我对此很陌生 并且在并行随机森林训练的所有方法中迷失了方向 您能否就使用和 或避免它们中的每一个或它们的某些特定组合 以及有或没有caret
  • 如何使用 sf::st_centroid 计算多边形的质心?

    我正在尝试使用新的 sf 包在 R 中操作一些巴西人口普查数据 我可以导入数据 但当我尝试创建原始多边形的质心时出现错误 library sf Donwload data filepath lt ftp geoftp ibge gov br
  • 从R中的字符串中匹配提取国家名称

    我一直在从网站上抓取评论数据 在此过程中 我能够获取包含用户名 评论数量 评论日期和国家 地区信息的字符串向量 它们看起来大致是这样的 raw lt c Anna 1025 North Carolina USA DEC 20 2017 Ja
  • 使用 dplyr 计算每次访问的两个因素的比率

    我想用dplyr计算受试者每次访问的两个因素的比率向量 模拟数据可以在下面创建 subj c rep A 10 rep B 4 rep C 6 vist c rep c C0 C1 C2 C3 C4 each 2 rep c C0 C1 e

随机推荐

  • 为什么使用 IN(子查询)的查询比使用 IN(离散列表)的查询花费更长的时间

    这一直困扰着我 为什么这个查询 SELECT FROM TABLE WHERE value IN SELECT val FROM OTHER TABLE WHERE date lt 2014 01 01 运行速度比顺序运行此查询慢几个数量级
  • bash脚本..复制文件而不覆盖[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我想知道是否可以根据原始名称将文件复制 移动到目的地 基本上 我有一个 mail 文件夹 其中有几个子文件夹 例如 cur 和 new 等 然后我在
  • 计算 PHP 类的创建次数

    我有一个 php 类 我为其创建了多个实例 我想计算一下我创建该对象的次数 有没有办法知道我已经创建了 3 个 myObjects 您可以创建一个static http php net manual en language oop5 sta
  • 无法安装自制程序

    我有一台相当新的 macbook pro 我只是尝试按照他们网站上的说明安装自制程序 usr bin ruby e curl fsSL https raw githubusercontent com Homebrew install mas
  • NSString 属性是复制还是只读?

    我看到很多讨论说我应该使用copyNSString 属性 因为它会阻止其他人在我背后更改它 但那我们为什么不直接设置readonly财产呢 Update 谢谢回答我的问题 但问题是 对于 NSString 属性 你总是不希望别人修改它 对吧
  • Swift UITableViewAutomaticDimension 不起作用

    我的 Swift 项目中有一张这样的表 var tableView UITableView tableView UITableView tableView dataSource self tableView delegate self ta
  • 如何在android中的通知中添加按钮?

    我的应用程序播放音乐 当用户通过从屏幕顶部 或通常从平板电脑屏幕的右下角 滑动打开通知屏幕时 我想向他们展示一个按钮来停止当前播放的音乐并在以下情况下重新启动 他们要 我不打算将小部件放在用户的主屏幕上 而只是放在通知中 我怎样才能做到这一
  • 如何使用无法删除的值初始化输入,但允许用户在输入后写入

    我正在使用 Angularjs 和 bootstrap 创建一些表单 我想使用无法删除的默认值来初始化输入 我不想使输入只读或禁用它 我想用一些无法删除的文本初始化输入 但让用户在该文本后写入 Example 代码 xyz 用户想要写入的任
  • 在新版本的 matplotlib 中使用 twinx 时定义宽高比

    当前版本的 matplotlib 不允许box forced再说了 我应该怎么做同样的事情answer https stackoverflow com a 24742133 11840592 我正在使用 matplotlib 3 1 0 当
  • 如何在CSS中倾斜虚线边框?

    我正在尝试使用 CSS 为邮件应用程序设计一个信封 我的客户想要这种方式的虚线边框 如何用 CSS 边框达到这种效果 您可能需要稍微调整一下颜色 enveloppe padding 1em border 16px solid transpa
  • 在 Storybook v6.4 中加载 css 模块类时出现问题

    我在让故事书与我的 Gatsby 项目中的 css 模块完美配合时遇到问题 我能够渲染按钮组件 但它没有添加任何我的样式 在检查元素时 我只得到undefined undefined从下面的代码 按钮 jsx import React fr
  • 如何关闭 Nifi 处理器计划

    我有 GetHttp 和 InvokeHttp Nifi 处理器 它们在 Nifi 中启动流 但我希望它们仅从 URL 获取一次并将数据传递到下一个进程 使用处理器配置 我无法关闭调度 如何实现这一点 Apache NiFi 处理器和流程专
  • lambda 表达式中的返回类型错误

    以下代码在 IntelliJ 和 Eclipse 中可以正常编译 但 JDK 编译器 1 8 0 25 会报错 首先 代码 import java util function Predicate public abstract class
  • 如何将多个收件人添加到mailitem.cc字段c#

    好的 我正在处理 Outlook msg 模板 以编程方式打开它们 根据我的数据库中的内容插入值 前任 当我想在 收件人 字段添加多个收件人时 而不是执行以下操作 mailitem To a b c 我执行下面的操作 这更简单 尤其是当我循
  • iPhone:线程+释放池+[对象释放]=“消息发送到已释放的实例”

    我在 iPhone 上运行一些小代码时遇到了麻烦 基本上 我只需按一个按钮 它就会调用runTest 它运行test后台线程上的方法 这就是我创建自动释放池的原因 如果我运行下面的代码 我会在控制台上收到一条漂亮的消息 2010 09 07
  • AWS 公共 IP 限制是多少? (公共IP不是弹性IP)

    对于给定的 AWS 区域 您可以使用的公共 IP 数量是否有限制 不是弹性 IP 注意 我知道您最多只能使用 5 个弹性 IP 但是 如果您在创建 AWS 实例时选择 自动分配 IP 您将获得一个 IP 该 IP 在重新启动时会发生变化 我
  • 有没有办法将 ProGuard 与 MonoDroid 一起使用?

    我们的开发团队刚刚 大部分 在 Visual Studio 中使用 MonoDroid 完成了一个 Android 应用程序 因为它与银行业务有关 所以我们想尝试对其进行混淆 以增加一些安全性 防止任何人试图反编译它 最初 我认为我可以只使
  • 如何验证域凭据(来自本机代码)?

    我想针对域控制器验证一组凭据 例如 Username joel Password splotchy Domain STACKOVERFLOW 在 NET 3 5 及更高版本中您可以使用PrincipalContext ValidateCre
  • 使用 Schedule 库安排异步函数。 (使用discord.py重写)

    我的上一篇文章被错误地标记为重复 我不想做 asyncio sleep 因为它在几周内太不准确了 我需要时间表库 我发现了一个类似的线程 如何使用计划库运行异步函数 https stackoverflow com questions 515
  • 如何保持带有长标签的ggplot的大小

    我有一个图 它是每种事件类型的数量的简单条形图 我需要将情节的标签放在情节下方 因为某些事件的名称很长并且会横向挤压情节 我尝试将标签移动到图下方 但现在当有很多事件类型时 它会被向上挤压 有没有办法拥有静态绘图大小 即条形图 以便长图例不