如何为 d3 图表提取名义标签

Posted

技术标签:

【中文标题】如何为 d3 图表提取名义标签【英文标题】:How to extract nominal labels for d3 chart 【发布时间】:2015-11-08 03:14:35 【问题描述】:

我正在努力适应在 d3 中访问和操作数据对象。

基本上,我正在尝试根据其地址是否位于WayCloseStreetAvenue 中来创建反映房产平均价格的条形图。

我在 Python 中使用 Pandas 处理数据,然后将数据导出为三列 districtstreet_splitvalue

区域列将用作在相邻补丁中相同街道名称的值之间交换的键。

Here's 用于代码和 json 的 Plunk

我使用嵌套在districtstreet_split 上键入数据,因此:

var nested_data = d3.nest()
                                .key( function(d)
                                    return d['district'])
                                .key(function(d)  return d.street_split; )                                
                                .entries(data);

虽然我可以使用以下代码访问下拉选择框的第一级键:

options.text(function (d)  return d.key; )
                    .attr("value", function (d)  return d.key; );

我不知道如何访问street_split 级别。

我能从 Google 找到的最好的功能是范围函数,但它只返回限制(应该如此)。

// Find range of street_name column
          var street_extent = d3.extent(data, function(d) 
              return d['street_split'];
          );

我正在寻求建议或资源来掌握 d3 中的此查询基本数据操作。

如果有帮助,我发现 this 对于理解 d3.nest 非常有用。

【问题讨论】:

【参考方案1】:

我这样做的方法是根据原始的非嵌套数据创建一组 street_extent 列的每个值,如下所示:

var street_extent = d3.set();

data.forEach(function(d) 
                    street_extent.add(d['street_split']);

                );

然后创建一个包含这些标签的变量:

var street_labels = street_extent.values();

然后使用 rangeRoundBands 方法将其插入音阶

var street_scale = d3.scale.ordinal()
            .rangeRoundBands([0+margin, width], .1)
            .domain(street_labels);

【讨论】:

以上是关于如何为 d3 图表提取名义标签的主要内容,如果未能解决你的问题,请参考以下文章

d3:如何为堆积面积图聚焦单独的工具提示?

如何为列谷歌图表添加填充

D3图表图例标签重叠

如何在 D3 图表的标签中包含换行符?

使用 D3 的路径生成器。如何为他们分配数据?

使用D3绘制图表--添加坐标轴和文本标签