Charts PHPExcel-Y轴重叠数据图表区

Charts PHPExcel-Y轴重叠数据图表区,charts,phpexcel,Charts,Phpexcel,我在PHPExcel中的y轴标签定位有问题 创建图表时,y轴标签不会显示在绘图区域的左侧,它们始终与绘图区域重叠,从类别4开始,而不是从0开始 我假设问题是由我的类别x轴值和Excel无法确定y轴相对于数据的放置位置引起的。我的类别(x轴)值为字符串形式: yyyy, i.e. 1980 1981 1982 1983 etc. 这是我的PHPExcel图表创建代码,除了y轴定位之外,其他都可以工作 $labels = array( new PHPExcel_Chart_DataSeri

我在PHPExcel中的y轴标签定位有问题

创建图表时,y轴标签不会显示在绘图区域的左侧,它们始终与绘图区域重叠,从类别4开始,而不是从0开始

我假设问题是由我的类别x轴值和Excel无法确定y轴相对于数据的放置位置引起的。我的类别(x轴)值为字符串形式:

yyyy, i.e. 1980 1981 1982 1983 etc.
这是我的PHPExcel图表创建代码,除了y轴定位之外,其他都可以工作

$labels = array(
    new PHPExcel_Chart_DataSeriesValues('String', "'Report Summary'!C1", null, 1),
    new PHPExcel_Chart_DataSeriesValues('String', "'Report Summary'!D1", null, 1)
);
$chrtCols = "'Report Summary'!B2:B$rowNum";
$chrtVals = "'Report Summary'!C2:C$rowNum";
$chrtVals2 = "'Report Summary'!D2:D$rowNum";
$periods = new PHPExcel_Chart_DataSeriesValues('Number', $chrtCols, null, $rowNum-1);
$values = new PHPExcel_Chart_DataSeriesValues('Number', $chrtVals, null, $rowNum-1);
$values2 = new PHPExcel_Chart_DataSeriesValues('Number', $chrtVals2, null, $rowNum-1);
$series = new PHPExcel_Chart_DataSeries(
    PHPExcel_Chart_DataSeries::TYPE_AREACHART,       // plotType
    PHPExcel_Chart_DataSeries::GROUPING_STANDARD,  // plotGrouping
    array(0,1),                                       // plotOrder
    $labels,                                        // plotLabel
    array($periods,$periods),                                // plotCategory
    array($values,$values2)                                  // plotValues
);
$series->setPlotDirection(PHPExcel_Chart_DataSeries::DIRECTION_COL);
$layout = new PHPExcel_Chart_Layout();

$plotarea = new PHPExcel_Chart_PlotArea($layout, array($series));
$chart = new PHPExcel_Chart('sample', null, null, $plotarea);
$chart->setTopLeftPosition('A1', 24, 24);
$chart->setBottomRightPosition('B18', -24);
$actSheet->addChart($chart);
是否有设置告诉y轴在类别0处与x轴相交,而不是自动选择错误的交点?或者,是否有一种方法可以更改源数据,使其自动选择正确的交叉点


编辑:“可能”的解决方法是简单地将y轴线条颜色设置为“无线条”,y轴标签显示设置为“低”,而不是“nextTo”,但是,我认为PHPExcel此时无法更改轴线颜色设置。或者是吗?

我仍然很不确定为什么我的y轴没有出现在绘图区域的左侧,我很乐意了解问题的正确解决方法,而不是简单地解决问题。然而,为了实现上述解决方法,我对以下代码做了一些更改:

PHPExcel/Classes/Writer/Excel2007/Chart.php  
第541行之后:

$objWriter->startElement('c:valAx');
我补充说:

$objWriter->startElement('c:spPr');
    $objWriter->startElement('a:ln');
        $objWriter->startElement('a:noFill');
        $objWriter->endElement();
    $objWriter->endElement();
$objWriter->endElement();
删除了y轴边框。然后我将第616ish-620ish行从:

$objWriter->startElement('c:tickLblPos');
    $objWriter->writeAttribute('val',"nextTo");
$objWriter->endElement();
致:

将y轴重新定位到打印区域的左侧

虽然这并不能解决轴没有出现在它应该出现的位置的初始问题,但正如您在实现对chart.php的更改后从图表下面的图片中看到的那样,y轴现在“显示”在正确的位置


另外,此解决方法将影响使用相同chart.php文件的所有图表,将y轴标签定位更改为“低”和删除y轴线。

我仍然不确定为什么我的y轴没有出现在绘图区域的左侧,我很乐意了解问题的正确解决方法,而不是简单地解决问题。然而,为了实现上述解决方法,我对以下代码做了一些更改:

PHPExcel/Classes/Writer/Excel2007/Chart.php  
第541行之后:

$objWriter->startElement('c:valAx');
我补充说:

$objWriter->startElement('c:spPr');
    $objWriter->startElement('a:ln');
        $objWriter->startElement('a:noFill');
        $objWriter->endElement();
    $objWriter->endElement();
$objWriter->endElement();
删除了y轴边框。然后我将第616ish-620ish行从:

$objWriter->startElement('c:tickLblPos');
    $objWriter->writeAttribute('val',"nextTo");
$objWriter->endElement();
致:

将y轴重新定位到打印区域的左侧

虽然这并不能解决轴没有出现在它应该出现的位置的初始问题,但正如您在实现对chart.php的更改后从图表下面的图片中看到的那样,y轴现在“显示”在正确的位置


另外,此解决方法将影响使用相同chart.php文件的所有图表,将y轴标签定位更改为“低”,并删除y轴线。

至少在PHPExcel/Classes/Writer/Excel2007/chart.php中的我的PHPExcel版本中存在一个bug

查找:

并将$id2更改为$id1:

if ($id1 > 0) {
    $objWriter->startElement('c:crossAx');
        $objWriter->writeAttribute('val', $id1);
    $objWriter->endElement();

然后轴应该是正确的。

在PHPExcel/Classes/Writer/Excel2007/Chart.php中,我的PHPExcel版本中至少有一个bug

查找:

并将$id2更改为$id1:

if ($id1 > 0) {
    $objWriter->startElement('c:crossAx');
        $objWriter->writeAttribute('val', $id1);
    $objWriter->endElement();

轴应该是正确的。

谢谢!这固定了y轴!同样要移动x轴,我们也可以做类似的更改谢谢!这固定了y轴!同样地,为了移动x轴,我们可以做类似的改变