如何使用 gganimate 获得完整而不是部分的饼图

2024-02-07

我在制作动画饼图时遇到问题gganimate and ggplot.

我每年都想吃普通的馅饼,但我的产量完全不同。

您可以使用以下代码查看示例mtcars:

library(ggplot2)
library(gganimate)


#Some Data

df<-aggregate(mtcars$mpg, list(mtcars$cyl,mtcars$carb), sum)
colnames(df)<-c("X","Y","Z")

bp<- ggplot(df, aes(x="", y=Z, fill=X, frame=Y))+
geom_bar(width = 1, stat = "identity") + coord_polar("y", start=0)

gganimate(pie, "output.gif")

这是输出:

frame只有一个级别:


ggplot 代码创建一个堆叠条形图,其中的每一行都有一个部分df. With coord_polar这将成为一个饼图,数据框中的每一行都有一个楔形。然后当你使用gg_animate,每个帧仅包含对应于给定级别的楔块Y。这就是为什么您每次只能获得完整饼图的一部分。

相反,如果您想要每个级别的完整馅饼Y,那么一个选择是为每个级别创建一个单独的饼图Y然后将这些饼图组合成 GIF。这是一个包含一些虚假数据的示例,(我希望)与您的真实数据相似:

library(animation)

# Fake data
set.seed(40)
df = data.frame(Year = rep(2010:2015, 3), 
                disease = rep(c("Cardiovascular","Neoplasms","Others"), each=6),
                count=c(sapply(c(1,1.5,2), function(i) cumsum(c(1000*i, sample((-200*i):(200*i),5))))))

saveGIF({
  for (i in unique(df$Year)) {
    p = ggplot(df[df$Year==i,], aes(x="", y=count, fill=disease, frame=Year))+
      geom_bar(width = 1, stat = "identity") + 
      facet_grid(~Year) +
      coord_polar("y", start=0) 
    print(p)
  }
}, movie.name="test1.gif")

