0

我正在使用交叉过滤器将各种数据列表绘制成直方图。一些项目的值比其他项目高很多,我热衷于以对数方式绘制直方图。

在调用 reduceSum 后,有没有办法可以将所有总和的项目计数转换为对数值?我很想添加类似的东西

Math.log(d.count) / Math.LN10;

进入以下:

var crossfiltered_data = crossfilter(data),
    all = crossfiltered_data.groupAll(),
    item_labels = crossfiltered_data.dimension(function(d) { return d.name; }),
    items_group = hour.group().reduceSum(function(d) {
        return d.count
    }),
    charts = [
        barChart(on_range_change)
            .dimension(item_labels)
            .group(items_group)
          .x(d3.scale.linear()
            .domain([domain_start, domain_end])
            .rangeRound([0, 240])),
    ],
    chart = d3.selectAll(target)
        .data(charts)
        .each(function(chart) { 
            chart   .on("brush", renderAll)
                    .on("brushend", renderAll);
        }),
    render = function(method) {
            d3.select(this).call(method);
    },
    renderAll = function(event) {
        chart.each(render);
    };
4

1 回答 1

0

为什么不只使用对数刻度进行输出?见d3.scale.log。假设您在barChartcrossfilter 页面上使用 ,您只需将此行更改为使用对数刻度而不是线性刻度。

于 2012-12-23T15:45:45.213 回答