我一直在尝试使用Highcharts库创建一个类似于http://bit.ly/1jF6AY7的图表几周。但是,它不理解以下系列应该有零值(如果没有提供值/日期):
12-18-13
01-01-14
01-03-14
01-06-14
01-15-14
然而,显然使用谷歌图表是可能的,因为上图显示了“贡献”日期之间的差距。我需要为我的created_at日期做同样的事情。有什么建议?我更喜欢使用Highcharts这样做,但此时我的压力和头发比其他任何东西都更有价值;)
Vanilla PHP代码示例:
$q = $_GET['search'];
if(isset($_GET['time'])) {
$time = $_GET['time'];
} else {
$time = NULL;
}
include_once('../../vendors/HighchartsPHP-master/Highchart.php');
$chart = new Highchart(Highchart::HIGHSTOCK);
$chart->includeExtraScripts();
$chart->chart->renderTo = "chart";
$chart->title->text = "Potential Impact for \${$q}";
$chart->rangeSelector->selected = 1;
$chart->xAxis->type = 'datetime';
$chart->xAxis->gapGridLineWidth = 3;
$chart->xAxis->dateTimeLabelFormats->hour = "%H:%M";
$chart->xAxis->dateTimeLabelFormats->month = "%e. %b";
$chart->xAxis->dateTimeLabelFormats->year = "%b";
// $chart->xAxis->tickInterval = 3600 * 1000;
$chart->yAxis->title->text = "Volume";
$chart->yAxis->min = 0;
$chart->credits->enabled = false;
// $chart->rangeSelector->buttons[] = array(
// 'type' => "minute",
// 'count' => 5,
// 'text' => "5"
// );
...
$chart->rangeSelector->buttons[] = array(
'type' => "month",
'count' => 6,
'text' => "6M"
);
$chart->rangeSelector->buttons[] = array(
'type' => "year",
'count' => 1,
'text' => "1Y"
);
$chart->rangeSelector->buttons[] = array(
'type' => "all",
'text' => "All"
);
$option = new HighchartOption();
$option->global->useUTC = false;
Highchart::setOptions($option);
$chart->series[] = array(
'name' => "Potential Impact for \${$q}",
'data' => new HighchartJsExpr("data"),
'step' => 1,
'gapSize' => 5,
'connectNulls' => false,
'tooltip' => array(
'valueDecimals' => 0
)
);
$data = format_data($q, $time);
$chart->series[0]->data = $data;
?>
<div id="chart"></div>
<script type="text/javascript"><?php echo $chart->render("chart1"); ?></script>
并且,格式数据功能:
function format_data($q, $time = NULL) {
$msg_vol = correlate_created_at_with_msg_vol($q, $time);
while ($tweet = mysqli_fetch_array($msg_vol, MYSQL_ASSOC)) {
$date = $tweet['date'] * 1000;
$count = intval($tweet['count']);
$formatted[] = array($date, $count);
}
return $formatted;
}
在上图中,您不仅可以看到图形化单个数据点(如工具提示所示)而没有在图表上显示任何视觉参考,但它正在跳过空白周期,而不是正确显示相应的时间在xAxis上。奇怪的是,如果您引用底部栏,允许用户通过拖动栏来更改时间段...该栏的间隙已正确显示,就像我正在寻找的那样。
如果我不能让Highcharts为间隙找到零值,我至少需要它显示时间间隔而不会跳过不可预测的分钟数,小时数,在某些情况下,天数和周。
答案 0 :(得分:1)
如果您使用基于日期时间的系列,并且高层图表不应处理这些点的数据。如果没有看到您的代码,我就会在基于类别的xAxis上进行操作,并且您不会在此时段中“分箱”任何数据。
编辑:
快速浏览一下您粘贴的代码就会显示您正在使用HighStock,这很好。您可以使用ordinal
设置。将其设置为false
,您应该看到差距。现在仍然很难说,因为我无法看到你的数据是什么,但这应该给我们一些东西继续下去。您可能还想启用connectNulls
。
答案 1 :(得分:-1)
简易解决方案,如果没有数据,则强制为0。