如何制作堆积条形图的动画?

2024-02-11

我正在尝试在四个堆叠条形图之间进行转换。输出并不完全符合我的预期,我无法确定这是否是我的代码中的错误,或者是否是我的代码中的错误gganimateR 包。

这是我使用的数据框:

df <- structure(list(name = c("variable", "variable", "variable", "variable",    
    "variable", "variable", "variable", "variable", "variable", "variable", 
    "variable", "variable", "variable"), groups = structure(c(3L, 
    3L, 3L, 3L, 2L, 2L, 2L, 1L, 1L, 1L, 4L, 4L, 4L), .Label = c("group 1", 
    "group 2", "group 3", "group 4"), class = "factor"), score = structure(c(4L, 
    3L, 2L, 1L, 3L, 2L, 1L, 3L, 2L, 1L, 3L, 2L, 1L), .Label = c("4", 
    "3", "2", "1"), class = c("ordered", "factor")), percentage = c(8, 
    38, 38, 16, 17.1428571428571, 40, 42.8571428571429, 40, 20, 40, 
    5, 65, 30), percentage2 = c("8%", "38%", "38%", "16%", "17.1%", 
    "40%", "42.9%", "40%", "20%", "40%", "5%", "65%", "30%"), label = c(0.04, 
    0.27, 0.65, 0.92, 0.0857142857142857, 0.371428571428571, 0.785714285714286, 
    0.2, 0.5, 0.8, 0.025, 0.375, 0.85)), row.names = c(NA, -13L), class = "data.frame")

当我制作仅包含一个阶段的组变量的堆积条形图时,我得到例如这:

library(ggplot2)
library(dplyr)

ggplot(filter(df, groups == "group 3"),
       aes(x = name, y = percentage, fill = score)) +
    geom_bar(stat = "identity", position = "fill", width = 0.8) +
    geom_text(aes(y = label, label = percentage2), color = "grey25") +
    coord_flip() +
    scale_fill_manual(values=c("darkgreen", "lightgreen", "yellow", "red"), 
                      guide = guide_legend(reverse = TRUE), drop=FALSE) 

但是当我尝试添加gganimate四个不同小组阶段的动画我得到的是:

library(gganimate)

ggplot(df, aes(x = name, y = percentage, fill = score)) +
    geom_bar(stat = "identity", position = "fill", width = 0.8) + 
    geom_text(aes(y = label, label = percentage2), color = "grey25") +
    coord_flip() +
    scale_fill_manual(values = c("darkgreen", "lightgreen", "yellow", "red"), 
                      guide= guide_legend(reverse = TRUE), drop = FALSE) + 
    transition_states(groups, transition_length = 2, state_length =  1)

它似乎同时将所有组的所有百分比(条长度)添加到动画中。我想要四个不同组的堆叠条形图之间没有间隙的过渡。我怎样才能让这个动画在条形之间进行无间隙的过渡?


绝对有可能,但在当前版本中gganimate您需要编辑数据框。

Code

g <- ggplot(df, aes(x = name, y = c, fill = score, group = score)) +
    geom_col(position = "identity", width = 0.8) +
    coord_flip() +
    labs(title = "{closest_state}") +
    geom_label(aes(y = c, label = percentage2)) +
    scale_fill_manual(values = c("darkgreen", "lightgreen", "yellow", "red"), 
                      guide= guide_legend(reverse = TRUE), drop = FALSE) +
    transition_states(groups, transition_length = 2, state_length = 1)
animate(g, nframes = 100)

Data

df$c <- ave(df$percentage, df$group, FUN=cumsum)
df <- df[order(df$groups, df$score, df$c), ]

df
       name  groups score percentage percentage2      label         c
10 variable group 1     4   40.00000         40% 0.80000000 100.00000
9  variable group 1     3   20.00000         20% 0.50000000  60.00000
8  variable group 1     2   40.00000         40% 0.20000000  40.00000
7  variable group 2     4   42.85714       42.9% 0.78571429 100.00000
6  variable group 2     3   40.00000         40% 0.37142857  57.14286
5  variable group 2     2   17.14286       17.1% 0.08571429  17.14286
4  variable group 3     4   16.00000         16% 0.92000000 100.00000
3  variable group 3     3   38.00000         38% 0.65000000  84.00000
2  variable group 3     2   38.00000         38% 0.27000000  46.00000
1  variable group 3     1    8.00000          8% 0.04000000   8.00000
13 variable group 4     4   30.00000         30% 0.85000000 100.00000
12 variable group 4     3   65.00000         65% 0.37500000  70.00000
11 variable group 4     2    5.00000          5% 0.02500000   5.00000

