PHPExcel Scatterplot:如何使用不规则间隔绘制数据

时间:2016-02-15 15:13:24

标签: php excel phpexcel

PHPExcel提供了一个非常简单和有用的example,用于创建包含基于一小部分数据的简单散点图的Excel文件。但是,问题在于这个例子为其x轴使用了规则间隔的“字符串”值(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$1', NULL, 1),   //  2010
    new PHPExcel_Chart_DataSeriesValues('String', 'Worksheet!$C$1', NULL, 1),   //  2011
    new PHPExcel_Chart_DataSeriesValues('String', 'Worksheet!$D$1', NULL, 1),   //  2012
);

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

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

当我运行此代码时,我得到的excel文件如下所示: enter image description here

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

enter image description here

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

enter image description here

我觉得这对我来说是一个相对简单的疏忽,但遗憾的是,我一直无法找到问题。我担心这种类型的东西可能需要PHPExcel.php文件中的黑客攻击,但是我想先在社区中运行它,然后再搞乱源文件。

提前感谢任何建议......

1 个答案:

答案 0 :(得分:0)

想出来了!

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

我改变了这个:

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

对此:

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

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

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

干杯!