我想放大这些年来的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每一帧的比例?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) 我想绘制一个矩形注释,它将跨越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对象,这就是为什么我要避免任何复杂的网格东西,直到这一点.
我正在使用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)
在一个单独的pdf中输出6页的最简单方法是什么?
我知道这可以用reports和pdftools包完成,但我想知道是否有更直接的方法来实现这一点.我希望ggforce能够为输出提供单页的功能,但看起来情况并非如此?
我想绘制 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 …
如何使用两个不同大小的半圆(或其他形状,如三角形等)制作这样的图?
我已经研究了几个选项:另一个帖子建议使用一些unicode符号,这对我不起作用.如果我使用矢量图像,如何正确调整尺寸参数,使2个圆圈相互接触?
样本数据(我想使两个半圆的大小等于circle1size和circle2size):
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值,编码第三维,就像这样?

任何建议都非常感谢.
使用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,但似乎都不起作用。我也尝试过将它们定义为字符并以不同顺序排序,但这似乎也不起作用。
任何帮助,将不胜感激。
我正在尝试放大绘图中的多个部分。
我知道facet_zoom我可以放大情节的一部分。例如:
ggplot(iris, aes(Petal.Length, Petal.Width, colour = Species)) +
geom_point() +
facet_zoom(x = Species == "versicolor")
Run Code Online (Sandbox Code Playgroud)

但是,我想在同一图中放大 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::facet_wrap或facet_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) 几周前我发现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)