=======================

解释

Why? In gganimate版本"0.9.9.9999"动画情节将无法正确分组和堆叠(正如您正确指出的那样,这是一个错误)。这就是为什么你需要

  1. 对条形的位置进行特征设计(变量c)
  2. 按尺寸降序排列条形c(这样较大的就不会与较小的重叠)

真正有用的是:将代码分解为最基本的内容,只保留重要的内容:

g <- ggplot(df, aes(x = "", y = c, fill = score, group = score)) +
    geom_col(position = "identity") +
    labs(title = "{closest_state}") +
    transition_states(groups, transition_length = 2, state_length = 1)
    animate(g, nframes = 10)

这比原始代码更容易使用。很明显,问题出在相互作用的某个地方。y =(例如,c、百分比)、group =(例如,分数、组),以及position =(例如,堆叠、闪避、闪避2、同一性、填充)。

如果您有任何疑问,请随时给我留言。

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

如何制作堆积条形图的动画? 的相关文章

  • 在 R 中将文本文件拆分为段落文件

    我正在尝试将一个巨大的 text 文件拆分为多个 text 文件 每个文件仅包含一个段落 让我举个例子 我需要这样的文字 这是第一段 这没有任何意义 因为这只是一个例子 这是第二段 和前一段一样毫无意义 另存为两个独立的 txt 文件 其中
  • R 中有没有快速替换列值的方法?

    假设我们有一个包含数值的数据框 如下所示 Temperature Height 32 157 31 159 33 139 我想更换Height价值观与pic 00001 pic 00002等等 最终结果是 Temperature Heigh
  • 有条件地将可选组替换为 gsub

    一位用户问我如何做到这一点如何使 ggplot 图例中的选定单词变为斜体 https stackoverflow com questions 76054997 how to italicize select words in a ggplo
  • xml2 包 (R) 中的 xml_find_all 函数未找到相关节点

    我使用 R 中的 xml2 包来访问 xml 数据 发现它在不同的 xml documents 上表现不同 在这个宠物的例子中 library xml2 doc lt read xml
  • 使用 Rcpp 得出斐波那契数列的意外结果

    我刚刚开始使用Rcpp很抱歉 如果我错过了一个简单的步骤或类似的东西 我已经尝试过这个 sourceCpp library Rcpp sourceCpp code include
  • R中不同级别的李克特分组

    我想使用 Likert 包 并按变量分组并绘制结果 问题是我想要可视化的变量有不同的级别 有没有解决的办法 一个简单的例子来说明我的问题 library reshape library likert foo lt data frame ca
  • 在knitr中打印漂亮的交叉表

    我想要的是使用 R Markdown 和 knit 从 RStudio 打印漂亮的交叉表 无论是在 pdf 文件中 还是在 html 文件中 我怀疑我错过了一些非常明显的东西 因为我不敢相信这是如此困难 我使用 xtabs 或 ftable
  • 为什么安装的“igraph”包在加载后返回“libicui18n.so.58:无法打开共享对象文件”?

    我试图使用命令 install packages igraph 在 R 中安装 igraph 包 安装后 在测试阶段出现以下错误 测试是否可以加载已安装的包错误 包或命名空间 dyn load file DLLpath DLLpath 中的
  • 如何更改 Quarto pptx 中的字体格式

    我正在 R 中使用 Quarto 创建 pptx 要更改我尝试更改的默认字体格式mainfont范围 但是当我渲染它时 最终的 pptx 文件具有默认字体 Calibri 这是我的文件 YAML 将 Quarto 文件渲染为 pptx 时如
  • 在多面图中用 N 注释 x 轴

    我正在尝试生成一些按治疗条件和访问次数细分的数字结果的箱线图 每个框中的观察次数都放在图下方 并且也标记了访问次数 这里有一些虚假数据可以用来说明 我举了两个我尝试过但不太有效的例子 library ggplot2 library plyr
  • 如何对工作区中的元素运行循环?

    gt ls 1 A anorex 1 anorexia B byMonth C clotting 8 counts d D d AD DelayByDay delayed glm D93 15 glmout groups h housing
  • 如何获得 R 帮助?

    R 包可能有哪些可用文档 例如我尝试理解sp包裹 此外help sp 还有哪些用于搜索帮助和文档的其他功能 获取有关您知道其名称的函数的帮助 Use http www inside r org r doc utils Question或者
  • 我可以在 R 中并行读取 1 个大 CSV 文件吗? [复制]

    这个问题在这里已经有答案了 我有一个很大的 csv 文件 需要很长时间才能阅读 我可以使用 parallel 或相关的包在 R 中并行读取此内容吗 我尝试过使用 mclapply 但它不起作用 根据OP的评论 fread来自data tab
  • 当添加列较少时追加到现有 SQLite 表,而不将数据库读入 R

    是否有一些简单的方法 无论是在 SQL 端还是在 R 端 将 data frame 附加到具有更多列的现有表 缺失的列应该用 NA 填充 如果它能够优雅地处理比表 1 列数更多的表 2 那么会加分吗 library RSQLite Crea
  • 创建后修改 ggplot 对象

    有没有首选的修改方式ggplot创建后的对象 例如 我建议我的学生将 r 对象与 pdf 文件一起保存以供以后更改 library ggplot2 graph lt ggplot mtcars aes x mpg y qsec fill c
  • R中的等值线绘图问题

    编辑 我已经意识到问题的根源 我只有我有数据的县的计数信息 该信息少于我正在绘制的区域中的县数量 按理说 问题代码行在这里 mapnames lt map county plot FALSE 4 names colorsmatched lt
  • 如何使用 tidyr 将向量中字符串中的每个字符分隔到一列中

    我想将向量中的每个字符串分成列 但我做不到 library tidyr library dplyr df lt data frame x c abe bas dds eer df gt separate x c A B C sep 1 我想
  • 访问动态创建的 Shiny 模块的返回值

    我正在寻找构建一个闪亮的应用程序 它动态创建返回简单表单的模块 通过 callmodule 我有两个未解决的问题 希望得到一些指导 首先 当向用户提供多个表单 通过单击按钮 时 先前呈现的表单上的值将恢复为默认值 如何停止这种行为 以便值保
  • R 中的 huxtable 即使有选项也默认为科学记数法(scipen=999)

    我试图生成像样的桌子 并在过去的一周尝试了很多软件包 我的头在游泳 今天早上开始使用 package huxtable 并试图摆脱科学记数法 x lt mtcars 1 5 1 2 x mpg lt x mpg 10000000 get s
  • 如何在RcppParallel中调用用户定义的函数?

    受到文章的启发http gallery rcpp org articles parallel distance matrix http gallery rcpp org articles parallel distance matrix 我