上面 GIF 中的饼图大小相同。但您也可以根据总和来更改饼图的大小count对于每个级别Year(代码改编自这个答案 https://stackoverflow.com/a/27771019/496488):

library(dplyr)

df = df %>% group_by(Year) %>% 
  mutate(cp1 = c(0, head(cumsum(count), -1)),
         cp2 = cumsum(count))

saveGIF({
  for (i in unique(df$Year)) {
    p = ggplot(df %>% filter(Year==i), aes(fill=disease)) +
      geom_rect(aes(xmin=0, xmax=max(cp2), ymin=cp1, ymax=cp2)) + 
      facet_grid(~Year) +
      coord_polar("y", start=0) +
      scale_x_continuous(limits=c(0,max(df$cp2)))
    print(p)
  }
}, movie.name="test2.gif")

如果我可以编辑一下,虽然动画很酷(但饼图不酷,所以也许动画一堆饼图只会雪上加霜),但使用简单的旧静态线图可能会更容易理解数据。例如:

ggplot(df, aes(x=Year, y=count, colour=disease)) +
  geom_line() + geom_point() +
  scale_y_continuous(limits=c(0, max(df$count)))

或者也许是这样的:

ggplot(df, aes(x=Year, y=count, colour=disease)) +
  geom_line() + geom_point(show.legend=FALSE) +
  geom_line(data=df %>% group_by(Year) %>% mutate(count=sum(count)), 
            aes(x=Year, y=count, colour="All"), lwd=1) +
  scale_y_continuous(limits=c(0, df %>% group_by(Year) %>% 
                                summarise(count=sum(count)) %>% max(.$count))) +
  scale_colour_manual(values=c("black", hcl(seq(15,275,length=4)[1:3],100,65)))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 gganimate 获得完整而不是部分的饼图 的相关文章

  • 如何生成向量的所有组合[重复]

    这个问题在这里已经有答案了 假设我有 3 个绿球 2 个橙球和 8 个黄球 我想订购它们 鉴于所有相同颜色的球都是相同的 如何生成所有可能的序列 在 R 中 使用gregmisc 我可以 balls lt c orange orange g
  • Android:使用 ObjectAnimator 平移具有视图尺寸小数值的视图

    看来旧的视图动画 translate scale等 不再被接受AnimationInflater 至少截至 ICS 而言 我在 4 0 4 中阅读了它的代码 它明确只需要 XML 元素set objectAnimator animator
  • 将 JSON URL 转换为 R 数据帧

    我在将 JSON 文件 从 API 转换为 R 中的数据帧时遇到问题 例如 URL 我尝试了 S O 的一些不同建议 包括将json数据转换为R中的数据框 https stackoverflow com questions 28683769
  • R-了解 akima::interp 结果中的 NA 值

    我有以下数据框 ref dat k Intensity Slope 1 0 021467214 33 16 2 0 012444759 33 8 3 0 006079156 33 4 4 0 003792025 33 2 5 0 02276
  • 如何让R使用所有处理器?

    我有一台运行 Windows XP 的四核笔记本电脑 但查看任务管理器 R 似乎一次只使用一个处理器 如何让 R 使用全部四个处理器并加速我的 R 程序 我有一个基本系统 我使用它在 for 循环上并行化我的程序 一旦您了解需要做什么 此方
  • 如何使用 R 中带引号的字符值内的序列读取 CSV?

    这是一个包含两个字符列的 CSV 文件 key value a 所有字符值都用双引号引起来 并且有一个顺序 在值之一内 转义引号加分隔符 我无法通过 read csv readr 中的 read csv 或 data table 中的 fr
  • 在函数内部调用 clusterApply 时,性能会下降

    我遇到了一个奇怪的问题clusterApply 我已经能够尽可能地隔离它 如下所示 首先 我从全局环境运行以下代码 require parallel cl lt makeCluster rep localhost 20 SOCK xl lt
  • dplyr,do(),从模型中提取参数而不丢失分组变量

    R 帮助中关于 do 的示例略有不同 by cyl lt group by mtcars cyl models lt by cyl gt do mod lm mpg disp data coefficients lt models gt d
  • 查找数据帧列表中同一列中的所有重复值并将其转换为 NULL

    我有一个清单BELGIAN COAST list包含数百个数据帧 df1 df2 15 列 X 1000 行 每个数据帧的最后一列称为Chemicals并包含一些字符 例如Sulfate or Ammonia 但是这一列有很多行Chemic
  • 在 R 中绘制对数正态概率密度

    我正在尝试在 R 中生成对数正态概率密度图 其中包含 3 个不同的均值对数和标准差对数 我尝试了以下方法 但我的图表太丑了 看起来一点也不好看 x lt seq 0 10 length 100 a lt dlnorm x meanlog 0
  • 从 R 环境中删除对象

    我正在阅读 Hadley 的 Advanced R 在第 8 章中 他说我们可以使用以下方法从环境中删除对象 rm 但是 移除该物体后我仍然可以看到该物体 这是我的代码 e lt new env e a lt 1 e b lt 2 e a
  • 从 R 中的 HTTPS 连接逐行读取

    当创建连接时open r 它允许逐行读取 这对于批量处理大数据流非常有用 例如这个脚本 https gist github com jeroenooms d33a24958d99bb969ac0通过一次读取 100 行来解析相当大的 gzi
  • 如何更改 Shiny 中 navbarPage 折叠的断点

    我想用shiny navbarPage collapsible TRUE 当在小屏幕上查看我的 Shiny 应用程序时 将导航元素折叠到菜单中 默认情况下 当浏览器宽度小于 940 像素时会触发折叠 有什么方法可以改变这一点 以便在稍大的浏
  • 仅保留百分比的尾随零

    给出以下示例 library pander tableAbs lt Titanic 1 1 tablePct lt round prop table tableAbs 100 2 table lt cbind tableAbs tableP
  • glmnet 未从 cv.glmnet 收敛 lambda.min

    我跑了20倍cv glmnet套索模型以获得 lambda 的 最佳 值 但是 当我尝试重现结果时glmnet 我收到一个错误 内容如下 Warning messages 1 from glmnet Fortran code error c
  • 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 中的 5 维图

    我正在尝试在 R 中绘制 5 维图 我目前正在使用rgl包以 4 个维度绘制数据 使用 3 个变量作为 x y z 坐标 另一个变量作为颜色 我想知道是否可以使用这个包添加第五个变量 例如空间中点的大小或形状 这是我的数据和当前代码的示例
  • 如何计算嵌套函数中的粘合表达式?

    我正在尝试嵌套一个函数 该函数将两个字符串粘合在一起 该函数使用组合字符串来命名数据帧的列 然而 问题似乎是粘合表达式没有足够早地评估为字符串 我可以 并且应该 强制在将表达式作为参数传递给另一个函数之前对其进行求值吗 library ti
  • GGPLOT2:如何在 ggplot() 脚本中绘制特定选择

    这是一个名为的大型数据集的峰值P 其中有 10 个优惠 CS 有不同的商店 SHP 具有多个数值 数据集列出了按周排序的它们 WK 2 tm 52 它创建一个大文件 仅前 6 行出现峰值 WK MND CS SHP RevCY RevLY
  • 如何将 ggrough 图表另存为 .png

    说我正在使用R包裹ggrough https xvrdm github io ggrough https xvrdm github io ggrough 我有这个代码 取自该网页 library ggplot2 library ggroug

随机推荐

  • mysql 5.7 日志慢查询错误

    我试图在 mysql 5 7 上启用慢查询日志记录并收到此错误 2016 04 27T14 55 51 934612Z 0 错误 未知变量 log slow queries var log mysql query log 2016 04 2
  • 谷歌地图删除所有标记,然后创建新的

    我正在创建一个地图 默认情况下加载地址并显示标记并在搜索框中放置地址 效果很好 但我需要添加单击事件 该事件将首先删除所有标记 然后放置标记 到目前为止 我正在开发满足我需要的所有脚本 但是 当用户单击地图时 搜索框会获取地点地址 但旧标记
  • 为什么这两个代码变体会产生不同的浮点结果?

    给出这个示例 C 代码片段 void floatSurprise these come from some sort of calculation int a 18680 b 3323524 c 121 float m float a c
  • 在R中使用geom_line时显示不正确

    给定一个数据框如下 v1 v2 v3 v4 Tom A Jim B Gary A Shirly A Shirly B Jack B Tom A Jack B v2和v4分别表示v1和v3中的名称属于哪个组 汤姆属于 A 组 吉姆属于 v4
  • 如何检查 JTabbedPane 中的选项卡是否处于活动状态?

    如何检查 JTabbedPane 实例中的选项卡是否处于活动状态 在选项卡 嵌套类 本身的类中而不是在封闭类中 我知道有一个方法booloean isEnabledAt int index 但该方法只能在封闭类中调用 而我想检查当前是否在选
  • 如何进行多线程复制文件

    我想将多个文件复制到一个文件中 但是使用多线程 假设文件A是不同线程复制数据的文件 在这种情况下 每个线程都意味着复制文件A中的一个文件 使用以下过程 procedure ConcatenateFiles const InFileNames
  • 曲面算术/四叉树

    我不久前做了一个使用四叉树进行路径查找的项目 我想提高它的性能 似乎使用 tesseral 算术来确定节点邻接 根据这一页 http www geog ubc ca courses klink gis notes ncgia u37 htm
  • 使用动态转储 ComObject 对象?

    我正在尝试 不幸的是 为我在 Office 类型库中访问的对象实现 对象转储器 这一定是可能的 因为 VS 的调试窗口有一个针对 System ComObject 对象的 动态视图 它可以有效地执行我想要的操作 有任何想法吗 我还创建了一个
  • 如何使小部件填充列中的剩余空间

    在Android中 我们可以执行以下操作来制作ImageView根据物体的大小 填充尽可能多的空间TextView
  • Perl 的 XSLT2.0 处理器?

    是否有适用于 Perl 的强大 XSLT2 0 处理器 我刚刚尝试了 XML LibXSLT 它不支持分析字符串 正则表达式等 我害怕在我的工作中使用 XML Saxon XSLT2 因为它使用 Java 我不想添加添加到我的依赖项列表中
  • 将字符串直接拆分为变量

    我想知道标准 JS 是否提供了一种在初始声明期间将字符串直接拆分为一组变量的方法 例如在 Perl 中我会使用 my a b c split str 在 Firefox 中我可以写 var a b c str split 但此语法不是 EC
  • 如何在oozie作业中指定多个libpath?

    我的 oozie 工作使用 2 个 jarx jar and y jar以下是我的 job properties 文件 oozie libpath lib oozie use system libpath true 当两个 jar 都位于
  • 如何将输入图像提供给经过训练的模型?预期 input_1 有 4 个维度,但得到的数组形状为 (224, 224, 3)

    import tensorflow as tf from tensorflow import keras from keras models import load model from keras preprocessing import
  • 如何使用 Inno Setup 更改可执行文件权限?

    我通过 InnoIDE 中的向导创建了一个非常简单的 inno 脚本 但是 普通用户可以运行部署的可执行文件 如何强制用户必须通过脚本以管理员身份运行它 Setup AppId 03E6645E 2C53 4E90 967B D0833A8
  • std::string size() 是 O(1) 操作吗?

    std string size 是 O 1 操作吗 我使用的STL实现是VC 中内置的 如果您问 MSVC 的 string size 实现是否具有恒定的复杂性 那么答案是肯定的 但唐 韦克菲尔德 https stackoverflow c
  • Java - 父类正在调用子类的方法?

    抱歉 我对编码还很陌生 可能还没有掌握所有术语 希望您仍然能理解我的问题 我想要得到的输出是 Cost for Parent is 77 77 Cost for Child is 33 33 但是 我得到了这个 Cost for Paren
  • Angular - Prod Build 不生成唯一的哈希值

    Angular 生产构建不会在我的项目中生成唯一的哈希值 以下是构建日志截图 无法在新的 Angular cli 项目中重现此问题 似乎我的项目中存在一些问题 我正在使用角度 6 0 3 下面是 angular json schema no
  • Office 365 Rest API 读取“回复”字段

    我正在使用此处记录的其余 APIhttps msdn microsoft com office office365 APi mail rest operations https msdn microsoft com office offic
  • ARM GCC 生成函数序言

    我提到 ARM 工具链可以生成不同的函数序言 实际上 我看到两个 obj 文件 vmlinux 具有完全不同的函数序言 第一种情况如下所示 push some registers maybe fp lr lr ommited in leaf
  • 如何使用 gganimate 获得完整而不是部分的饼图

    我在制作动画饼图时遇到问题gganimate and ggplot 我每年都想吃普通的馅饼 但我的产量完全不同 您可以使用以下代码查看示例mtcars library ggplot2 library gganimate Some Data