如何同时使用 2 个范围滑块?

2024-04-19

我想使用 2 个范围滑块同时根据年龄和身高过滤表中的数据。

我已经使用以下方法实现了 2 个范围滑块(年龄和身高)d3.slider.js https://github.com/MasterMaps/d3-slider and a dc.dataTable。我想同时使用这两个范围滑块,但它们似乎无法正常工作。

另外,表格下方有文字“从 49 条记录中选择 49 条”。使用滑块时数字不会改变。

Code:

    var dataTable = dc.dataTable("table#list");
    var dispatch = d3.dispatch('load','filter');

    d3.json('data.json',function(json){
        dispatch.load(json)
    });

    dispatch.on('load',function(json) {
        var formatNumber = d3.format( ",d");
        var facts = crossfilter(json);
        var dimensionAge = facts.dimension(function(d) {
            return +d.age;
        });
        var accessorAge = function(d) {
            return d.age;
        };
        var dimensionHeight = facts.dimension(function(d) {
            return +d.height;
        });
        var accessorHeight = function(d) {
            return d.height;
        };
        var range = d3.extent(json, accessorAge);
        var range2 = d3.extent(json, accessorHeight);
        var all = facts.groupAll();

        d3.select("div#slider3")
            .call(d3.slider().axis(true).min(range[0]).max(range[1]).value(range)
            .on("slide", function(evt,value) {
                dispatch.filter(value);
                d3.select("#slider3textmin").text(Math.floor(value[0]));
                d3.select("#slider3textmax").text(Math.floor(value[1]))
            }))

        d3.select("div#slider4")
            .call(d3.slider().axis(true).min(range2[0]).max(range2[1]).value(range2)
            .on("slide", function(evt,value) {
                dispatch.filter(value);
                d3.select("#slider4textmin").text(Math.floor(value[0]));
                d3.select("#slider4textmax").text(Math.floor(value[1]))
            }))


        FieldNames = [
            "",
            "Age",
            "Weight",
            "Height",
            "Eye Color",
            "Hair Color",
            "Race",
            "Sex",
            "Annual Income"
        ];

        d3.select("tr#FieldNames").selectAll("th")
            .data(FieldNames)
            .enter()
            .append("th") 
            .append("text")
            .text(function(d){ 
                return d;
            });

        dataTable
            .dimension(dimensionAge)
            .group(function(d) {
                return d.sex;
            })
            .columns([
                function(d) {return "";},
                function(d) {return d.age;},
                function(d) {return d.weight;},
                function(d) {return d.height;},
                function(d) {return d.eyeColor;},
                function(d) {return d.hairColor;},
                function(d) {return d.race;},
                function(d) {return d.sex;},
                function(d) {return formatNumber(d.annualIncome);}
            ]);   

        dispatch.on('filter',function(value){
            dataTable.replaceFilter(dc.filters.RangedFilter(value[0], value[1]));
            dataTable.redraw();
        })

        dc.dataCount(".dc-data-count")
            .dimension(facts)
            .group(all);

        dc.renderAll();

    });

网站链接 http://d3.magnetica-hosting.sk/sortable-table-with-slider.html

Plunker http://plnkr.co/edit/Di9O8w5NkDOIoh9fL1qW?p=preview


原始回复.

d3.slider.js 的良好使用 - 我以前没有见过它与 dc.js 一起使用。

乍一看,我发现这里有两个问题。首先,您正在使用一个 调度两个滑块,因此两个滑块都在过滤年龄, 因为那是桌子的尺寸。你可能想要创建 按高度过滤的另一个维度,您实际上并不需要 将其附加到图表中。

其次,不仅仅是使用 dataTable.redraw() 重新绘制图表, 您可能想调用 dataTable.redrawGroup() 以便所有图表 其图表组中的内容被重新绘制,包括 dataCount。

具体来说:

  1. 您的调度中需要两个过滤器事件

    var dispatch = d3.dispatch('load','filterAge','filterHeight');
    
  2. 年龄滑块将调用filterAge

                dispatch.filterAge(value);
    

    并且高度滑块将调用filterHeight

                dispatch.filterHeight(value);
    
  3. 当前的filter事件处理程序现在将处理filterAge它会调用redrawGroup

        dispatch.on('filterAge',function(value){
            dataTable.replaceFilter(dc.filters.RangedFilter(value[0], value[1]));
            dataTable.redrawGroup();
        })
    
  4. 我们添加另一个filterHeight直接过滤的处理程序dimensionHeight并重新绘制图表组

        dispatch.on('filterHeight',function(value){
            dimensionHeight.filter([value[0], value[1]]);
            dataTable.redrawGroup();
        })
    
  5. 重置全部还必须清除dimensionHeight。 (由于任何图表均未使用此维度,dc.filterAll()不会找到它。)

            <a href="javascript: dimensionHeight.filter(null); dc.filterAll(); dc.renderAll();">Reset All</a>
    

