使用DC.js和交叉过滤器的复合图(条形图和线形图),当条形值= 0时线消失

萨姆斯

当小数的最后一个值为零时,该线在合成图中消失。这里密码笔

这是我的示例数据:

    var data = [
        { "ID": 1, "TxDate": "2017/12/30", "InstCode": "Loc1", "NTS": 7, "NTS2": 1 },
        { "ID": 2, "TxDate": "2017/12/31", "InstCode": "Loc1", "NTS": 14, "NTS2": 6 },
        { "ID": 3, "TxDate": "2017/12/31", "InstCode": "Loc1", "NTS": 1, "NTS2": 1 },
        { "ID": 4, "TxDate": "2017/12/30", "InstCode": "Loc2", "NTS": 1, "NTS2": 1 },
        { "ID": 5, "TxDate": "2018/01/02", "InstCode": "Loc2", "NTS": 2, "NTS2": 1 },
        { "ID": 6, "TxDate": "2018/01/02", "InstCode": "Loc2", "NTS": 1, "NTS2": 1 },
        { "ID": 7, "TxDate": "2018/01/03", "InstCode": "Loc1", "NTS": 3, "NTS2": 4 },
        { "ID": 8, "TxDate": "2018/01/03", "InstCode": "Loc1", "NTS": 1, "NTS2": 1 },
        { "ID": 9, "TxDate": "2018/01/04", "InstCode": "Loc1", "NTS": 1, "NTS2": 1 },
        { "ID": 10, "TxDate": "2018/01/02", "InstCode": "Loc2", "NTS": 4, "NTS2": 1 },
        { "ID": 11, "TxDate": "2018/01/03", "InstCode": "Loc1", "NTS": 22, "NTS2": 14 },
        { "ID": 12, "TxDate": "2018/01/02", "InstCode": "Loc1", "NTS": 2, "NTS2": 0 },
        { "ID": 13, "TxDate": "2018/01/04", "InstCode": "Loc2", "NTS": 0, "NTS2": 0 },
        { "ID": 14, "TxDate": "2018/01/04", "InstCode": "Loc2", "NTS": 0, "NTS2": 0 },
        { "ID": 15, "TxDate": "2018/02/04", "InstCode": "Loc2", "NTS": 0, "NTS2": 3 }
    ];

var yearPieChart = dc.pieChart("#year-pie-chart");
var monthBarChart = dc.barChart("#month-bar-chart");
var composite = dc.compositeChart('#compo-bar-line-chart');

问题是,当“ NTS”的最后一个值:1出现时,组合图就会出现。如果我更改下面的行

{ "ID": 15, "TxDate": "2018/02/04", "InstCode": "Loc2", "NTS": 0, "NTS2": 3 }

{ "ID": 15, "TxDate": "2018/02/04", "InstCode": "Loc2", "NTS": 1, "NTS2": 3 }

出现合成图。即使值“ NTS”,也可以通过任何方式显示图表:0非常感谢您的帮助。

复合条码:

composite
                    .width(1200).height(450)
                    .margins({ top: 20, bottom: 90, right: 10, left: 70 })
                    .x(d3.scale.ordinal().domain(nonEmptytxNTSGroup))
                    .xUnits(dc.units.ordinal)
                    //.xAxisLabel('Date')
                    .yAxisLabel("NTS")
                    .elasticX(true)
                    .elasticY(true)
                    //.rightYAxisLabel('Final Treatments')
                    .group(nonEmptytxNTSGroup)
                    .renderLabel(true)
                    ._rangeBandPadding(1)
                    .compose(
                    [
                        dc.barChart(composite)
                            .gap(1)
                            .centerBar(true)
                            .group(nonEmptytxNTSGroup)
                            .elasticX(true)
                            .elasticY(true)
                            .renderLabel(true),

                        dc.lineChart(composite)
                            .group(nonEmptytxFinalTxGroup)
                            .useRightYAxis(false)
                            .colors('red')
                            .elasticX(true)
                            .elasticY(true)
                            .renderDataPoints({
                                radius: 10,
                                fillOpacity: 5.5,
                                strokeOpacity: 5.8
                            })
                            .renderLabel(true)
                    ]
                    );


