2012-04-21 91 views
1

我正嘗試使用R包與Google Visualization API創建googleVis MotionChartgoogleVis MotionChart的默認變量

我的問題是,我想在互聯網上發佈MotionChart,爲此我希望能夠控制不同軸/尺寸的默認變量。

gvisMotionChart(M, options=list(state='xxx') 

哪裏'xxx'是可以由一個MotionChart高級選項卡被複制,但是默認的時間序列中不包含的狀態的狀態:

大量的信息可以使用設置。

我的問題是,如何爲googleVis MotionChart的不同軸/維度選擇默認變量?

+0

已經有答案了過去類似的問題: http://stackoverflow.com/questions/7063410/r-googlevis-problem-embedding-on-blogger http://stackoverflow.com/questions/4646779/embedding-googlevis-charts-into-a-web-site – 2012-04-21 17:14:56

+0

感謝DWin的鏈接,但是我不能在默認變量上看到任何東西? – 2012-04-21 18:11:46

回答

1

下面是gvisMotionChart的一個小接口函數,它允許除idvar和timevar外指定xvar,yvar,colorvar和sizevar的默認值。它通過簡單地改變提供的data.frame的列順序來實現這一點。該函數還將布爾變換爲數字(否則gvisMotionChart會引發錯誤)。由於我的運動圖對分析橫截面數據也非常方便,因此可以設置timevar = NULL。

# Convenience interface to gvisMotionChart that allows to set default columns 
    myMotionChart = function(df,idvar=colnames(df)[1],timevar=colnames(df)[2],xvar=colnames(df)[3],yvar=colnames(df)[4], colorvar=colnames(df)[5], sizevar = colnames(df)[6],...) { 
     library(googleVis) 

     # Generate a constant variable as column for time if not provided 
     # Unfortunately the motion plot still shows 1900... 
     if (is.null(timevar)) { 
      .TIME.VAR = rep(0,NROW(df)) 
      df = cbind(df,.TIME.VAR) 
      timevar=".TIME.VAR" 
     } 

     # Transform booleans into 0 and 1 since otherwise an error will be thrown 
     for (i in 1:NCOL(df)) { 
      if (is.logical(df [,i])[1]) 
       df[,i] = df[,i]*1 
     } 

     # Rearrange columns in order to have the desired default values for 
     # xvar, yvar, colorvar and sizevar 
     firstcols = c(idvar,timevar,xvar,yvar,colorvar,sizevar) 
     colorder = c(firstcols, setdiff(colnames(df),firstcols)) 
     df = df[,colorder] 

     gvisMotionChart(df,idvar=idvar,timevar=timevar,...) 
    } 
3

不知道如何在googleVis包中以編程方式執行此操作,但我懷疑Section 2.6 of the googleVis vignette的詳細讀數會爲您提供幫助。

當我這樣做,我手工編輯。我自己的例子motion chart with European public health time series有一些默認的時間序列選擇。看看這個頁面的來源,最底層。告訴我們這是否有幫助...

+0

謝謝!我沒有檢查2.6節,但我看不到如何爲該軸設置任何默認變量。我認爲我的問題可能有點不清楚,我會換個話。 – 2012-04-21 16:21:50

+0

我非常喜歡你的例子@gauden。看起來它應該深入研究政策含義,並且作爲一個偉大的R示例。 – 2012-04-21 17:12:45

+0

謝謝@DWin。我將R用於可視化和Python用於數據處理,然後是小手工編碼。我正在做更深入的研究,但是這非常令人鼓舞。 – gauden 2012-04-21 17:29:14

1

好吧我已經想出了一個解決方法,但它是一種討厭的。看來軟件包按照它們在數據集中的順序傳遞變量。

因此,爲了選擇不同軸/尺寸的默認變量,您必須更改數據框中變量的順序。在該變量被分配到軸的順序如下:

  1. X軸
  2. Y軸
  3. 點顏色
  4. 點尺寸

的ID(例如國家)並且時間(例如年)變量被自動識別。這意味着這兩個後面的第一個變量,將放在X軸上,第二個放在Y軸上,等等。

但是,應該有更好的方法。

1

我不知道更好的方法,但是當我做了類似的事情最近,我想我找到了變量的默認順序是:

## order of variables in data file: 
## 1 = idvar 
## 2 = timevar 
## 3 = bubble colour 
## 4 = x var 
## 5 = y var 
## 6 = bubble size 

的例子使用了世界銀行的數據:

library(googleVis) 
library(WDI) 

HealthWealth = WDI(country="all", indicator=c("SP.DYN.LE00.IN", "NY.GDP.PCAP.CD", "SP.POP.TOTL"), 
    start = 1960, end = 2010, extra = TRUE) #Can take some time 
HealthWealth = HealthWealth[-which(is.na(HealthWealth$Country.Name)), ] 
HealthWealth = HealthWealth[-which(HealthWealth$Region == "Republic of Belarus"),] 
HealthWealth = HealthWealth[, c(37, 3, 10, 5,4,6)] 
names(HealthWealth) = c("Country", "Year", "Region", "GDP.(Current.$US)", "Life.Expectancy", "Population") 
## order of variables in data file: 
## 1 = idvar 
## 2 = timevar 
## 3 = bubble colour 
## 4 = x var 
## 5 = y var 
## 6 = bubble size 

## Create a motion chart 
M <- gvisMotionChart(HealthWealth, idvar="Country", timevar="Year") # Be patient 

## Display the chart in your browser 
plot(M) # Change the x axis from lin to log 
+0

謝謝,這也是我現在(實際上也使用WB數據)。但我仍然想知道如何在不改變變量順序的情況下對其進行更改。 – 2012-04-22 05:51:26