gpt4 book ai didi

javascript - 在 JSON 文件中写什么来创建多折线图 HTML

转载 作者:行者123 更新时间:2023-12-01 16:10:35 36 4
gpt4 key购买 nike

我是 javascript 的新手,所以请原谅我。我正在尝试制作一个每小时更新一次的折线图(有 4 条线)。该信息将在 JSON 文件中找到,但我不确定如何编写它。以前我曾尝试使用 data.addColumn()data.addRows() 但我找不到将其与 JSON 文件连接的方法。比如说,如果你要举个例子,请显示四种不同商品的销售数量

    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>

google.charts.load('current', {
packages: ['corechart']
}).then(function () {

var options = {
hAxis: {
title: 'Time'
},
vAxis: {
title: 'Sales'
},
title: 'Today',
height: 600
};

var chart = new google.visualization.LineChart(document.getElementById('dagens'));

var jsonData = $.ajax({
url: 'getData.php',
dataType: 'json',
})

drawChart(jsonData);

}).done(drawChart);


function drawChart(jsonData) {
var data = new google.visualization.DataTable(jsonData);
chart.draw(data, options);
}

</script>

在 getData.php 文件中这样写:

$string = file_get_contents("sampleData.json");
echo $string;

如果可能的话,我希望使用谷歌的图表系统。非常感谢。

编辑:JSON 文件:

{
cols: [{label: 'Time', type: 'number'},
{label: 'Sales 1', type: 'number'},
{label: 'Sales 2', type: 'number'},
{label: 'Sales 3', type: 'number'},
{label: 'Sales 4', type: 'number'}
],
rows: [
{c:[{v: 0}, {v: 1000}, {v: 1000}, {v: 1000}, {v: 1000}]},
{c:[{v: 1}, {v: 1000}, {v: 1000}, {v: 1000}, {v: 1000}]},
{c:[{v: 2}, {v: 1000}, {v: 1000}, {v: 1000}, {v: 1000}]},
{c:[{v: 3}, {v: 1000}, {v: 1000}, {v: 1000}, {v: 1000}]},
{c:[{v: 4}, {v: 1000}, {v: 1000}, {v: 1000}, {v: 1000}]},
{c:[{v: 5}, {v: 1000}, {v: 1000}, {v: 1000}, {v: 1000}]},
{c:[{v: 6}, {v: 1000}, {v: 1000}, {v: 1000}, {v: 1000}]},
{c:[{v: 7}, {v: 1000}, {v: 1000}, {v: 1000}, {v: 1000}]},
{c:[{v: 8}, {v: 1000}, {v: 1000}, {v: 1000}, {v: 1000}]},
{c:[{v: 9}, {v: 1000}, {v: 1000}, {v: 1000}, {v: 1000}]},
{c:[{v: 10}, {v: 1000}, {v: 1000}, {v: 1000}, {v: 1000}]},
{c:[{v: 11}, {v: 1000}, {v: 1000}, {v: 1000}, {v: 1000}]},
{c:[{v: 12}, {v: 1000}, {v: 1000}, {v: 1000}, {v: 1000}]},
{c:[{v: 13}, {v: 1000}, {v: 1000}, {v: 1000}, {v: 1000}]},
{c:[{v: 14}, {v: 1000}, {v: 1000}, {v: 1000}, {v: 1000}]},
{c:[{v: 15}, {v: 1000}, {v: 1000}, {v: 1000}, {v: 1000}]},
{c:[{v: 16}, {v: 1000}, {v: 1000}, {v: 1000}, {v: 1000}]},
{c:[{v: 17}, {v: 1000}, {v: 1000}, {v: 1000}, {v: 1000}]},
{c:[{v: 18}, {v: 1000}, {v: 1000}, {v: 1000}, {v: 1000}]},
{c:[{v: 19}, {v: 1000}, {v: 1000}, {v: 1000}, {v: 1000}]},
{c:[{v: 20}, {v: 1000}, {v: 1000}, {v: 1000}, {v: 1000}]},
{c:[{v: 21}, {v: 1000}, {v: 1000}, {v: 1000}, {v: 1000}]},
{c:[{v: 22}, {v: 1000}, {v: 1000}, {v: 1000}, {v: 1000}]},
{c:[{v: 23}, {v: 1000}, {v: 1000}, {v: 1000}, {v: 1000}]}
]
}

最佳答案

为了创建一个google数据表,直接从json,如下...

