我正在尝试使用googleVis MotionChart
包在Google Visualization API中创建R
。
我的问题是我想在互联网上发布MotionChart,为此我希望能够控制不同轴/尺寸的默认变量。
可以使用以下方式设置许多信息:
gvisMotionChart(M, options=list(state='xxx')
其中'xxx'
是可以从MotionChart中的“高级”选项卡复制的状态,但默认时间系列不包含在状态中。
我的问题是,如何为googleVis MotionChart的不同轴/尺寸选择默认变量?
答案 0 :(得分:3)
不确定如何在googleVis包中以编程方式执行此操作,但我怀疑仔细阅读Section 2.6 of the googleVis vignette会给您带来优势。
当我这样做时,我手工编辑。我自己的motion chart with European public health time series示例选择了一些默认时间序列。看看该页面的来源,最底层。告诉我们这是否有帮助...
答案 1 :(得分:1)
好的我已经找到了解决方法,但这有点烦人。似乎包通过变量按照它们在数据集中的顺序传递。
因此,为了选择不同轴/维的默认变量,您必须更改数据框中变量的顺序。变量分配给轴的顺序如下:
自动识别ID(例如国家/地区)和时间(例如年份)变量。意思是这两个之后的第一个变量,将放在X轴上,第二个放在Y轴上等等。
然而,应该有更好的方法。
答案 2 :(得分: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
答案 3 :(得分: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,...)
}