使用coord_polar()"缩放"/"缩放"

cco*_*man 9 r ggplot2 r-grid

我有一个使用geom_smooth()的极坐标图.平滑的黄土线虽然非常小,但环绕着地块的中心.我想"放大",这样你就可以更好地看到它.

使用类似的东西scale_y_continuous(limits = c(-.05,.7))会使geom_smooth环更大,但它也会改变它,因为它将使用limits = c(-.05,.7)参数限制的数据点重新计算.

对于笛卡尔图,我可以使用类似于coord_cartesian(ylim = c(-.05,.7))剪切图表而不是基础数据的东西.但是我看不到这样做coord_polar()

有任何想法吗?我认为grid.clip()在网格包中可能有一种方法可以做到这一点,但我没有太多运气.

有任何想法吗?

我的情节现在看起来像是什么,注意"更高"的红线: 目前的情节,注意较大的红线,但它的小.

我想画的是什么: 我想得到什么

当我使用scale_y_continuous()音符"更高"的蓝线时,我得到的是,它仍然没那么大. 我用<code> scale_y_continuous()</ code>得到的信息,注意蓝线现在更大,但仍然没有那么大.

Jon*_*ing 5

我还没有找到直接执行此操作的方法coord_polar,但这可以通过修改引擎盖下的ggplot_build对象来实现.

首先,这是尝试使用本答案底部提供的假数据制作类似你的情节.

library(ggplot2)
plot <- ggplot(data, aes(theta, values, color = series, group = series)) + 
  geom_smooth() + 
  scale_x_continuous(breaks = 30*-6:6, limits = c(-180,180)) +
  coord_polar(start = pi, clip = "on") # use "off" to extend plot beyond axes
plot
Run Code Online (Sandbox Code Playgroud)

这里,我的Y(或r半径)轴的范围从约-2.4到4.3. 在此输入图像描述

我们可以通过查看相关ggplot_build对象来确认这一点:

# Create ggplot_build object and look at radius range
plot_build <- ggplot_build(plot)
plot_build[["layout"]][["panel_params"]][[1]][["r.range"]]
# [1] -2.385000  4.337039
Run Code Online (Sandbox Code Playgroud)

如果我们重新定义范围r并对其进行绘制,我们就会得到您正在寻找的内容,即情节的特写.

# Here we change the 2nd element (max) of r.range from 4.337 to 1
plot_build[["layout"]][["panel_params"]][[1]][["r.range"]][2] <- 1
plot2 <- ggplot_gtable(plot_build)
plot(plot2)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

请注意,这可能不是一个完美的解决方案,因为这似乎引入了一些我不知道如何解决的图像裁剪问题.我没有测试是否可以使用ggsave或者可能通过进一步修改ggplot_build对象来克服这些问题.

上面使用的示例数据:

set.seed(4.2)
data <- data.frame(
  series = as.factor(rep(c(1:2), each = 10)),
  theta  = rep(seq(from = -170, to = 170, length.out = 10), times = 2), 
  values = rnorm(20, mean = 0, sd = 1)
)
Run Code Online (Sandbox Code Playgroud)