我尝试使用谷歌图表,谷歌图表中的数据格式就像[new Date(2015, 1, 1), 5], [new Date(2015, 1, 2), 7], [new Date(2015, 1, 3), 3]
澄清(这是我在谷歌图表中找到的
文档(https://developers.google.com/chart/interactive/docs/datesandtimes#dates-and-times-using-the-date-string-representation))基于答案的是,这种格式[new Date(2015, 0, 2), 7],
可能会改变吗?:
function drawChart() {
var data = new google.visualization.DataTable();
data.addColumn('date', 'Time of Day');
data.addColumn('number', 'Rating');
data.addRows([
[new Date(2015, 0, 1), 5], [new Date(2015, 0, 2), 7], [new Date(2015, 0, 3), 3],
[new Date(2015, 0, 4), 1], [new Date(2015, 0, 5), 3], [new Date(2015, 0, 6), 4],
[new Date(2015, 0, 7), 3], [new Date(2015, 0, 8), 4], [new Date(2015, 0, 9), 2],
[new Date(2015, 0, 10), 5], [new Date(2015, 0, 11), 8], [new Date(2015, 0, 12), 6],
[new Date(2015, 0, 13), 3], [new Date(2015, 0, 14), 3], [new Date(2015, 0, 15), 5],
[new Date(2015, 0, 16), 7], [new Date(2015, 0, 17), 6], [new Date(2015, 0, 18), 6],
[new Date(2015, 0, 19), 3], [new Date(2015, 0, 20), 1], [new Date(2015, 0, 21), 2],
[new Date(2015, 0, 22), 4], [new Date(2015, 0, 23), 6], [new Date(2015, 0, 24), 5],
[new Date(2015, 0, 25), 9], [new Date(2015, 0, 26), 4], [new Date(2015, 0, 27), 9],
[new Date(2015, 0, 28), 8], [new Date(2015, 0, 29), 6], [new Date(2015, 0, 30), 4],
[new Date(2015, 0, 31), 6], [new Date(2015, 1, 1), 7], [new Date(2015, 1, 2), 9]
]);
我的原始数据如下:
x = ['1/4/2014', '2/4/2014','3/4/2014']
z = [100,200,300]
所以我尝试了一些代码:
y=[]
for i in x:
lastconnection = datetime.strptime(i,"%d/%m/%Y").strftime('%Y,%m,%d')
y.append((lastconnection))
time = map(lambda x,y:(x,y),y,z)
打印时间 输出是:
[('2014,04,01', 100), ('2014,04,02', 200), ('2014,04,03', 300)]
问题我不知道如何添加新的Date()'并将日期放入括号中而不带引号。 Anyidea ??提前谢谢!
答案 0 :(得分:1)
1)以下是Google将接受日期的唯一字符串格式...
"Date(Year, Month, Day, Hours, Minutes, Seconds, Milliseconds)"
e.g。
"Date(2017, 4, 3, 7, 31, 49, 0)" // <-- 05/03/2017 07:31:49
注意:上面的字符串必须将月份减少一个
并非所有参数都是必需的,这也可以...
"Date(2017, 4, 3)" // <-- 05/03/2017 12:00:00
2)但是,此格式仅在using json to build the DataTable
时由Google接受这意味着数据不能在一个简单的数组中......
[["Date(2017, 4, 3)", 100]] // <-- will not work
和必须格式如下......
{
"cols": [
{"label": "x", "type": "date"},
{"label": "z", "type": "number"},
],
"rows": [
{"c":[{"v": "Date(2017, 4, 3)"}, {"v": 100}]}
]
}
有关使用json字符串加载数据表的示例,请参阅以下工作代码段...
google.charts.load('current', {
callback: function () {
var formatDate = new google.visualization.DateFormat({
pattern: 'MM/dd/yyyy hh:mm:ss'
});
var jsonStr = '{"cols": [{"label": "Date", "type": "date"}],"rows": [{"c":[{"v": "Date(2017, 4, 3)"}]}]}';
var data = new google.visualization.DataTable(jsonStr);
formatDate.format(data, 0);
var container = document.getElementById('chart_div');
var chart = new google.visualization.Table(container);
chart.draw(data);
},
packages:['table']
});
<script src="https://www.gstatic.com/charts/loader.js"></script>
<div id="chart_div"></div>
3)如果您不使用上述json格式...
您必须以某种方式按摩客户端上的数据
您可以使用arrayToDataTable
和DataView,
允许您以当前格式保留日期......
[['1/4/2014', 100], ['2/4/2014', 200], ['3/4/2014', 300]]
在这种方法中,您将按原样构建数据表,然后使用数据视图转换...
var simpleArr = [['1/4/2014', 100], ['2/4/2014', 200], ['3/4/2014', 300]];
var data = new google.visualization.arrayToDataTable(simpleArr, true); // <-- true = no column headings
var view = new google.visualization.DataView(data);
view.setColumns([
// convert date column
{
calc: function (dt, row) {
return {
v: new Date(dt.getValue(row, 0)),
f: formatDate.formatValue(new Date(dt.getValue(row, 0))) // <-- formatted value, optional
}
},
label: data.getColumnLabel(0),
type: 'date'
},
// second column requires no manipulation, just use index, instead of calc object
1
]);
请参阅以下工作代码段...
google.charts.load('current', {
callback: function () {
var formatDate = new google.visualization.DateFormat({
pattern: 'MM/dd/yyyy hh:mm:ss'
});
var simpleArr = [['1/4/2014', 100], ['2/4/2014', 200], ['3/4/2014', 300]];
var data = new google.visualization.arrayToDataTable(simpleArr, true); // <-- true = no column headings
var view = new google.visualization.DataView(data);
view.setColumns([
// convert date column
{
calc: function (dt, row) {
return {
v: new Date(dt.getValue(row, 0)),
f: formatDate.formatValue(new Date(dt.getValue(row, 0))) // <-- formatted value, optional
}
},
label: data.getColumnLabel(0),
type: 'date'
},
// second column requires no manipulation, just use index, instead of calc object
1
]);
var container = document.getElementById('chart_div');
var chart = new google.visualization.Table(container);
chart.draw(data);
},
packages:['table']
});
<script src="https://www.gstatic.com/charts/loader.js"></script>
<div id="chart_div"></div>
答案 1 :(得分:0)
如果要生成要在浏览器中加载到Google图表中的JSON数据,请不要使用new Date(..)
语法;那个JavaScript代码而不是JSON兼容。
相反,请使用supported string notation:
使用JavaScript DataTable对象文字序列化数据时 构建DataTable的表示法,
new Date()
构造函数不能 用过的。相反,Google Charts提供了日期字符串表示形式 这样可以正确地序列化和解析您的date
或datetime
在创建DataTable时。这个Date字符串格式简单地删除了 new关键字并将其余表达式包装在引号中:"Date(Year, Month, Day, Hours, Minutes, Seconds, Milliseconds)"
不建议传递是一个字符串(不同的浏览器以不同方式解析这些),因此传递数值并从月中减去一个,因为Javascript使用从零开始的月值:< / p>
date = datetime.strptime(i, "%d/%m/%Y")
lastconnection = 'Date({}, {}, {})'.format(date.year, date.month - 1, date.day)
然后产生:
[("Date(2014, 3, 1)", 100), ("Date(2014, 3, 2')", 200), ("Date(2014, 3, 3)", 300)]
然后,Google图表库会通过评估前缀为Date()
的字符串将其转换为实际new
个对象:
eval("new Date(2014, 3, 1)")
Tue Apr 01 2014 00:00:00 GMT+0100 (BST)
请注意,此格式仅在DataTable object literal notation。
中受支持Google提供了一个Python library来轻松实现这一目标。生产,但不幸的是,该项目不能从PyPI安装(所以你必须从GitHub tarbal安装)而且更烦人,不支持Python 3.项目看起来相当死,没有代码更改4年来,两次拉扯请求在藤蔓上萎缩。
答案 2 :(得分:-1)
你有一个小问题 - new Date()
只能是python中的一个字符串。
如果您想尽快解决此问题 - 您可以使用:
>>> a = 'new Date(1,2,3)'
>>> c = [[a, i] for i in xrange(100,103)]
>>> c
[['new Date(1,2,3)', 100], ['new Date(1,2,3)', 101], ['new Date(1,2,3)', 102]]
>>> c = str(c)
>>> c.replace("'", '')
'[[new Date(1,2,3), 100], [new Date(1,2,3), 101], [new Date(1,2,3), 102]]'
您可以将日期保存为'new Date({0},{1},{2})'.format(...)
的字符串,并将其用作子列表的第1项。然后将此列表转换为字符串并删除所有引号。
Bur我建议您查看您的代码。也许你会找到一个更好的方法来解决问题(可能是JS或smth)。