标签: ggforce

通过gganimate和ggforce移动的facet缩放的动画情节?

在此输入图像描述

目标

我想放大这些年来的GDP Europe.幻象ggforce::facet_zoom允许非常容易地将其用于静态图(即,特定年份).

然而,移动尺度证明比预期更难.gganimate似乎从第一帧(year == 1952)获取x轴限制并一直持续到动画结束.不幸的是,这个相关但代码过时的问题没有得出答案.既不能+ coord_cartesian(xlim = c(from, to)),也facet_zoom(xlim = c(from, to))不能影响facet_zoom超出静态极限的窗口.

  • 有没有办法让gganimate'重新计算' facet_zoom每一帧的比例?

理想的结果

第一帧

2

最后一帧

3

目前的代码
library(gapminder)
library(ggplot2)
library(gganimate)
library(ggforce)
p <- ggplot(gapminder, aes(gdpPercap, lifeExp, size = pop, color = continent)) +
    geom_point() + scale_x_log10() +
    facet_zoom(x = continent == "Europe") +
    labs(title = "{frame_time}") +
    transition_time(year) 

animate(p, nframes = 30)
Run Code Online (Sandbox Code Playgroud)

r ggplot2 gganimate ggforce

17
推荐指数
1
解决办法
950
查看次数

ggplot2添加跨越facet边缘的注释

我想绘制一个矩形注释,它将跨越ggplot中的facet边框.

library(ggplot2)
myPlot <- ggplot(mpg, aes(displ, hwy)) + 
    geom_point() + 
    facet_grid(class ~ .)

# add annotation
myPlot +
  annotate("rect", xmin = 3, xmax = 4, ymin = -Inf, ymax = Inf, fill = "green", alpha = 1/5)
Run Code Online (Sandbox Code Playgroud)

到目前为止我所拥有的:

到目前为止我有什么

我想绘制一个横跨小平面边缘的大矩形,如下所示:

凌乱的油漆编辑我想要的东西

有没有办法用内置ggplot2代码执行此操作或使用ggforce或者我必须搞乱grid?我理想的用例仍然允许我myPlot作为一个ggplot对象,这就是为什么我要避免任何复杂的网格东西,直到这一点.

r ggplot2 ggforce

8
推荐指数
1
解决办法
248
查看次数

如何只在一个pdf中保存ggforce :: facet_grid_paginate的输出?

我正在使用ggforce包在几个页面上生成刻面图:

library(ggforce) 

for(i in 1:6){
  ggplot(diamonds) +
    geom_point(aes(carat, price), alpha = 0.1) +
    facet_wrap_paginate(~cut:clarity, ncol = 2, nrow = 2, page = i)

  ggsave(paste0("~/diamonds_", i, ".pdf"))
}
Run Code Online (Sandbox Code Playgroud)

这是生成预期的6个PDF文件:
在此输入图像描述

一个单独的pdf中输出6页的最简单方法是什么?

我知道这可以用reportspdftools包完成,但我想知道是否有更直接的方法来实现这一点.我希望ggforce能够为输出提供单页的功能,但看起来情况并非如此?

pdf pdf-generation r ggplot2 ggforce

7
推荐指数
2
解决办法
1612
查看次数

如何从 facet_zoom() 更改缩放区域的位置?

使用 ggforce 包中的 facet_zoom() 可以创建漂亮的缩放以突出显示绘图的某些区域。不幸的是,当放大 y 轴时,原始图总是在右侧。

有没有办法将原始情节放在左侧?

首先查看主图然后查看缩放区域会感觉更直观。例如,我想交换此图中两个方面的位置: 在此处输入图片说明

(没有添加可重现的示例,因为我相信这是关于某个功能是否存在的问题。)

r ggplot2 ggforce

7
推荐指数
1
解决办法
2429
查看次数

如何自动递归地绘制 3 个不同的正多边形?

我想绘制 3 个正多边形 - 正方形(4 条边)、六边形(6 条边)和十二边形(12 条边),其方式与下图类似:

在此输入图像描述

到目前为止,我一直在对ggforce包进行硬编码以实现我的目标:

library(ggplot2)
library(ggforce)

df = data.frame(name = c("dodecagon", "square", "hexagon"),
                x0 = c(0.5, 0.5, 0.63),
                y0 = c(0.5, 0.745, 0.74),
                sides = c(12, 4, 6),
                angle = c(0, 0, -0.5),
                r = c(0.2, 0.07, 0.09))

ggplot(data = df) +
        geom_regon(aes(x0 = x0, y0 = y0, sides = sides, angle = angle, r = r, fill = name)) +
        coord_fixed(xlim = c(0, 1), ylim = c(0, 1))
Run Code Online (Sandbox Code Playgroud)

其产生:

在此输入图像描述

正如您所看到的,多边形没有很好地对齐,并且需要非常长的时间才能真正实现我想要实现的目标。