composite.renderlet(function (composite) {
                        composite.selectAll("g.x text")
                            .attr('dx', '-35')
                            //.select("g.axis.y")
                            //.attr("transform", "rotate(-45)");
                            .attr('transform', "translate(-10,0) rotate(-65)");
                    });
高登

在复合图表中,所有子图表将共享相同的X比例尺。这由指定给父(综合)图表的组确定。

在您的示例中,您将条形图的组用于复合图组。如果折线图的组中的任何键不在条形图的组中,则它拒绝绘制。(具体来说,NaN对于刻度中不存在的X值,它最后在行中s开头,然后进行完整性检查将其重置为空行。)

解决此问题的最简单方法是不使用remove_empty_bins然后,两个图表的域将始终匹配。

更复杂但可以说更可靠的方法是使用通常用于堆叠图表的解决方案,其中所有堆叠也必须在其X域中匹配。

常见问题包括combine_groups

function combine_groups() { // (groups...)
    var groups = Array.prototype.slice.call(arguments);
    return {
        all: function() {
            var alls = groups.map(function(g) { return g.all(); });
            var gm = {};
            alls.forEach(function(a, i) {
                a.forEach(function(b) {
                    if(!gm[b.key]) {
                        gm[b.key] = new Array(groups.length);
                        for(var j=0; j<groups.length; ++j)
                            gm[b.key][j] = 0;
                    }
                    gm[b.key][i] = b.value;
                });
            });
            var ret = [];
            for(var k in gm)
                ret.push({key: k, value: gm[k]});
            return ret;
        }
    };
}

从非空组生成一个组合组,如下所示:

var combined = combine_groups(nonEmptytxNTSGroup, nonEmptytxFinalTxGroup);

将其提供给组合图以设置公共域:

                composite
                    // ...
                    .group(combined)

告诉每个子图表从组合值之一中提取其值:

                    .compose(
                    [
                        dc.barChart(composite)
                            // ...
                            .group(combined, "1", function(kv) { return kv.value[0]; })
                            // ...
                        dc.lineChart(composite)
                            .group(combined, "2", function(kv) { return kv.value[1]; })
                            // ...
                    ]

现在你有其中会使用到的复合图表工会两个非空组的域。请注意,这还将强制子图表具有相同的域:任何跳过的值现在都将设置为0:

组合复合域

这里的最后一个柱为零,但仍绘制其0标签,因为折线图在那里具有非零值。

您的Codepen的叉子。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在dc.js和crossfilter.js中使用堆积条形图过滤时,为什么我的饼图显示不正确的组?

如何使用R线图创建条形图和线形图?

使用ggplot绘制线形图和条形图(带有辅助轴的线图)

如何使用e_charts()在同一图表中组合条形图和线形图?

使用R包含条形图和线形图的动画图

DC.JS /交叉过滤器:条形图的y轴上带有线性x轴的百分比?

如何在R中使用x,y数据绘制条形图和误差线

ggplot2:使用条形图和stat ='identity'时,y轴上的值不正确

dc.js-图表未呈现(单行条形图-水平行),但图例,轴和刻度线/刻度线(确实呈现)除外

Chart.js:使用叠加和偏移条形图创建条形图

dc.js-带有空bin过滤器的堆积条形图以奇怪的方式显示

python:使用y0和dy偏移量绘制条形图

提交时如何使用用户给定的输入生成和显示条形图

Python:使用 DataFrame 绘制折线图和条形图时 DatetimeIndex 的不同行为

Matplotlib:使用Twinx覆盖时,箱线图和条形图发生偏移

如何在 Python 中使用 pandas 和 matplotlib 绘制条形图时删除条形之间的空间?

如何在dc.js中呈现时间序列/分类堆积条形图,过滤堆栈和条形图

使用melt和ggplot的条形图

dc.js带有条形图和折线图的复合图表。在栏上实现单选

在汇总数据上使用ggplotly时,条形图的条形图无法交互

使用matplotlib和子图绘制多个条形图

条形图分组时显示条形图的值

如何使用 NGX 图表实现时间线过滤条形图?

如何使用阈值线创建matplotlib条形图?

DC.js条形图条消失在画笔上,并且总量不足以解决日期范围问题

高图-使用对数轴时线消失

尝试使用Matplotlib在条形图上绘制线形图

使用XSLT和SVG从XML创建条形图-缩放条形图

使用 twinx 绘制条形图后调整条形图和无花果大小