我的图表非常接近完美。我通过PHP获取数据并返回Rickshaw的JSON数据,然而,一个问题是我无法在12月份显示图表。
我需要显示整年的结果。因此,即使没有Dec的记录,我也需要将其显示为0。
我正在做的基本前提是这样的(我在实践中没有使用strtotime)
array
(
"Jan"=>array
(
"timestamp"=>strtotime('01-01-'.$this->year),
"records"=>(array)timestamps
)
//do for all months
)
由此,该月份的记录数量是该月份记录数组的长度,我也有该月份的确切时间戳。
然后当我json_encode这个数组时,我有一个JS对象,我可以迭代来正确创建Rickshaw系列,我将时间戳键作为其x轴值传递,并将records.length作为其y轴值。
除了Dec之外,这种方法运行得非常好。这是图表当前的图像
http://i.imgur.com/bzbELHW.png
我不明白的是,每隔一个月按预期工作。如果其记录数组的长度为0,则将其绘制为0.出于某种原因,12月只是没有被提取。起初我认为这是一个时区差异,但这就是我实际上每个月获得时间戳的方式
protected function getUnixTime($date_string)
{
$date = new DateTime($date_string , new DateTimeZone('GMT'));
return $date->format("U");
}
使用此工具http://www.epochconverter.com/检查所有时间戳,它们似乎都是正确的。仅供参考我是如何设置人力车的
var graph = new Rickshaw.Graph(
{
element:document.querySelector(scope.conf.chart_element),
width:scope.conf.chart_width,
height:scope.conf.chart_height,
renderer:scope.conf.chart_type,
series: scope.defaults.graph_series_data.reverse()
}),
time = new Rickshaw.Fixtures.Time(),
months = time.unit('months'),
x_axis = new Rickshaw.Graph.Axis.Time(
{
graph: graph,
timeUnit:months,
}),
y_axis = new Rickshaw.Graph.Axis.Y(
{
graph: graph,
orientation: 'left',
tickFormat: Rickshaw.Fixtures.Number.formatKMBT,
element: document.getElementById('y_axis'),
}),
legend = new Rickshaw.Graph.Legend(
{
element: document.querySelector('#legend'),
graph: graph
});
graph.render();
任何帮助都会非常感激,这个让我难过。
答案 0 :(得分:1)
呃......是的,它实际上只是在图表上需要在右侧显示一些填充以显示刻度字母。它始终是最简单的解决方案。
如果您遇到此问题,请尝试在图表的右侧添加一些填充,例如
padding:{top:0.01 , right:0.007 , bottom:0 , left:0}
应该解决这个问题。