本质上,我想要一个函数,它以十二边形(12 边多边形)的数量作为参数,并在十二边形周围绘制正方形(4 …

r polygon ggplot2 ggforce

7
推荐指数
1
解决办法
138
查看次数

如何在r中的ggplot中绘制两个半圆

如何使用两个不同大小的半圆(或其他形状,如三角形等)制作这样的图?

在此输入图像描述

我已经研究了几个选项:另一个帖子建议使用一些unicode符号,这对我不起作用.如果我使用矢量图像,如何正确调整尺寸参数,使2个圆圈相互接触?

样本数据(我想使两个半圆的大小等于circle1sizecircle2size):

df = data.frame(circle1size = c(1, 3, 2),
                circle2size = c(3, 6, 5),
                middlepointposition = c(1, 2, 3))
Run Code Online (Sandbox Code Playgroud)

最终有没有办法将半圆定位在不同的y值,编码第三维,就像这样? 在此输入图像描述

任何建议都非常感谢.

r ggplot2 ggforce

6
推荐指数
2
解决办法
880
查看次数

在ggforce :: geom_parallel_sets上排列y轴

使用ggforce软件包的开发版,我可以如下创建Sankey图(来自文档)

data <- reshape2::melt(Titanic)
data <- gather_set_data(data, 1:4)

ggplot(data, aes(x, id = id, split = y, value = value)) +
  geom_parallel_sets(aes(fill = Sex), alpha = 0.3, axis.width = 0.1) +
  geom_parallel_sets_axes(axis.width = 0.1) +
  geom_parallel_sets_labels(colour = 'white')
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

我正在努力使y轴变量以默认方式以外的任何其他方式排序,默认方式似乎是反向字母。例如,更改图,使其显示在图Adult的顶部附近,Child下方。

我尝试过在应用之前重新调整因子gather_set_data,以及y在应用之后重新调整变量gather_set_data,但似乎都不起作用。我也尝试过将它们定义为字符并以不同顺序排序,但这似乎也不起作用。

任何帮助,将不胜感激。

r ggplot2 ggforce

6
推荐指数
1
解决办法
723
查看次数

facet_zoom 具有多个缩放范围

我正在尝试放大绘图中的多个部分。

我知道facet_zoom我可以放大情节的一部分。例如:

ggplot(iris, aes(Petal.Length, Petal.Width, colour = Species)) +
  geom_point() +
  facet_zoom(x = Species == "versicolor")
Run Code Online (Sandbox Code Playgroud)

facet_zoom 1 个区域

但是,我想在同一图中放大 1 个以上的区域。这可能吗?

我试过:

ggplot(iris, aes(Petal.Length, Petal.Width, colour = Species)) +
  geom_point() +
  facet_zoom(x = Species == "setosa"|Species == "virginica")
Run Code Online (Sandbox Code Playgroud)

但这不起作用,因为选择包括整个范围。

在此处输入图片说明

在这个简单的例子中,我理想情况下会为两个不同的物种分别绘制两个缩放图。

ggplot2 ggforce

6
推荐指数
1
解决办法
213
查看次数

带有嵌套 `ggforce::facet_zoom` 的 Facet wrap 图

我想使用ggplot2::facet_wrapfacet_grid使用使用ggforce::facet_zoom.

我也很乐意以与 类似的方式将它们排列起来facet_grid,最好使用条形文本标签,但也不太明白如何让它起作用。

例如一个分面图

library(ggplot2)
library(ggforce)
library(dplyr)

p1 <- ggplot(mtcars) +
  geom_boxplot(
    aes(
      x = factor(gear),
      y = mpg,
      fill = factor(gear)
    )
  ) +
  facet_wrap(
    facets = ~cyl,
    nrow = 2,
    scales = "free_y"
  )

p1
Run Code Online (Sandbox Code Playgroud)

但是每个方面都应该是这样的(这是上面的第一个方面):


zoomlims <- data.frame(
  cyl = c(4, 6, 8),
  lower = c(27, 18, 13),
  upper =c(32, 21, 17)
)

p2a <- ggplot(mtcars %>% filter(cyl == 4)) +
  geom_boxplot(
    aes(
      x = factor(gear),
      y = mpg, …
Run Code Online (Sandbox Code Playgroud)

r ggplot2 ggforce

6
推荐指数
1
解决办法
542
查看次数

使用 ggplot 在对数图中绘制椭圆

几周前我发现ggforce,它有一个很好的绘制椭圆的功能。但我无法在日志图中使用它。下面是一个例子:

我想用椭圆圈出这个组

library(ggforce)
library(ggplot2)

ggplot(mtcars)+
  geom_point(aes(hp,disp))+
  geom_ellipse(aes(x0 = 230, y0 = 450, a = 80, b = 30, angle = -10))
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

但我想在对数图中这样做。如果我天真地做

ggplot(mtcars)+
  geom_point(aes(hp,disp))+
  geom_ellipse(aes(x0 = 230, y0 = 450, a = 80, b = 30, angle = -10))+
  scale_y_log10()
Run Code Online (Sandbox Code Playgroud)

我得到一个巨大的椭圆:

在此处输入图片说明

看起来椭圆参数没有对数转换。我可以尝试减少参数轴以获得对数轴上的合适大小,例如:

ggplot(mtcars)+
  geom_point(aes(hp,disp))+
  scale_y_log10()+
  geom_ellipse(aes(x0 = 230, y0 = 450, a = 80, b = 0.05, angle =0))
Run Code Online (Sandbox Code Playgroud)

哪个有效:

在此处输入图片说明

但只有当角度为0时,如果不是,两个wxis是混合的,我无法得到我想要的椭圆:

ggplot(mtcars)+
  geom_point(aes(hp,disp))+
  scale_y_log10()+
  geom_ellipse(aes(x0 = 230, y0 = 450, a = 80, b = 0.05, angle = …
Run Code Online (Sandbox Code Playgroud)

r data-visualization ggplot2 ggforce

5
推荐指数
1
解决办法
209
查看次数