【问题标题】:default variables for a googleVis MotionChartgoogleVis MotionChart 的默认变量
【发布时间】:2012-05-02 18:59:15
【问题描述】:

我正在尝试使用 R 包通过 Google 可视化 API 创建一个 googleVis MotionChart

我的问题是我想在互联网上发布 MotionChart,为此我希望能够控制不同轴/尺寸的默认变量。

很多信息可以使用:

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

其中'xxx' 是可以从 MotionChart 中的“高级”选项卡复制的状态,但默认时间序列不包括在状态中。

我的问题是,如何为 googleVis MotionChart 的不同轴/尺寸选择默认变量?

【问题讨论】:

标签: r google-visualization


【解决方案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,...)
    }

【讨论】:

    【解决方案2】:

    我不知道更好的方法,但是当我最近做了类似的事情时,我想我发现变量的默认顺序是:

    ## 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
    

    【讨论】:

    • 谢谢,这也是我现在拥有的(实际上也是使用WB数据)。但我仍然想知道如何在不改变变量顺序的情况下改变它。
    【解决方案3】:

    好的,我想出了一个解决方法,但这有点烦人。包似乎按照它们在数据集中的顺序传递变量。

    因此,为了为不同的轴/维度选择默认变量,您必须更改数据框中变量的顺序。变量赋值给axis的顺序如下:

    1. X 轴
    2. Y 轴
    3. 点颜色
    4. 点大小

    会自动识别 ID(例如国家/地区)和时间(例如年份)变量。这意味着这两个之后的第一个变量将放在 X 轴上,第二个放在 Y 轴上,依此类推。

    不过,应该有更好的办法。

    【讨论】:

      【解决方案4】:

      不确定如何在 googleVis 包中以编程方式执行此操作,但我怀疑仔细阅读 Section 2.6 of the googleVis vignette 会给你一个线索。

      当我这样做时,我是手动编辑的。我自己的motion chart with European public health time series 示例选择了一些默认时间序列。查看该页面的源代码,位于最底部。告诉我们这是否有帮助...

      【讨论】:

      • 谢谢!我确实检查了第 2.6 节,但我看不到如何在那里为轴设置任何默认变量。我想我的问题可能有点不清楚,我会改写。
      • 我非常喜欢你的例子@gauden。看起来它值得深入研究政策影响,并成为一个很好的 R 示例。
      • 感谢@DWin。我将 R 用于可视化,将 Python 用于数据整理,然后进行一点手工编码。我正在研究更深入和更多相同的东西,但这非常令人鼓舞。
      • @gauden 非常感谢您的示例。如果我能访问您的代码,我将不胜感激。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-27
      • 1970-01-01
      • 1970-01-01
      • 2013-01-17
      • 2011-09-22
      • 2014-12-15
      相关资源
      最近更新 更多