2017-02-24 17 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