5

我正在使用 gviz_api (google-visualization-python) 来构建一些折线图。 http://code.google.com/p/google-visualization-python/

我编辑了一个取自谷歌文档的折线图示例。
但是,我不确定如何将日期传递到 DataTable

这是我一直在使用的编辑示例。 https://gist.github.com/3941946

这是我有疑问的代码

 # Creating the data
 description = {"year": ("string", "Year"),
             "sales": ("number", "Sales"),
             "expenses": ("number", "Expenses")}

 data = [{"year": '2004', "sales": 1000, "expenses": 300}, 
      {"year": '2005', "sales": 1200, "expenses": 400}, 
      {"year": '2006', "sales": 1300, "expenses": 500}, 
      {"year": '2007', "sales": 1400, "expenses": 600}, 
      {"year": '2008', "sales": 1500, "expenses": 800}]
  # Loading it into gviz_api.DataTable
  data_table = gviz_api.DataTable(description)
  data_table.LoadData(data)

如何使用 gviz_api 将日期加载到 DataTable 中?

谷歌文档描述了如何使用 javascript 创建一个新的 Date(),但是,我想继续使用 gviz_api.py。

来自https://developers.google.com/chart/interactive/docs/dev/implementing_data_source#jsondatatable的 google 文档的注释

*JSON 修改 Google 的帮助程序库以及发送给 Google 的所有查询都返回稍微不标准的 JSON/JSONP 版本。如果您不自己解析返回的代码,这对您来说应该无关紧要。可视化 API 客户端支持 JSON 的标准版本和修改版本。以下是差异的摘要:

JSON 不支持 JavaScript 日期值(例如,“new Date(2008,1,28,0,31,26)”;API 实现支持。但是,API 现在支持自定义的有效 JSON 日期表示形式以下格式的字符串: Date(year, month, day[,hour, minute, second[, millisecond]]) 其中 day 之后的所有内容都是可选的,而月份是从零开始的。

JSON 使用双引号作为字典键;API 实现使用不带引号的键。

JSON 需要双引号围绕字符串值;API 实现使用单引号。*

4

1 回答 1

5

您实际上可以像在标准 Python 中一样处理创建日期 - API 为您处理转换为 JS。您所要做的就是import datetime在脚本的开头,更改yearfrom stringto的列类型date,然后像在标准 Python 中一样创建日期:

# This is the first modification - importing the library
import datetime
import gviz_api

# page_template stays the same
# ...

def main():
  # Creating the data
  # Here we change the type of column "year" to "date"
  description = {"year": ("date", "Year"),
                 "sales": ("number", "Sales"),
                 "expenses": ("number", "Expenses")}

  # Here we switch out the string dates with an actual Python datetime.date
  # The conversion happens in the the subsequent functions, giving you a 
  # date that is usable in the JS
  data = [{"year": datetime.date(2007,3,7), "sales": 1000, "expenses": 300},
          {"year": datetime.date(2009,6,11), "sales": 1200, "expenses": 400},
          {"year": datetime.date(2009,3,1), "sales": 1300, "expenses": 500},
          {"year": datetime.date(2010,8,6), "sales": 1401, "expenses": 600},
          {"year": datetime.date(2011,7,13), "sales": 1500, "expenses": 800}]
  # Loading it into gviz_api.DataTable
  data_table = gviz_api.DataTable(description)
  data_table.LoadData(data)

  # Creating a JavaScript code string
  jscode = data_table.ToJSCode("jscode_data",
                               columns_order=("year", "sales", "expenses"),
                               order_by="year")
  # Creating a JSon string
  json = data_table.ToJSon(columns_order=("year", "sales", "expenses"),
                           order_by="year")

  # Putting the JS code and JSon string into the template
  print "Content-type: text/html"
  print
  print page_template % vars()


if __name__ == '__main__':
  main()
于 2012-10-23T23:15:34.393 回答