我有一个使用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()在网格包中可能有一种方法可以做到这一点,但我没有太多运气.
有任何想法吗?
我还没有找到直接执行此操作的方法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)
我们可以通过查看相关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)
| 归档时间: |
|
| 查看次数: |
648 次 |
| 最近记录: |