facet_zoom无法更改缩放图的中断

时间:2018-11-19 10:42:03

标签: r ggplot2 ggforce

我目前有一个绘图,并使用facet_zoom专注于x轴上0到10之间的记录。以下代码重现了一个示例:

require(ggplot2)
require(ggforce)
require(dplyr)
x <- rnorm(10000, 50, 25)
y <- rexp(10000)
data <- data.frame(x, y)

ggplot(data, aes(x = x, y = y)) +
  geom_point() +
  facet_zoom(x = dplyr::between(x, 0, 10))

我想将图表的缩放部分上的中断更改为与以下内容等效:

ggplot(data, aes(x = x, y = y)) +
  geom_point() +
  facet_zoom(x = dplyr::between(x, 0, 10)) +
  scale_x_continuous(breaks = seq(0,10,2))

但是,这也改变了原始情节的休息时间。可以仅在原始图保留为默认值的情况下更改缩放部分的中断吗?

1 个答案:

答案 0 :(得分:0)

这适用于您的用例:

ggplot(data, aes(x = x, y = y)) +
  geom_point() +
  facet_zoom(x = between(x, 0, 10)) +
  scale_x_continuous(breaks = pretty)

plot

?scale_x_continuous中,breaks将接受以下内容(强调):

  

其中之一:

     
      
  • NULL不间断
  •   
  • waiver()获取转换对象计算出的默认中断
  •   
  • 位置的数字向量
  •   
  • 一个函数,该函数以限制作为输入,并返回中断作为输出
  •   

pretty()是这样的功能之一。它没有提供很好的控制,但是确实允许您有一些余地来指定跨度不同,比例不同的断面。

为说明起见,这是两个示例,它们的中断次数不同。有关此函数接受的其他参数的更多详细信息,请参见?pretty

p <- ggplot(data, aes(x = x, y = y)) +
  geom_point() +
  facet_zoom(x = between(x, 0, 10))

cowplot::plot_grid(
  p + scale_x_continuous(breaks = function(x) pretty(x, n = 3)),
  p + scale_x_continuous(breaks = function(x) pretty(x, n = 10)),
  labels = c("n = 3", "n = 10"),
  nrow = 1
)

more examples

当然,您还可以定义自己的函数,以将绘图限制转换为所需的中断(例如类似p + scale_x_continuous(breaks = function(x) seq(min(x), max(x), length.out = 5))的东西),但是我通常发现这些函数需要更多的调整才能正确完成,&{{1} }通常足够好。