2016-11-02 108 views
0

我想顯示多條曲線顯示多條曲線與在使用一次在GGPLOT2使用R. GGPLOT2 R中

有數據的200多個城市,但我只創建一個隨機抽樣數據爲環如下:

#sample data 

df <- data.frame(
    city = c('paris', 'tokyo', 'seoul', 'shanghai', 'berlin', 'rome') 
    , week = c(41,42) 
    , type = c('A','B','C') 
    , count = sample(1:100, 24, replace = F) 
    ) 

df <- data.table(df) 
df[, .(count=sum(count)), by =.(city,type, week)] 

在原始數據中,有200多個城市,但我只是爲此創建了隨機數據。

我想根據計數數量提取排名前10位的城市, 將排名前10位的城市放入列表中, 並循環以自動繪製在查看器上。

我可以使用facet_grid選項,但爲此目的,我需要以這種方式。

This article幫助我塑造到目前爲止,但它不工作,因爲我不是數數值,而是循環圖表的因素。

# function 
plotCities <- function(cityName){ 
      df <- df[city == cityName,] 
        ggplot(df, 
          aes(x = as.factor(week), y = count, 
           color = as.factor(week), group = as.factor(week))) + 
          scale_y_continuous(labels = comma) + 
          geom_point() + 
          geom_line() + 
          labs(title = "cities monthly counts", 
           x = "month", 
           y = "counts")+ 
          theme(axis.text.x=element_text(angle=90,hjust=1,vjust=1)) 
    } 

plotCities("paris") 

這不會帶來很好的圖形,但並不在這一點上無論是這裏的目標是繪製多個在顯示。

for(cityName in df$city) { 
     plotCities(cityName) 
} 

認爲這會工作,但沒有創建我想要的列表...所以失敗。

我的下一個嘗試是:

p <- list() 
    for(i in 1:length(df$city)){ 
      cityName = df2[i, 1] 
      p[[i]] = plotCities(cityName) 

    } 

因爲城市價值因素不大概工作?

請分享我一些提示!

+0

'爲(的cityName在DF $市) {plottery(cityName)) }將輸出圖表。但是,有很多重複。所以也許增加'唯一(df $城市)' – Haboryme

+0

這個問題:http://stackoverflow.com/q/40366468/4477364有可能幫助的信息。 – Joe

回答

0

我會使用gridExtra包中的grid.arrange。這可以將多個網格圖放置在一個整體圖中(適用於lattice和ggplot2)。

在下面的例子中,我使用lapply(而不是for循環)來創建地塊的名單,並do.call與情節名單運行grid.arrange

library(gridExtra) 
plot_list = lapply(unique(df$city), plotCities) 
do.call('grid.arrange', plot_list) 
+0

感謝您的建議!我已經嘗試了這一點,並不斷得到以下錯誤:$ _ - 。data.frame(x,name,value)中的錯誤: 替換有17行,數據有226 – tmhs

+0

您需要創建一個可重現的示例代碼和數據,我可以複製粘貼到R並重現你的問題),因爲你得到的錯誤可能是由許多事情造成的。沒有這些信息,我無法幫助你。 –