来自 PHP 的图表
Flot Chart from PHP
我正在尝试使用数据库中的值绘制图表。我现在怎么样了,图表只绘制了 1 个数据点。我怎样才能让它绘制数组中的其余数据?我正在尝试绘制每个日期输入的代理总数。 var data2 将用于丢失的特工
<?php
foreach($mysqli->query('SELECT COUNT(*), agent_date_entered, agent_id
FROM agents GROUP BY agent_date_entered
ORDER BY agent_date_entered') as $row) {
$count[] = $row['COUNT(*)'];
$agent[] = $row['agent_id'];
$date[] = $row['agent_date_entered'];
}
?>
<script>
var data, data1, options, chart;
var data1 = [ <?php echo json_encode($count); ? > , < ? php echo json_encode($date); ?> ];
var data2 = [];
data = [{
data: data1,
label: "Agents Gained",
lines: {
show: true
},
points: {
show: true
}
}, {
data: data2,
label: "Agents Lost",
lines: {
show: true
},
points: {
show: true
}
}];
options = {
legend: {
position: "nw"
}
};
$(document).ready(function () {
chart = $.plot($("#placeholder"), data, options);
});
</script>
您的数据格式不是 Flot 要求的。你需要像
这样的东西
[[1, 1533081600000], [1, 1535932800000]]
(或 [[1533081600000, 1], [1535932800000, 1]]
,如果您想要 x 轴上的日期)。
1535932800000
之类的数字是 JavaScript 时间戳。您还需要在具有 date/time 值的轴上选择 mode: 'time'
。
有关详细信息,请参阅 Data format and Time series data 下的文档。
借助 Data format and Time series data 的评论之一中的链接,我找到了我正在寻找的答案。
为了以防万一其他人遇到这个问题,下面是我如何让它工作的。首先,我将 sql 语句中的日期更改为:(UNIX_TIMESTAMP(agent_date_depart)*1000) AS date
。然后我在设置变量$depart = json_encode(floatval($row['date']));
时对它进行了编码。为了使其在 x 轴上不是很大的数字并显示为日期,我将 x 轴设置为:xaxis: {mode: "time", timeformat: "%Y/%m/%d"},
。您甚至可以像这样使用 tooltipOpts 在工具提示中设置日期格式:
tooltipOpts: {
content: function (label, x, y) {
var date = new Date(+x);
var tooltip = '<h4>' + label + '</h4><ul>';
tooltip += '<li>Date ' + date.toLocaleDateString() + '</li>';
tooltip += '<li>Total Count: ' + y + '</li></ul>';
return tooltip;
},
我发现让数据显示在图表中的最简单方法是,我将 sql 语句放在数据变量中,如下所示:
var d2 = [
<?php
$sql = "SELECT COUNT(agent_id), (UNIX_TIMESTAMP(agent_date_depart)*1000) AS date FROM agents
WHERE agent_date_depart BETWEEN '$bdatecy' AND '$edatecy'
GROUP BY agent_date_depart ";
$result = mysqli_query($mysqli, $sql);
while ($row = mysqli_fetch_assoc($result)) {
$agent = $row['COUNT(agent_id)'];
$depart = json_encode(floatval($row['date']));
echo "[".$depart.", ".$agent."],";
}
?>
];
希望这对您有所帮助,我想再次感谢您提供这些链接。
我正在尝试使用数据库中的值绘制图表。我现在怎么样了,图表只绘制了 1 个数据点。我怎样才能让它绘制数组中的其余数据?我正在尝试绘制每个日期输入的代理总数。 var data2 将用于丢失的特工
<?php
foreach($mysqli->query('SELECT COUNT(*), agent_date_entered, agent_id
FROM agents GROUP BY agent_date_entered
ORDER BY agent_date_entered') as $row) {
$count[] = $row['COUNT(*)'];
$agent[] = $row['agent_id'];
$date[] = $row['agent_date_entered'];
}
?>
<script>
var data, data1, options, chart;
var data1 = [ <?php echo json_encode($count); ? > , < ? php echo json_encode($date); ?> ];
var data2 = [];
data = [{
data: data1,
label: "Agents Gained",
lines: {
show: true
},
points: {
show: true
}
}, {
data: data2,
label: "Agents Lost",
lines: {
show: true
},
points: {
show: true
}
}];
options = {
legend: {
position: "nw"
}
};
$(document).ready(function () {
chart = $.plot($("#placeholder"), data, options);
});
</script>
您的数据格式不是 Flot 要求的。你需要像
这样的东西[[1, 1533081600000], [1, 1535932800000]]
(或 [[1533081600000, 1], [1535932800000, 1]]
,如果您想要 x 轴上的日期)。
1535932800000
之类的数字是 JavaScript 时间戳。您还需要在具有 date/time 值的轴上选择 mode: 'time'
。
有关详细信息,请参阅 Data format and Time series data 下的文档。
借助 Data format and Time series data 的评论之一中的链接,我找到了我正在寻找的答案。
为了以防万一其他人遇到这个问题,下面是我如何让它工作的。首先,我将 sql 语句中的日期更改为:(UNIX_TIMESTAMP(agent_date_depart)*1000) AS date
。然后我在设置变量$depart = json_encode(floatval($row['date']));
时对它进行了编码。为了使其在 x 轴上不是很大的数字并显示为日期,我将 x 轴设置为:xaxis: {mode: "time", timeformat: "%Y/%m/%d"},
。您甚至可以像这样使用 tooltipOpts 在工具提示中设置日期格式:
tooltipOpts: {
content: function (label, x, y) {
var date = new Date(+x);
var tooltip = '<h4>' + label + '</h4><ul>';
tooltip += '<li>Date ' + date.toLocaleDateString() + '</li>';
tooltip += '<li>Total Count: ' + y + '</li></ul>';
return tooltip;
},
我发现让数据显示在图表中的最简单方法是,我将 sql 语句放在数据变量中,如下所示:
var d2 = [
<?php
$sql = "SELECT COUNT(agent_id), (UNIX_TIMESTAMP(agent_date_depart)*1000) AS date FROM agents
WHERE agent_date_depart BETWEEN '$bdatecy' AND '$edatecy'
GROUP BY agent_date_depart ";
$result = mysqli_query($mysqli, $sql);
while ($row = mysqli_fetch_assoc($result)) {
$agent = $row['COUNT(agent_id)'];
$depart = json_encode(floatval($row['date']));
echo "[".$depart.", ".$agent."],";
}
?>
];
希望这对您有所帮助,我想再次感谢您提供这些链接。