首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >openTBS/PHP -如何创建堆叠条形图?

openTBS/PHP -如何创建堆叠条形图?
EN

Stack Overflow用户
提问于 2016-01-14 04:46:16
回答 2查看 352关注 0票数 1

我正在尝试创建一个堆叠的条形图,如下所示,嵌入在PowerPoint模板的幻灯片上。当我在下面运行我的脚本时,我会得到一个错误。

TinyButStrong错误OpenTBS插件:(ChartChangeSeries) 'chart3‘:无法在图表’图表3‘中找到系列’3‘。进程正在结束,除非您将NoErr属性设置为true。

据我所见,我的系列与x轴的两个标签中的每一个都有明确的定义。

,我哪里出错了,如何解决这个错误?

代码语言:javascript
复制
$ecdClosureStatus = getClosureChartData('ECD');
    $ChartNameOrNum = 'chart3'; // Title of the shape that embeds the chart
    $ChartRef = 'chart3'; // Title of the shape that embeds the chart
    $SeriesNameOrNum = 'Series 1';
    $NewLegend = "Closed On Time";
    $NewValues =    array(


(int)$ecdClosureStatus['ClosedOnTime'],
                                    0
                                );
$TBS->PlugIn(OPENTBS_CHART, $ChartNameOrNum, $SeriesNameOrNum, $NewValues, $NewLegend);

$SeriesNameOrNum = 'Series 2';
$NewLegend =    'Closed 1-30 Days Late';
$NewValues =    array(
                                    0,
                                    (int)$ecdClosureStatus['OneToThirtyDaysLate']
                                );
$TBS->PlugIn(OPENTBS_CHART, $ChartNameOrNum, $SeriesNameOrNum, $NewValues, $NewLegend);

$SeriesNameOrNum = 'Series 3';
$NewLegend =        'Closed 31-60 Days Late';
$NewValues =    array(
                                    0,
                                    (int)$ecdClosureStatus['ThirtyOneToSixtyDaysLate']
                                );
$TBS->PlugIn(OPENTBS_CHART, $ChartNameOrNum, $SeriesNameOrNum, $NewValues, $NewLegend);

$SeriesNameOrNum = 'Series 4';
$NewLegend =    'Closed 61-90 Days Late';
$NewValues =        array(
                                    0,
                                    (int)$ecdClosureStatus['SixtyOneToNinetyDaysLate']
                                );
$TBS->PlugIn(OPENTBS_CHART, $ChartNameOrNum, $SeriesNameOrNum, $NewValues, $NewLegend);

$SeriesNameOrNum = 'Series 5';
$NewLegend = 'Closed >90 Days Late';
$NewValues =    array(
                                    0,
                                    (int)$ecdClosureStatus['ClosedMoreThanNinetyDaysLate']
                                );
$TBS->PlugIn(OPENTBS_CHART, $ChartNameOrNum, $SeriesNameOrNum, $NewValues, $NewLegend);
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-01-14 18:31:12

我将每个系列的$NewValues数组修改为由两个元素组成的数组,第一个元素是x轴值,第二个元素是y轴值。X轴值是由两个值组成的数组(“按时关闭”、“关闭较晚”),y轴是由两个元素组成的数组(一个元素为零,另一个为该x值的值(要么按时关闭,要么晚闭)。

输出图

示例

代码语言:javascript
复制
 $NewValues =   array(array('Closed On Time', 'Closed Late'), array(
                                        (int)$ecdClosureStatus['ClosedOnTime'],
                                        0
                                    ));

解决方案代码

代码语言:javascript
复制
$ecdClosureStatus = getClosureChartData('ECD');
    $ChartNameOrNum = 'chart3'; // Title of the shape that embeds the chart
    $ChartRef = 'chart3'; // Title of the shape that embeds the chart
    $SeriesNameOrNum = 'Series 1';
    $NewLegend = "Closed On Time";
    $NewValues =    array(array('Closed On Time', 'Closed Late'), array(
                                        (int)$ecdClosureStatus['ClosedOnTime'],
                                        0
                                    ));
    $TBS->PlugIn(OPENTBS_CHART, $ChartNameOrNum, $SeriesNameOrNum, $NewValues, $NewLegend);

    $SeriesNameOrNum = 'Series 2';
    $NewLegend =    '1-30 Days Late';
    $NewValues =        array(array('Closed On Time', 'Closed Late'), array(
                                        0,
                                        (int)$ecdClosureStatus['OneToThirtyDaysLate']
                                    ));
    $TBS->PlugIn(OPENTBS_CHART, $ChartNameOrNum, $SeriesNameOrNum, $NewValues, $NewLegend);

    $SeriesNameOrNum = 'Series 3';
    $NewLegend =        ' 31-60 Days Late';
    $NewValues =        array(array('Closed On Time', 'Closed Late'), array(
                                        0,
                                        (int)$ecdClosureStatus['ThirtyOneToSixtyDaysLate']
                                    ));
    $TBS->PlugIn(OPENTBS_CHART, $ChartNameOrNum, $SeriesNameOrNum, $NewValues, $NewLegend);

    $SeriesNameOrNum = 'Series 4';
    $NewLegend =    '61-90 Days Late';
    $NewValues =            array(array('Closed On Time', 'Closed Late'), array(
                                        0,
                                        (int)$ecdClosureStatus['SixtyOneToNinetyDaysLate']
                                    ));
    $TBS->PlugIn(OPENTBS_CHART, $ChartNameOrNum, $SeriesNameOrNum, $NewValues, $NewLegend);

    $SeriesNameOrNum = 'Series 5';
    $NewLegend = ' >90 Days Late';
    $NewValues =        array(array('Closed On Time', 'Closed Late'), array(
                                        0,
                                        (int)$ecdClosureStatus['MoreThanNinetyDaysLate']
                                    ));
    $TBS->PlugIn(OPENTBS_CHART, $ChartNameOrNum, $SeriesNameOrNum, $NewValues, $NewLegend);
票数 0
EN

Stack Overflow用户

发布于 2016-01-14 17:40:52

您的代码似乎ok.The问题可能来自于系列#3,它可能不会像您预期的那样在内部命名。重复检查电子表格查看器中的名称,最后必须没有空格。您还可以尝试使用Ms中的“修改数据”按钮。

不过,您可以使用新的OpenTBS命令来返回图表的数据。它是OpenTBS测试版1.9.5中的avaibale,但它是稳定的。

命令:

代码语言:javascript
复制
$data = $TBS->PlugIn(OPENTBS_CHART_INFO, 'chart3');   
var_dump($data);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34781907

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档