PHPExcel 散点图:如何绘制具有不规则间隔的数据

PHPExcel Scatterplot: How to Plot Data With Irregular Intervals

PHPExcel 提供了一个非常简单和有用的 example 来说明如何创建包含基于少量数据的简单散点图的 Excel 文件。但是,问题在于此示例对其 x 轴使用规则间隔的 "string" 值 (Q1 - Q4)。

我想做的是用不规则间隔的数字 x 轴值创建一个散点图,所以我修改了这样的代码:

$objWorksheet->fromArray(
    array(
        array('',   2010,   2011,   2012),
        array('0',   12,   15,      21),
        array('10',   56,   73,     86),
        array('30',   52,   61,     69),
        array('70',   30,   32,     0),
    )
);

$dataseriesLabels = array(
    new PHPExcel_Chart_DataSeriesValues('String', 'Worksheet!$B', NULL, 1),   //  2010
    new PHPExcel_Chart_DataSeriesValues('String', 'Worksheet!$C', NULL, 1),   //  2011
    new PHPExcel_Chart_DataSeriesValues('String', 'Worksheet!$D', NULL, 1),   //  2012
);

$xAxisTickValues = array(
    new PHPExcel_Chart_DataSeriesValues('Number', 'Worksheet!$A:$A', NULL, 4),  //  0 to 70
);

$dataSeriesValues = array(
    new PHPExcel_Chart_DataSeriesValues('Number', 'Worksheet!$B:$B', NULL, 4),
    new PHPExcel_Chart_DataSeriesValues('Number', 'Worksheet!$C:$C', NULL, 4),
    new PHPExcel_Chart_DataSeriesValues('Number', 'Worksheet!$D:$D', NULL, 4),
);

当我 运行 这段代码时,我得到的 excel 文件如下所示:

注意第一个数据系列 (2010) 是如何正确绘制的,而其他两个则没有。我还注意到,如果你 select 2010 年的数据系列,它确实同时定义了 y 值和 x 值:

但是,当您单击任何其他数据集时,您可以看到仅定义了 y 值:

我觉得这是我的一个相对简单的疏忽,但遗憾的是,我一直找不到问题所在。我担心这种类型的东西可能需要在 PHPExcel.php 文件中进行破解,但我想 运行 在弄乱源文件之前先由社区进行此操作。

非常感谢您的任何建议...

想通了!

事实证明这确实很简单,但是 PHPExcel 确实需要更新他们的示例文件。

我改变了这个:

$xAxisTickValues = array(
    new PHPExcel_Chart_DataSeriesValues('Number', 'Worksheet!$A:$A', NULL, 4),  //  0 to 70
);

为此:

$xAxisTickValues = array(
    new PHPExcel_Chart_DataSeriesValues('Number', 'Worksheet!$A:$A', NULL, 4),
    new PHPExcel_Chart_DataSeriesValues('Number', 'Worksheet!$A:$A', NULL, 4),
    new PHPExcel_Chart_DataSeriesValues('Number', 'Worksheet!$A:$A', NULL, 4),
    new PHPExcel_Chart_DataSeriesValues('Number', 'Worksheet!$A:$A', NULL, 4)
);

换句话说,包含x轴系列对象的数组需要与包含y轴系列对象的数组长度相同。令人困惑的是 x 轴数组填充了多个相同的 x 轴对象。

一个简单的问题,但却是一个令人沮丧的问题。

干杯!