随机推荐

  • msbuild复制文件

    我在使用 MSbuild 复制文件时遇到问题 并且收到的错误消息似乎相互矛盾 使用 TFS 2008 进行构建 我目前的构建脚本中有以下内容
  • EL 表达式:传递 null 作为 BigDecimal 字段的值

    我有课BigDecimal财产 当我绑定到它 EL 表达式并传递 null 时 valueExpression set context null 财产的新价值变为BigDecimal ZERO 有什么方法可以将 null 传递给BigDec
  • 如何在 C# 中将视频转换为字节数组?

    我正在使用 c net 紧凑框架 3 5 我想将视频文件转换为字节数组 以便我可以将其上传到服务器上 以类似的方式 我正在进行图像上传 获得了成功的结果 HttpWebRequest request request ContentType
  • RGB 到 HSL 转换

    我正在创建一个颜色选择器工具 对于 HSL 滑块 我需要能够将 RGB 转换为 HSL 当我搜索 SO 进行转换的方法时 我发现了这个问题HSL 到 RGB 颜色转换 https stackoverflow com questions 23
  • 为什么 [][[]] 的计算结果为未定义?

    表达方式 评估为undefined在 JavaScript 中 我对此的理解是编译器看到第二组 并将其解释为数组下标运算符 因为不能让两个数组彼此相邻 所以编译器知道内部表达式 必须是一个索引 因此在评估它之后 它会将其强制为一个数字 Nu
  • 查询以查明外键是否在数据库中的其他位置被引用

    我有餐桌动物 我想返回该表中的所有内容 一列 该列表示记录是否在其他任何地方作为外键引用 I E Animal Id Name 1 Cat 2 Dog 3 Parrot 我想返回这个 AnimalId Name Referenced 1 C
  • 我可以使用Web App的私钥证书来签署JWT吗?

    我正在为 Chrome 浏览器开发推送通知服务器 在 Google Cloud Console 上 我已将我的应用程序注册为 Web 应用程序并下载了私钥证书 我可以使用此证书来签署 JWT 请求吗 可以 但出于多种目的共享私钥通常不是一个
  • 无法在 AWS Lambda 上加载文件 mysql2

    尝试让 Lambda 连接到 RDS 数据库 但无法加载 mysql2 gem 尝试过pristine说明 但这并没有解决问题 我已经在供应商目录中构建了 mysql2 gem 这是使用捆绑安装 部署 据推测 这是一个问题 因为 mysql
  • CodeIgniter:在实时服务器上找不到 404 页面

    我一直在使用 CodeIgniter 开发一个小型 Web 应用程序 在本地进行测试后 我将其放在我的网络服务器上 以允许其他人测试一些功能 导航到该网站时 我得到 404页面未找到错误页面 当在我的本地计算机上查看它时 一切都会加载并完美
  • 如何在 Google App Engine 上调试 Cron 作业?

    情况 Cron 与 Rails 应用程序一起 部署到 GCPcron yaml cron description count things regularly url api v1 cron rake task schedule every
  • AWS Cloudfront 和 ELB 安全组

    有谁知道如何将您的cloudfront发行版添加到ELB的安全组入站规则中 我们为一个新站点设置了一个云前端发行版 该站点具有一组列入白名单的安全组规则 我看不到如何配置安全组以允许来自 cloudfront 发行版的请求 有任何想法吗 如
  • angular4 httpclient csrf不发送x-xsrf-token

    在 Angular 文档中 提到了 Angularhttpclient会自动发送cookie的值XSRF TOKEN在标题中X XSRF TOKEN的帖子请求 文档链接 https angular io guide http securit
  • Java 8 Stream foreach 中递增计数器

    我想增加一个counter这是一个AtomicInteger当我循环使用foreach public class ConstructorTest public static void main String args AtomicInteg
  • CodeIgniter:如何执行选择(不同字段名)MySQL 查询

    我正在尝试检索字段中所有唯一值的计数 SQL 示例 SELECT count distinct accessid FROM accesslog WHERE record 123 如何在 CodeIgniter 内部执行此类查询 我知道我可以
  • 致命 python 错误:initfsencoding:无法加载文件系统编解码器的原因可能是什么?

    我正在使用 Python 3 7 64 位 并安装CX 冻结用于将 py 转换为 exe 我使用此命令提示符将 Python 脚本转换为可执行文件 python filename build 它成功构建了可执行文件 但是当我执行 EXE 文
  • 初始化 Quartz 的最佳方法是什么?

    我不太确定初始化 Quartz 来安排 cron 作业的最佳方法是什么 我的环境是Tomcat 我有一项每天都需要触发的工作 我应该创建一个单独的 Servlet 来初始化 Quartz 并安排我的工作吗 我正在考虑创建一个 Servlet
  • Matplotlib:删除有关 matplotlib.use() 的警告

    在我使用的Python模块中matplotlib 我想确保当我通过以下方式在远程计算机上运行脚本时它也能工作ssh 所以我这样做 import matplotlib matplotlib use Agg from matplotlib ba
  • IntelliJ gradle 添加模块依赖

    使用 IntelliJ 2016 2 使用 Gradle 2 14 1 我有 2 个项目 每个项目都有自己的 build gradle 文件和单独的目录结构 myLib meant to be jarred and used by othe
  • 使用自定义 __setattr__ 和 __slots__ 进行 Python 属性查找

    我有一堂课使用 slots 并通过重写使它们几乎不可变 setattr 总是引发错误 class A slots a b x def init self a b object setattr self a a object setattr
  • 如何制作堆积条形图的动画?

    我正在尝试在四个堆叠条形图之间进行转换 输出并不完全符合我的预期 我无法确定这是否是我的代码中的错误 或者是否是我的代码中的错误gganimateR 包 这是我使用的数据框 df lt structure list name c varia