你的笨蛋的叉子 http://plnkr.co/edit/LKTE577KX8bb7SGlhY64?p=preview.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何同时使用 2 个范围滑块? 的相关文章

  • dc js 复合条形图 折线图

    我有一个 dc js 条形图 如下所示这个叉形小提琴 http jsfiddle net 89218vf1 3 此条形图将加载预定义的过滤器 例如本例中的 25 35 现在 我需要显示一个与条形图复合的折线图 突出显示带有高低线的过滤数据
  • D3js 从数组而不是文件中获取数据

    我发现了这个优秀的 d3js 图表here http bl ocks org Caged 6476579 但就我而言 我希望此图表从数组而不是 tsv 文件中获取值 我想让它从表 中获取值 我怎样才能做到这一点 因为它使用一个函数来实现这一
  • 如何从此 d3.js layout.tree 获取树祖先和树后代的列表?

    我正在尝试和修改this https bl ocks org mbostock 4339083d3 js 的示例 用于根据 JSON 树结构绘制树 这就是树的一部分开始时的样子 我正在尝试进行两个单独的修改 但我不知道该怎么做 当单击节点的
  • 如何进行多个 d3 窗口大小调整事件

    我有三个svg一页上的元素 每个元素都由 D3 陪伴 每个都有自己的页面调整大小逻辑 由我写的简单模块 https github com TimeMagazine d3 base让他们做出反应 问题在于 只有最后一个调整大小事件被触发 因为
  • 如何使用 d3.format 获取可本地化或可定制的 si 代码

    使用 SI 代码绘制图表正是我们想要的 我们的 y 轴值往往是较大的货币值 例如 10 411 504 201 20 缩写这个 至少在美国语言环境中 这应该转换为 10 4B 但是使用 d3 format 的 s 类型表示 SI 代码 这将
  • 响应式 dc.js 图表占据了整个窗口

    我在使图表响应时遇到问题 我尝试将相同的示例应用于此链接中的 DC js 和 Crossfilter 调整大小系列 https github com dc js dc js blob master web src resizing resi
  • 快速响应的交互式图表/图形:SVG、Canvas 还是其他?

    我正在尝试选择正确的技术来更新一个项目 该项目基本上在可缩放 可平移的图表中渲染数千个点 当前使用 Protovis 的实现性能不佳 在这里查看 http www planethunters org classify http www pl
  • D3 强制布局,较大的节点聚集在中心

    我一直在修改将用于标签云的强制布局 每个标签都由一个
  • D3 删除千位的逗号分隔符

    我有一个包含 3 列的 json 其中一列是 年份 该列仅包含年份 没有日期 当我在 x 轴上绘制它时 年份会以逗号分隔符表示数千 所以在 json 中 日期的格式是 Year 1990 在 x 轴上 结果是 1 990 我一直在试图弄清楚
  • 动画 D3 地球仪 (d3.geo.azimuthal)

    我对 d3 javascript 库有疑问 我想使用方位角 http mbostock github com d3 talk 20111018 azimuthal html地球 我想从地球上的经度和纬度坐标插入点 并使地球动画化 而无需使用
  • D3js:如何设计地形图?

    给定具有高程数据的 GIS 栅格 如何在D3js中设计地形图 有没有使用 D3js 制作的耕地地形图 地形图的示例 不工作 我探索了以下可能性 tif gt gdal contour py gt shp gt topojson gt d3j
  • 如何使用序数轴更改刻度线的文本

    我有包含下一个属性的图表 barChart width width height height dimension dim group group x d3 scale ordinal xUnits dc units ordinal 我的轴
  • 根据 D3 中的属性值对对象进行排序

    我有一系列在 D3 中使用的对象 例如 var cities city London country United Kingdom index 280 city Geneva country Switzerland index 259 ci
  • 时间序列折线图与轴不同步

    本实验基于这个d3官方例子 http bost ocks org mike path 我想要实现的是可视化时间序列数据的最后 x 分钟 我有这个代码的副本jsfiddle http jsfiddle net 225dC 3 单击以添加新数据
  • 如何让d3.js生成svg而不绘制它?

    有没有办法只生成 svg 并将其作为字符串获取 而不实际绘制它 我考虑过将 svg 渲染到隐藏的 div 然后读取内部 html 但是有没有更干净的方法 我认为你可以这样做 var svg d3 select body append svg
  • 处理重叠 SVG 图层中的鼠标事件

    我正在使用 d3 js 构建地图可视化 我正在为美国各州和县绘制填充多边形 县的 SVG 图层位于州图层下方 状态已填充 但填充不透明度设置为 0 我认为 需要填充来捕获点击事件 我想捕获州级的点击事件 但我想捕获县级的鼠标悬停事件 但是
  • 窗口调整大小事件上的响应式画布

    我是画布概念的新手 我正在尝试使用 D3 js 绘制画布 我想让画布根据窗口屏幕大小进行响应 function onResize var element document getElementsByTagName canvas 0 var
  • D3v6 嵌套图 - 嵌套 join()?

    我想可视化每个节点的 孩子 洞察力 我猜 D3v6 join 函数可以嵌套 不幸的是我找不到任何例子 下面的代码片段包含一个具有 3 个节点和子节点作为属性的outerGraph 到目前为止 这些孩子还没有被使用 相反 innerGraph
  • 为什么 d3.js-lasso 不读取 svg 变量

    https jsfiddle net t52f1rn7 https jsfiddle net t52f1rn7 我正在尝试制作一个线条末端有圆圈的折线图 我想选择两个点并通过单击绘制线条 然后我找到了套索插件 我尝试将它用于相同的目的 选择
  • 如何部分或仅按百分比沿路径过渡

    我是 d3 的初学者 目前无法使用最新版本 但我使用的是 3 x 版本 我想要实现的应该很简单 但遗憾的是我没有找到有关如何做到这一点的资源 目标是在我的 svg 中显示一条路径 然后我想显示例如一个圆并沿着路径过渡 移动 追踪圆 如果我想

随机推荐