在stat_density图中使用facet_zoom

时间:2019-11-02 09:19:26

标签: r ggplot2 ggforce

我想使用facet_zoom,但由于某些原因,缩放区域为空。

我使用的两个数据集只是从一个修正的多项式分布生成的1.000.000数字的数值向量。我要显示在缩放区域中的一个小尖峰。

prova <-readRDS("probcond1.rds")
prova1 <-readRDS("probpoly.rds")
dfGamma <-data.frame(prova)

ggplot(dfGamma, aes(x=prova)) + stat_density(aes(y=..count..), color="black", fill="blue", alpha=0.3)

g <- ggplot(dfGamma, aes(x=prova)) +
  stat_density(aes(y=..count..), color="black", fill="blue", alpha=0.3) +
  scale_x_continuous(breaks=c(0,1,2,3,4,5,10,30,100,300,1000,4000,5000), trans="log1p", expand=c(0,0)) +
  theme_bw()

g+expand_limits(x = c(1, 6000)) +facet_zoom(xlim = c(4000,5000))

我真的很陌生。对不起,我很无知

1 个答案:

答案 0 :(得分:2)

您的axis的比例为log1p,因此您的xlim应该包裹在log1p内以进行缩放。您可以执行以下操作:

g+expand_limits(x = c(1, 6000)) +facet_zoom(xlim = c(log1p(4000),log1p(5000)))

以下是使用mtcars数据集的示例。

library(ggplot2)
library(ggforce)

g <- ggplot(mtcars, aes(x=hp)) +
  stat_density(aes(y=..count..), color="black", fill="blue", alpha=0.3) +
  scale_x_continuous(breaks=c(0,1,2,3,4,5,10,30,100,300), trans="log1p", expand=c(0,0)) +
  theme_bw()

如果您按以下方式使用facet_zoom(xlim = c(100,300)),则会产生空的缩放输出(g的x轴上不存在100和300的平坦值):

g+expand_limits(x = c(1, 300)) +facet_zoom(xlim = c(100,300))

Output-1(固定值缩放)

zoom_empty

如果使用xlim变换log1p,则可以放大图x-axis的{​​{1}}的相应值。您可以按照以下步骤进行操作:

g

输出2(log1p缩放)

zoom_proper

如果要在轴上独立g+expand_limits(x = c(1, 300)) +facet_zoom(xlim = c(log1p(100),log1p(300))) ,则可以执行以下操作:

zoom

输出

zoom_xy_indpt

如您所见,我确实在g+expand_limits(x = c(1, 300)) +facet_zoom(xlim = c(log1p(100),log1p(300)), ylim = c(5,10), split = TRUE) ylim之间缩放5,而10使缩放独立,并且您可以拥有缩放轴的多个视图或如果只需要一个视图,则可以将split = TRUE保留为其默认值split。手册中有很多信息可能需要您参考,以防万一Package ‘ggforce’

希望有帮助。