javascript和python返回的相同数据结构在d3.js中的行为不同
当我从javascript源文件使用此数据结构时:javascript和python返回的相同数据结构在d3.js中的行为不同,javascript,python,d3.js,Javascript,Python,D3.js,当我从javascript源文件使用此数据结构时: var data = [{'x': 100, 'y': '65'}, {'x': 122, 'y': '57'}, {'x': 144, 'y': '101'}, {'x': 166, 'y': '87'}, {'x': 188, 'y': '8'}, {'x': 210, 'y': '180'}, {'x': 232, 'y': '132'}, {'x': 257, 'y': '190'}, {
var data = [{'x': 100, 'y': '65'},
{'x': 122, 'y': '57'},
{'x': 144, 'y': '101'},
{'x': 166, 'y': '87'},
{'x': 188, 'y': '8'},
{'x': 210, 'y': '180'},
{'x': 232, 'y': '132'},
{'x': 257, 'y': '190'},
{'x': 276, 'y': '210'},
{'x': 298, 'y': '150'}]
和alert
我的主文件中显示的数据:
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
此外,它还适用于:
alert(d3.max(data,function(d) { return d.count;}))
但当我使用python作为源文件并返回以下内容时:
data = [{'x': 100, 'y': '65'},
{'x': 122, 'y': '57'},
{'x': 144, 'y': '101'},
{'x': 166, 'y': '87'},
{'x': 188, 'y': '8'},
{'x': 210, 'y': '180'},
{'x': 232, 'y': '132'},
{'x': 257, 'y': '190'},
{'x': 276, 'y': '210'},
{'x': 298, 'y': '150'}]
abc=json.dumps(data)
print data
该警报也显示相同的内容:
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
但这不起作用:
alert(d3.max(data,function(d) { return d.count;}))
这是我的全部代码
function add_py()
{
var count = $( "#count" ).val();
$.ajax({
type: "get",
url: "abc.py",
data: {'count': count},
datatype:"script",
async: false,
success: function(response) {
var data= JSON.parse(response);
showGraph(data);
}, // success closed
error:function(xhr,err)
{
alert("Error connecting to server, please contact system administator.");
}
})//ajax closed
}
function showGraph(de) {
alert(de)
var mySVG = d3.select("body").append("svg");
mySVG
.attr("width", 500)
.attr("height", 500);
var heightScale = d3.scale.linear()
.domain([0, 963])
.range([0, 400]);
alert(d3.max(de,function(d) { return d.count;}))
var heightScale = d3.scale.linear()
.domain([0, d3.max(de,function(d) { return d.count;})])
.range([0, 400]);
var myBars = mySVG.selectAll('circle')
.data(de)
.enter()
.append('svg:circle');
myBars
.attr('r',20);
myBars
.attr('cx',function(d,i) {return (i * 22) + 100;})
.attr('cy',function(d,i) {return 400 - heightScale(d.count);});
}
我知道js中的数据和python文件中的数据的行为可能不同,但如何使python数据与js数据一样工作。提前感谢。我不知道您是如何将JavaScript和Python混合在一起的,我假设您正在尝试从Python程序(可能通过服务器?)将
数据作为字符串加载。在这种情况下,您需要解析字符串并通过以下操作将其转换为JSON对象(即内部JavaScript对象):
data = JSON.parse(data)
在主文件中
编辑:还要确保Python程序将字典输出为有效的JSON格式,只需print
ing它将不起作用,您需要类似JSON.dumps(数据)的内容
预期的输出是什么?您有x
的数值和y
的字符串:如果您将它们更改为数字,可能会有所帮助。@Emanuele Bezzi编辑了我的代码,当数据来自python时,警报警报(d3.max(de,函数(d){return d.count;})不起作用,但是当数据来自js@Emanuele-Bezzi时工作正常,对不起,我的错误应该是警报(d3.max(de,function(d){return d.x;}))