var data = new google.visualization.DataTable(jsonData);

json 数据必须是非常特定的格式,找到here .

至于具体图表的数据格式,
每个都有特定的格式,折线图的数据格式可以找到here .

数据表第一列代表x轴,
它可以是任何类型(日期、数字、字符串等)。

后面的列应该都是数字,
代表图表中的每个系列,或要绘制的线。

所以画折线图需要json的例子,
在 x 轴上带有日期,
四行如下...

var jsonData = {
"cols": [
{"label": "Date", "type": "date"},
{"label": "Sales A", "type": "number"},
{"label": "Sales B", "type": "number"},
{"label": "Sales C", "type": "number"},
{"label": "Sales D", "type": "number"}
],
"rows": [
{"c":[{"v": "Date(2019, 10, 1)"}, {"v": 1000}, {"v": 2000}, {"v": 3000}, {"v": 4000}]},
{"c":[{"v": "Date(2019, 11, 1)"}, {"v": 1000}, {"v": 2000}, {"v": 3000}, {"v": 4000}]},
{"c":[{"v": "Date(2020, 0, 1)"}, {"v": 1000}, {"v": 2000}, {"v": 3000}, {"v": 4000}]},
{"c":[{"v": "Date(2020, 1, 1)"}, {"v": 1000}, {"v": 2000}, {"v": 3000}, {"v": 4000}]}
]
};

使用ajax获取json数据时,
不要使用 --> async: false -- 此选项已被弃用。

而是使用 done promise 方法,它将数据作为参数。

$.ajax({
url: "getData.php",
dataType: "json",
}).done(function (jsonData) { // <-- json data argument
});

请参阅以下工作片段,
在这里,我使用 fail promise 方法对数据进行硬编码,
因为无法从该站点访问您的 PHP 页面。
在您的服务器上,它应该在没有 fail 方法的情况下工作......

google.charts.load('current', {
packages: ['corechart']
}).then(function () {

var options = {
hAxis: {
title: 'Time'
},
vAxis: {
title: 'Sales'
},
title: 'Today',
height: 600
};

var chart = new google.visualization.LineChart(document.getElementById('today'));

$.ajax({
url: 'getData.php',
dataType: 'json',
}).fail(function () {

var jsonData = {
"cols": [
{"label": "Date", "type": "date"},
{"label": "Sales A", "type": "number"},
{"label": "Sales B", "type": "number"},
{"label": "Sales C", "type": "number"},
{"label": "Sales D", "type": "number"}
],
"rows": [
{"c":[{"v": "Date(2019, 10, 1)"}, {"v": 1000}, {"v": 2000}, {"v": 3000}, {"v": 4000}]},
{"c":[{"v": "Date(2019, 11, 1)"}, {"v": 1000}, {"v": 2000}, {"v": 3000}, {"v": 4000}]},
{"c":[{"v": "Date(2020, 0, 1)"}, {"v": 1000}, {"v": 2000}, {"v": 3000}, {"v": 4000}]},
{"c":[{"v": "Date(2020, 1, 1)"}, {"v": 1000}, {"v": 2000}, {"v": 3000}, {"v": 4000}]}
]
};

drawChart(jsonData);

}).done(drawChart);


function drawChart(jsonData) {
var data = new google.visualization.DataTable(jsonData);
chart.draw(data, options);
}

});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://www.gstatic.com/charts/loader.js"></script>
<div id="today"></div>


编辑

ajax调用有问题。
从...改变

    var jsonData = $.ajax({
url: 'getData.php',
dataType: 'json',
})

drawChart(jsonData);

}).done(drawChart);

改为...

    $.ajax({
url: 'getData.php',
dataType: 'json',
}).done(drawChart);

此外,您似乎缺少加载语句 promise 的右括号。
试试这段代码……

google.charts.load('current', {
packages: ['corechart']
}).then(function () {

var options = {
hAxis: {
title: 'Time'
},
vAxis: {
title: 'Sales'
},
title: 'Today',
height: 600
};

var chart = new google.visualization.LineChart(document.getElementById('dagens'));

$.ajax({
url: 'getData.php',
dataType: 'json',
}).done(drawChart);


function drawChart(jsonData) {
var data = new google.visualization.DataTable(jsonData);
chart.draw(data, options);
}

});

关于javascript - 在 JSON 文件中写什么来创建多折线图 HTML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60095924/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com