2016-02-24 142 views
2

我試圖對齊或合併地圖和盒圖,兩者都以緯度爲y軸。我已經找到了許多方法來對齊地塊,但是好像有一個地圖涉及複雜的事情。我想讓這兩個地塊無縫對齊,左邊的地圖和右邊的箱子地圖。如何對齊地圖圖和共享y軸的盒圖

下面是兩個地塊示例代碼:

library(ggplot2) 
library(maps) 
library(gridExtra) 

##Plot base map 
s_map <- map_data('state',region=c('south carolina','georgia','florida')) 
p <- ggplot() + coord_fixed() 
base_world <- p+geom_polygon(data=s_map, aes(x=long, y=lat, group=group), color="white", fill="grey72") 

yscale <- c(24:34) 

map1 <- base_world + 
    coord_map(xlim = c(-83, -79.5),ylim = c(25, 34)) + 
    xlab("") + 
    ylab("Latitude") + 
    scale_y_discrete(labels=yscale) 

##plot boxplot (seasonal movements of an animal) 
df <- data.frame("month"=month.abb, 
        "min"=c(26,26,26,28,28,29,29,29,28,28,26,26), 
        "lci"=c(27,27,27,29,29,30,30,30,29,29,27,27), 
        "med"=c(28,28,28,29,29,31,31,31,29,29,28,28), 
        "uci"=c(29,29,29,30,30,32,32,32,30,30,29,29), 
        "max"=c(30,30,30,31,31,33,33,33,31,31,30,30), 
        "order"=c(1:12)) 

boxplot1 <- ggplot(df, aes(x=factor(order), ymin = min, lower = lci, middle = med, upper = uci, ymax = max)) + 
    geom_boxplot(stat = "identity") + 
    ggtitle("Latitude by Month") + 
    xlab("Month") + 
    ylab("Latitude") + 
    ylim(24,33) 

    grid.arrange(map1,boxplot1,ncol=2) 

如何強制y軸和情節的高度是一樣的,與網格對齊?

提前感謝您對此的想法 - 我仍然很新與R.

編輯: 我可能已經嘗試過的代碼,我發現了十幾個片段,並沒有什麼似乎有效可言,所以我不認爲列出它們會有所幫助。我主要是找一個真正的地方開始。

這裏有一個例子,我發現強迫情節的高度是一樣的,但它似乎並沒有做任何事情:

# build the plots 
    map2 <- ggplot_gtable(ggplot_build(map1)) 
    boxplot2 <- ggplot_gtable(ggplot_build(boxplot1)) 

# copy the plot height from p1 to p2 
boxplot2$heights <- map2 

grid.arrange(map2,boxplot2,ncol=2,widths=c(1,5)) 
+1

,如果你在一個時間,因爲你可以接受最多一個答案問一個問題本網站效果最好。同時也很高興展示任何嘗試完成任務並準確描述卡住的位置。堆棧溢出不是代碼寫入服務。 – MrFlick

回答

1

這可能會爲你工作,我改變了三兩件事:

  • 添加ggtitle("")到地圖
  • 添加theme(plot.margin())到兩個地塊改變周圍的地塊的空間(可以用數值玩)
  • 以創造同一軸線上規模作爲地圖

List item

map1 <- base_world + 
    coord_map(xlim = c(-83, -79.5),ylim = c(25, 34)) + 
    xlab("") + 
    ylab("Latitude") + 
    scale_y_discrete(labels=yscale) + 
    ggtitle("") + 
    theme(plot.margin=unit(c(0.5,-1.5,0.5,-8), "cm")) 

boxplot1 <- ggplot(df, aes(x=factor(order), ymin = min, lower = lci, middle = med, upper = uci, ymax = max)) + 
    geom_boxplot(stat = "identity") + 
    ggtitle("Latitude by Month") + 
    xlab("Month") + 
    ylab("Latitude") + 
    scale_y_continuous(limits=c(24,33), breaks=seq(24,33,by=1), expand=c(0,0)) + 
    labs(y=NULL) + 
    theme(plot.margin=unit(c(0.5,0.5,0.5,-6), "cm")) 

grid.arrange(map1,boxplot1,ncol=2) 
添加 scale_y_continuous(limits=c(24,33), breaks=seq(24,33,by=1), expand=c(0,0))的情節
+0

這工作完美。謝謝! – Fox