2017-02-24 51 views
2

使用这种facet_zoom被放大到不同的x轴值

DATA

df <- read.table(text = c(" 
Site measured simulated 
site1 9.1 6.8 
          site2 163.1 128.1 
          site3 126 75.9 
          site4 741.2 843 
          site5 2215.1 1937.7 
          site6 283.6 423.4 
          site7 115.6 92.5 
          site8 12.1 15.3 
          site9 13.4 15.8 
          site10 475.7 296.1 
          site11 1 1.4 
          site12 84.5 131.9 
          site13 74.1 43.9 
          site14 19.2 33.3 
          site15 74.8 41.1 
          site16 287.8 366.9"), header =T) 

及以下

library(tidyr) 
library(dplyr) 
library(ggplot2) 
library(ggforce) 
df_reorder <- transform(df, 
         Site_reorder = reorder(Site, -measured)) 
df_long <- df_reorder %>% gather("id", "value", 2:3) 


ggplot(df_long, aes(x = Site_reorder, y = value, fill = id))+ 
    geom_bar(stat = "identity", position = "dodge", width = 0.7)+ 
    scale_fill_manual(values=c("red", "black")) + 
    theme_bw()+ 
    facet_zoom(x = Site_reorder%in%c("site14", "site9", "site8", "site1", "site11"))+ 
    labs(x = "", y = " ")+ 
    theme(legend.position = c(0.90, 0.90), legend.background = element_rect(fill="transparent"), 
     legend.title = element_blank(), axis.text.x=element_text(angle=55, vjust=1, hjust=1,size = 8)) 

我想变焦成为最后的五个站点脚本( site14site9site8site1site11)。相反,它放大到前五个网站(site5site4site10site16site6

enter image description here

任何建议,如何让最后五点变焦可以理解的?

+0

不正确的答案,但尽力使x可变因素。它*可能*解决它... – ThomasP85

+0

@ ThomasP85 感谢您的时间和建议。在我原来的data.frame中,x变量是因子。但是,我仍然遇到同样的问题。 – aelwan

+0

真是耻辱 - 我想我知道问题是什么,它与你的x尺度的离散性有关。本来希望分解它会解决它,但似乎我需要更多地考虑这一点 – ThomasP85

回答

4

ggforce只能连续放大。

1 - 您可以使用as.numeric的水平转换为数值,

2 - 然后用scale_x_continous打印网站名称

ggplot(df_long, aes(x = as.numeric(Site_reorder), y = value, fill = id))+ 
    geom_bar(stat = "identity", position = "dodge", width = 0.7)+ 
    scale_fill_manual(values=c("red", "black")) + 
    theme_bw()+ 
    facet_zoom(xy = Site_reorder%in%c("site14", "site9", "site8", "site1", "site11"), horizontal=FALSE) + 
    scale_x_continuous(
    breaks = 1:length(levels(df_long$Site_reorder)), 
    label = levels(df_long$Site_reorder) 
)+ 
    labs(x = "", y = " ")+ 
    theme(legend.position = c(0.90, 0.90), legend.background = element_rect(fill="transparent"), 
     legend.title = element_blank(), axis.text.x=element_text(angle=55, vjust=1, hjust=1,size = 8)) 

enter image description here

+0

非常感谢您的时间和帮助。当它放大最后五个站点时,是否有必要使y_axis从0到100.整点不是保留原始y轴,因为这些站点的值非常低。 – aelwan

+0

@aelwan我认为'facet_zoom'的缩小参数应该做到这一点,但它看起来并没有实现:https://github.com/thomasp85/ggforce/blob/master/R/facet_zoom.R – Chris

+0

请参阅我的编辑 – HubertL