2017-02-09 36 views
1

我使用Primefaces 6为我公司的图表需求,它依赖于jQplot。 对于一个项目,我试图覆盖与负值的叠置条形图上线图,获得这样的事情:如何使用Primefaces jQplot实现禁用单个系列上的堆叠

Account Retention Visualisation

的问题是,当我尝试一个linechartseries添加到与两个barchartseries相同的模型,当在模型上设置setStacked(true);时,折线图成为堆栈的一部分,因为Primefaces似乎不允许在系列上单独禁用堆叠,仅限于每个模型。所以我结束了这个与

<p:chart type="bar" model="#{backingBean.cartesianChartModel}"/> 

Line Chart as part of the Stack

绘制图表时经过一番调查我已经notoced是jQplot能够禁止由JS选项传递disableStack : true堆积对个别系列的,所以问题是否可以通过PF或通过一些JS hack在渲染页面上以某种方式覆盖它?我觉得使用扩展器只有苹果到整个模型?

相关的问题:Disable individual stacking

+0

_”我觉得使用扩展仅苹果给整个模型?“_尝试...看例子...不要预先得出结论。 – Kukeltje

回答

1

通过通过文档浇我找到了一个解决问题的办法,如果没有这样的问题:

似乎Primefaces允许个别系列从在堆栈中excempt在这个版本创建系列,通过

LineChartSeries.setDisableStack(true); 

这样简单。

+0

良好的调查,upvoted – Kukeltje

1

我想这可能是可能的。过去,我使用扩展功能来处理一些jqPlot攻击。

在我的情况下,例如,我有一个扩展函数定义的圆环图如下:

private void createDonutModel() { 
     donutModel = new DonutChartModel(); 
     donutModel.setLegendPosition("s"); 
     donutModel.setLegendPlacement(LegendPlacement.OUTSIDE); 
     donutModel.setSliceMargin(4); 
     donutModel.setDataFormat("value"); 
     donutModel.setShadow(false); 
     donutModel.setExtender("donutExtender"); 
     donutModel.setSeriesColors("B81C40, FFA600, 79B54A"); 
    } 

相应的JavaScript是做一些改变jqPlot:

/** 
* Customized jqPlot JQuery layout of the Donut Chart for Status Dashboard. 
*/ 
function donutExtender() { 
    this.cfg.seriesDefaults = { 
     // make this a donut chart. 
     renderer:$.jqplot.DonutRenderer, 
     rendererOptions:{   
      thickness: 26, 
      ringMargin: 0, 
      fill: true, 
      padding: 0, 
     sliceMargin: 4, 
     // Pies and donuts can start at any arbitrary angle. 
     startAngle: -90, 
     showDataLabels: false, 
     // By default, data labels show the percentage of the donut/pie. 
     // You can show the data 'value' or data 'label' instead, or 'percent' 
     dataLabels: 'value', 
      shadow: false 
     } 
    }     

    this.cfg.gridPadding = { 
     top: 0, right: 0, bottom: 0, left: 0     
    } 

    this.cfg.legend = { 
     show: false 
    } 

    this.cfg.grid = { drawBorder: false, 
     shadow: false,   
     background: "transparent" 
    }; 
} 

所以你可以在你的情况下尝试这样的事情? 留下您的系列的扩展配置空的,除了一个你有兴趣...

function chartExtender() { 
    this.cfg.series = [ 
    { //... 
    }, 
    { // ... 
    }, 
    { 
     disableStack: true   
    } 
    ] 
} 

值得拥有的镜头......

+0

好的肾病的建议。 Upvoted – Kukeltje